Часть DialogProc:
Код:
case WM_DRAWITEM:
{
lpdis = (LPDRAWITEMSTRUCT) lParam;
DrawOwnControl(lpdis);
break;
}
Код:
void DrawOwnControl(LPDRAWITEMSTRUCT lpdis)
{
HDC hMemDc = CreateCompatibleDC(lpdis->hDC);
if(lpdis->CtlType == ODT_BUTTON) //its a button
{
LONG lStyle = GetWindowLong(lpdis->hwndItem, GWL_STYLE);
if(lStyle & BS_GROUPBOX)
{
//groupbox
LOGBRUSH lb;
lb.lbColor = RGB(0, 0, 0);
lb.lbStyle = BS_SOLID;
lb.lbHatch = NULL;
HBRUSH hBlack = CreateBrushIndirect(&lb);
SelectObject(lpdis->hDC, hBlack);
FloodFill(lpdis->hDC, 1, 1, RGB(125, 125, 125));
}
//button
BOOL bDwnText;
HBITMAP hBmpBtn = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_RAISED_NOFOCUS)); //bitmap for button drawing, default = raised w/o focus
bDwnText = FALSE;
switch(lpdis->itemAction)
{
case ODA_SELECT:
{
if(lpdis->itemState & ODS_SELECTED)
{
//down
if(lpdis->itemState & ODS_FOCUS)
{
//down focused
hBmpBtn = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_DOWN_FOCUS));
bDwnText = TRUE;
}else
{
//down non-focused
hBmpBtn = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_DOWN_NOFOCUS));
bDwnText = TRUE;
}
}
break;
}
case ODA_DRAWENTIRE:
{
if(lpdis->itemState & ODS_DISABLED)
{
//grayed
//the only difference is gray text instead of white
}
break;
}
case ODA_FOCUS:
{
//raised with focus
if(lpdis->itemState & ODS_FOCUS)
{
hBmpBtn = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_RAISED_FOCUS));
bDwnText = FALSE;
}
break;
}
}
SelectObject(hMemDc, hBmpBtn);
StretchBlt(lpdis->hDC, lpdis->rcItem.left, lpdis->rcItem.top, lpdis->rcItem.right - lpdis->rcItem.left, lpdis->rcItem.bottom - lpdis->rcItem.top, hMemDc, 0, 0, 91, 26, SRCCOPY);
uCurTextLen = GetWindowText(lpdis->hwndItem, szCurText, MAX_PATH);
SetBkColor(lpdis->hDC, RGB(76, 88, 68));
SetTextColor(lpdis->hDC, RGB(255, 255, 255));
RECT rcForText = lpdis->rcItem;
rcForText.left += STEAM_TEXT_OFFSET;
if(bDwnText)
{
//down text
rcForText.left += 2;
rcForText.top += 2;
}
//draw text
DrawText(lpdis->hDC, szCurText, uCurTextLen, &rcForText, DT_SINGLELINE | DT_VCENTER);
DeleteDC(hMemDc);
}else
if(lpdis->CtlType == ODT_LISTBOX) //listbox
{
//to be done yet
}
return;
}
То, что выделено красным - попытка обработать group box, не увенчавшаяся успехом