我正在使用Win32 C ++ GUI桌面应用程序。
所有编辑文本都是在资源文件中静态创建的,其背景在DialogBox例程中使用 WM_CTLCOLOREDIT 和 WM_CTLCOLORSTATIC 消息进行了更改。
case WM_CTLCOLOREDIT:
if (lParam == (LPARAM)Edit1Hwnd)
return SetBkColor((HDC)wParam, GuiColors[RED]);
else if (lParam == (LPARAM)Edit2Hwnd)
return SetBkColor((HDC)wParam, GuiColors[GREEN]);
break;
case WM_CTLCOLORSTATIC:
if (lParam == (LPARAM)Edit3Hwnd)
return SetBkColor((HDC)wParam, GuiColors[BLUE]);
else if (lParam == (LPARAM)Edit4Hwnd)
return SetBkColor((HDC)wParam, GuiColors[YELLOW]);
break;
窗口加载后,我可以看到所有编辑的背景色都是正确的。
当我使用Common Controls 6.0时出现问题(我需要用它来加载BMP作为列表视图背景)。
为了启用通用控件6.0,我这样做:
#pragma comment(linker,"\"/manifestdependency:type='win32' \name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
如果我在启用“通用控件”的情况下运行该程序,则所有编辑文本都会以白色背景显示。但是我可以使用鼠标光标选择它来更改编辑颜色。
在网站上搜索后,我发现了这个question。
它确认了我的行为,但是当没有焦点时,它没有提供更改编辑背景颜色的解决方案。
感谢您的帮助。
编辑: 感谢RbMm的回答,我将代码更改为
case WM_CTLCOLOREDIT:
if (lParam == (LPARAM)Edit1Hwnd)
return (LRESULT)redBrush;
break;
像这样声明和创建redBrush
的地方
static HBRUSH redBrush = NULL;
redBrush = CreateSolidBrush(GuiColors[RED]);
编辑背景颜色在开始时正确地涂成红色,但是当编辑获得焦点时,它再次变成白色(失去焦点时又变回红色)。
编辑2: 谢谢zett42,现在可以使用了!
case WM_CTLCOLOREDIT:
if (lParam == (LPARAM)Edit1Hwnd){
SetBkColor((HDC)wParam, GuiColors[RED]);
return (LRESULT)redBrush;
}
break;