Цвет фона переключателя C ++ Win32 - PullRequest
2 голосов
/ 23 сентября 2011

Итак, сначала я использую 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;
}

Может ли кто-нибудь хотя бы указать мне правильное направление?

1 Ответ

1 голос
/ 23 сентября 2011

Возможно, как только ваше приложение будет работать с визуальными стилями, вам будет лучше обрабатывать NM_CUSTOMDRAW уведомление для управления кнопками. Первоначально они были предназначены только для общих элементов управления, но довольно много версий уже так же расширяют поведение кнопок.

...