donho 85db072c3e [NEW] Make x64 compiling compatible.
git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository@304 f5eea248-9336-0410-98b8-ebc06183d4e3
2008-08-06 01:33:46 +00:00

241 lines
7.4 KiB
C++

/*
this file is part of notepad++
Copyright (C)2003 Don HO < donho@altern.org >
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "ColourPopup.h"
#include "SysMsg.h"
DWORD colourItems[] = {
RGB( 0, 0, 0), RGB( 64, 0, 0), RGB(128, 0, 0), RGB(128, 64, 64), RGB(255, 0, 0), RGB(255, 128, 128),
RGB(255, 255, 128), RGB(255, 255, 0), RGB(255, 128, 64), RGB(255, 128, 0), RGB(128, 64, 0), RGB(128, 128, 0),
RGB(128, 128, 64), RGB( 0, 64, 0), RGB( 0, 128, 0), RGB( 0, 255, 0), RGB(128, 255, 0), RGB(128, 255, 128),
RGB( 0, 255, 128), RGB( 0, 255, 64), RGB( 0, 128, 128), RGB( 0, 128, 64), RGB( 0, 64, 64), RGB(128, 128, 128),
RGB( 64, 128, 128), RGB( 0, 0, 128), RGB( 0, 0, 255), RGB( 0, 64, 128), RGB( 0, 255, 255), RGB(128, 255, 255),
RGB( 0, 128, 255), RGB( 0, 128, 192), RGB(128, 128, 255), RGB( 0, 0, 160), RGB( 0, 0, 64), RGB(192, 192, 192),
RGB( 64, 0, 64), RGB( 64, 0, 64), RGB(128, 0, 128), RGB(128, 0, 64), RGB(128, 128, 192), RGB(255, 128, 192),
RGB(255, 128, 255), RGB(255, 0, 255), RGB(255, 0, 128), RGB(128, 0, 255), RGB( 64, 0, 128), RGB(255, 255, 255),
};
void ColourPopup::create(int dialogID)
{
_hSelf = ::CreateDialogParam(_hInst, MAKEINTRESOURCE(dialogID), _hParent, (DLGPROC)dlgProc, (LPARAM)this);
if (!_hSelf)
{
systemMessage("ColourPopup");
throw int(696);
}
Window::getClientRect(_rc);
display();
}
BOOL CALLBACK ColourPopup::dlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_MEASUREITEM:
{
RECT rc;
LPMEASUREITEMSTRUCT lpmis = (LPMEASUREITEMSTRUCT) lParam;
::GetWindowRect(::GetDlgItem(hwnd, lpmis->CtlID), &rc);
lpmis->itemHeight = (rc.bottom-rc.top)/6;
lpmis->itemWidth = (rc.right-rc.left)/8;
return TRUE;
}
case WM_INITDIALOG :
{
ColourPopup *pColourPopup = (ColourPopup *)(lParam);
pColourPopup->_hSelf = hwnd;
::SetWindowLongPtr(hwnd, GWL_USERDATA, (long)lParam);
pColourPopup->run_dlgProc(message, wParam, lParam);
return TRUE;
}
default :
{
ColourPopup *pColourPopup = reinterpret_cast<ColourPopup *>(::GetWindowLongPtr(hwnd, GWL_USERDATA));
if (!pColourPopup)
return FALSE;
return pColourPopup->run_dlgProc(message, wParam, lParam);
}
}
}
BOOL CALLBACK ColourPopup::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
{
int nColor;
for (nColor = 0 ; nColor < int(sizeof(colourItems)/sizeof(DWORD)) ; nColor++)
{
::SendDlgItemMessage(_hSelf, IDC_COLOUR_LIST, LB_ADDSTRING, nColor, (LPARAM) "");
::SendDlgItemMessage(_hSelf, IDC_COLOUR_LIST, LB_SETITEMDATA , nColor, (LPARAM) colourItems[nColor]);
//if (g_bgColor == colourItems[nColor])
//::SendDlgItemMessage(_hSelf, IDC_COLOUR_LIST, LB_SETCURSEL, nColor, 0);
}
//::SetCapture(_hSelf);
return TRUE;
}
case WM_CTLCOLORLISTBOX:
return (LRESULT) CreateSolidBrush(GetSysColor(COLOR_3DFACE));
case WM_DRAWITEM:
{
HDC hdc;
COLORREF cr;
HBRUSH hbrush;
DRAWITEMSTRUCT *pdis = (DRAWITEMSTRUCT *)lParam;
hdc = pdis->hDC;
RECT rc = pdis->rcItem;
// Transparent.
SetBkMode(hdc,TRANSPARENT);
// NULL object
if (pdis->itemID == UINT(-1)) return 0;
switch (pdis->itemAction)
{
case ODA_DRAWENTIRE:
switch (pdis->CtlID)
{
case IDC_COLOUR_LIST:
rc = pdis->rcItem;
cr = (COLORREF) pdis->itemData;
InflateRect(&rc, -3, -3);
hbrush = CreateSolidBrush((COLORREF)cr);
FillRect(hdc, &rc, hbrush);
DeleteObject(hbrush);
FrameRect(hdc, &rc, (HBRUSH) GetStockObject(GRAY_BRUSH));
break;
}
// *** FALL THROUGH ***
case ODA_SELECT:
rc = pdis->rcItem;
if (pdis->itemState & ODS_SELECTED)
{
rc.bottom --;
rc.right --;
// Draw the lighted side.
HPEN hpen = CreatePen(PS_SOLID, 1, GetSysColor(COLOR_BTNSHADOW));
HPEN holdPen = (HPEN)SelectObject(hdc, hpen);
MoveToEx(hdc, rc.left, rc.bottom, NULL);
LineTo(hdc, rc.left, rc.top);
LineTo(hdc, rc.right, rc.top);
SelectObject(hdc, holdPen);
DeleteObject(hpen);
// Draw the darkened side.
hpen = CreatePen(PS_SOLID, 1, GetSysColor(COLOR_BTNHIGHLIGHT));
holdPen = (HPEN)SelectObject(hdc, hpen);
LineTo(hdc, rc.right, rc.bottom);
LineTo(hdc, rc.left, rc.bottom);
SelectObject(hdc, holdPen);
DeleteObject(hpen);
}
else
{
hbrush = CreateSolidBrush(GetSysColor(COLOR_3DFACE));
FrameRect(hdc, &rc, hbrush);
DeleteObject(hbrush);
}
break;
case ODA_FOCUS:
rc = pdis->rcItem;
InflateRect(&rc, -2, -2);
DrawFocusRect(hdc, &rc);
break;
default:
break;
}
return TRUE;
}
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDOK :
{
isColourChooserLaunched = true;
CHOOSECOLOR cc; // common dialog box structure
static COLORREF acrCustClr[16] = {
RGB(0xFF,0xFF,0xFF),RGB(0xFF,0xFF,0xFF),RGB(0xFF,0xFF,0xFF),RGB(0xFF,0xFF,0xFF),\
RGB(0xFF,0xFF,0xFF),RGB(0xFF,0xFF,0xFF),RGB(0xFF,0xFF,0xFF),RGB(0xFF,0xFF,0xFF),\
RGB(0xFF,0xFF,0xFF),RGB(0xFF,0xFF,0xFF),RGB(0xFF,0xFF,0xFF),RGB(0xFF,0xFF,0xFF),\
RGB(0xFF,0xFF,0xFF),RGB(0xFF,0xFF,0xFF),RGB(0xFF,0xFF,0xFF),RGB(0xFF,0xFF,0xFF),\
}; // array of custom colors
// Initialize CHOOSECOLOR
::ZeroMemory(&cc, sizeof(cc));
cc.lStructSize = sizeof(cc);
cc.hwndOwner = _hParent;
cc.lpCustColors = (LPDWORD) acrCustClr;
cc.rgbResult = _colour;
cc.Flags = CC_FULLOPEN | CC_RGBINIT;
display(false);
if (ChooseColor(&cc)==TRUE)
{
::SendMessage(_hParent, WM_PICKUP_COLOR, cc.rgbResult, 0);
}
else
{
::SendMessage(_hParent, WM_PICKUP_CANCEL, 0, 0);
}
return TRUE;
}
case IDC_COLOUR_LIST :
{
if (HIWORD(wParam) == LBN_SELCHANGE)
{
int i = ::SendMessage((HWND)lParam, LB_GETCURSEL, 0L, 0L);
_colour = ::SendMessage((HWND)lParam, LB_GETITEMDATA, i, 0L);
::SendMessage(_hParent, WM_PICKUP_COLOR, _colour, 0);
return TRUE;
}
}
default :
return FALSE;
}
case WM_ACTIVATE :
{
if (LOWORD(wParam) == WA_INACTIVE)
if (!isColourChooserLaunched)
::SendMessage(_hParent, WM_PICKUP_CANCEL, 0, 0);
return TRUE;
}
}
return FALSE;
}