?
Ich hab den hDC, also GetDC(...) und ReleaseDC(..), jetzt entfernt. Weiterhin hab ich nach jedem Aufruf von FillRect(...) den Brush mit DeleteObject(...) gelöscht und DrawFrameControl(..) zum Zeichnen des Buttos verwendet. Erwartungsgmäß funktioniert der Code einwandfrei, danke für die Hinweise. Hier nochmal der überarbeitete Code, ich hoffe der ist nun optimal?
void OwnerDraw_ColorButton(LPARAM lParam, COLORREF mycolor){
HBRUSH hBrush;
RECT rc_icon, rc_color;
LPDRAWITEMSTRUCT di;
di = (LPDRAWITEMSTRUCT)lParam;
rc_color = rc_icon = di->rcItem;
rc_color.left += 6;
rc_color.top += 6;
rc_color.right -= 17;
rc_color.bottom -= 6;
rc_icon.left += 5;
rc_icon.top += 5;
if(di->itemState & ODS_SELECTED){
rc_color.left++;
rc_color.top++;
rc_color.right++;
rc_color.bottom++;
rc_icon.left++;
rc_icon.top++;
DrawFrameControl(di->hDC, &di->rcItem, DFC_BUTTON, DFCS_BUTTONPUSH | DFCS_PUSHED);
}else{
DrawFrameControl(di->hDC, &di->rcItem, DFC_BUTTON, DFCS_BUTTONPUSH);
}
if(di->itemState & ODS_FOCUS){
di->rcItem.top += 3;
di->rcItem.left += 3;
di->rcItem.right -= 3;
di->rcItem.bottom -= 3;
DrawFocusRect(di->hDC, &di->rcItem);
}
hBrush = CreateSolidBrush(mycolor);
FillRect(di->hDC, &rc_color, hBrush);
DeleteObject(hBrush);
DrawIconEx(di->hDC, rc_icon.left, rc_icon.top, hIcon, 0, 0, 0, 0, DI_NORMAL);
}