Как изменить цвет фона combobox



Как изменить цвет фона поля со списком в C++ с помощью Windows API?

728   1  

1 ответ:

В общем случае вы можете создать кисть в куче, например, используя

static HBRUSH hbrush;
...
hbrush = CreateSolidBrush(RGB(255,0,0));

Затем в процедуре окна или диалога обработайте сообщения WM_CTL*** и верните ручку кисти, например

case WM_CTLCOLORBTN:
case WM_CTLCOLORSTATIC:
case WM_CTLCOLOREDIT:
case WM_CTLCOLORLISTBOX:
{
    HDC hdc = (HDC)wParam;
    SetTextColor(hdc, RGB(0, 0, 255)); //change text color
    SetBkMode(hdc, TRANSPARENT); //change text-background color, or set it to transparent
    return (INT_PTR)hbrush;
}

Это работает и для ComboBox. Если вы хотите обрабатывать различные элементы управления по отдельности, вы можете проверить lParam относительно дескриптора элемента управления.

Для ComboBox это немного сложнее. Вы должны получить ручку для редактирования и списка ComboBox. Вы можете сделать это с помощью GetComboBoxInfo

case WM_CTLCOLOREDIT:
case WM_CTLCOLORLISTBOX:
{
    HWND hTest = (HWND)lParam;
    COMBOBOXINFO ci = { sizeof(COMBOBOXINFO) };
    GetComboBoxInfo(hComboBox, &ci);

    if (
        hTest == ci.hwndItem ||
        hTest == ci.hwndList
        )
    {
        HDC hdc = (HDC)wParam;
        SetTextColor(hdc, RGB(0, 0, 255));
        SetBkMode(hdc, TRANSPARENT);
        return (INT_PTR)hbrush;
    }
}

Comments

    Ничего не найдено.