我正在开发一个 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 作为列表视图背景)时,问题就出现了。
为了启用 Common Controls 6.0,我这样做:
#pragma comment(linker,"\"/manifestdependency:type='win32' \name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
如果我在启用公共控件的情况下运行程序,所有编辑文本都以白色背景显示。但我可以用鼠标光标选择它来更改编辑颜色。
在网站上搜索我发现了这个问题。
它确认了我遇到的行为,但没有提供在没有焦点时更改编辑背景颜色的解决方案。
任何帮助表示赞赏。
编辑: 感谢 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;