如何更改组合框的背景色 < >如何使用Windows API更改C++中组合框的背景颜色?

如何更改组合框的背景色 < >如何使用Windows API更改C++中组合框的背景颜色?,c++,winapi,C++,Winapi,。一般来说,可以在堆中创建一个刷,例如使用 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;

。一般来说,可以在堆中创建一个刷,例如使用

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的EditBox和ListBox的句柄。您可以使用
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;
    }
}

我使用了搜索字符串“MSDN C++ +组合框背景色”。可能重复。互联网是一个神奇的地方,首先搜索。另一种可能性:。我上次搜索的另一个选择。你尝试了什么?请使用您尝试过的简单功能编辑您的帖子。@ThomasMatthews:
SetBkColor
本身没有什么帮助。它为设备上下文中的文本渲染设置背景色。您需要创建一个所有者绘制的控件,并处理所有渲染函数,才能使用它。这几乎就像用*“使用焊接”来回答“如何制造飞机”的问题。