0

我正在开发一个 Win32 C++ GUI 桌面应用程序。

所有编辑文本都是在资源文件中静态创建的,并且它们的背景在 DialogBox 例程中使用WM_CTLCOLOREDITWM_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;
4

0 回答 0