如何使用Windows API在C++中更改组合框的背景颜色?
最佳答案
通常,您可以在堆中创建画笔,例如使用
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的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;
}
}
关于c++ - 如何更改组合框的背景颜色,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37728074/