所以首先我使用的是 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、创建 list 等来启用视觉样式。
编辑:
现在尝试处理 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;
}
至少有人能给我指出正确的方向吗?
最佳答案
也许一旦您的应用程序以视觉样式运行,您最好处理 NM_CUSTOMDRAW按钮控制的通知。最初,这些仅用于通用控件,但相当多的版本也已经以相同的方式扩展了按钮行为。
关于C++ Win32 单选按钮背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7531051/