Итак, сначала я использую Windows API, никаких специальных библиотек.
Я создал переключатель с этим кодом:
g_hRadioButton = CreateWindowEx(0, "BUTTON", "Radio Button",
WS_CHILD | WS_VISIBLE | BS_RADIOBUTTON,
10, 55, 120, 25, hWnd, (HMENU)RADIOBUTTON, GetModuleHandle(NULL), NULL);
Теперь у меня есть черный фон для главного окна, поэтому я хотел бы, чтобы текст был белым, а фон - прозрачным.
Я попытался проверить сообщения WM_CTLCOLORBTN
и WM_CTLCOLORSTATIC
.
Вот мой код:
case WM_CTLCOLORBTN:
SetTextColor((HDC)wParam, 0xffffff);
SetBkMode((HDC)wParam, TRANSPARENT);
return (LRESULT)GetStockObject(BLACK_BRUSH);
case WM_CTLCOLORSTATIC:
SetTextColor((HDC)wParam, 0xffffff);
SetBkMode((HDC)wParam, TRANSPARENT);
return (LRESULT)GetStockObject(NULL_BRUSH);
Это не работает, фоны все еще белые, а текст черный.
Также я включил визуальные стили, связавшись с ComCtl32.lib, создав манифест и все такое.
EDIT:
Попытка обработать сообщение NM_CUSTOMDRAW
прямо сейчас.
Вот мой код, но он не имеет никакого эффекта, и я уверен, что я делаю что-то не так.
case WM_NOTIFY:
{
if (((LPNMHDR)lParam)->code == NM_CUSTOMDRAW)
{
LPNMCUSTOMDRAW nmCD = (LPNMCUSTOMDRAW)lParam;
switch(nmCD->dwDrawStage)
{
case CDDS_PREPAINT:
return CDRF_NOTIFYITEMDRAW;
case CDDS_ITEMPREPAINT:
SetTextColor(nmCD->hdc, 0xffffff);
SetBkColor(nmCD->hdc, 0x000000);
return CDRF_DODEFAULT;
}
}
break;
}
Может ли кто-нибудь хотя бы указать мне правильное направление?