使用通用控件6.0时无法更改编辑文本背景

时间:2019-01-08 14:07:39

标签: winapi background common-controls textbox

我正在使用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;

0 个答案:

没有答案