首页 > 解决方案 > 如何在 C++ 中为 LTEXT 控件调用 WM_CTLCOLORSTATIC 消息

问题描述

我通过使用表单设计器编辑 .rc 文件为 MFC 类创建了对话框表单,如下所示, 在此处输入图像描述

它被视为LTEXT我想使用WM_CTLCOLORSTATIC 消息更改该文本的颜色。我使用子类如下,

HWND name_message = ::GetDlgItem(hwnd_, IDC_EDIT_OUTPUT_STRING);
g_EditTxtViewWndProc = (WNDPROC)(LONG_PTR)GetWindowLongPtr(name_message, GWLP_WNDPROC);
SetWindowLongPtr(name_message, GWLP_WNDPROC, (LONG_PTR)(EditTxtViewProc));

LRESULT CALLBACK
EditTxtViewProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) {

  static HBRUSH hBrush = CreateSolidBrush(RGB(255, 0, 0));

  switch( msg )
  {
      case WM_CTLCOLORSTATIC:
      {
        HDC hdC = (HDC)wp;
        SetTextColor(hdC, RGB(255, 0, 0));
        SetBkColor(hdC, RGB(255, 255, 255));
        return (INT_PTR)hBrush;
      }
   }
}

在上述情况下,它不会调用WM_CTLCOLORSTATIC 消息。我是窗口编程的初学者。

任何人都可以帮助我如何像上面那样子类化吗?

标签: c++visual-studiowinapi

解决方案


雷米是正确的。您需要使用父级的 wndproc 来处理此消息。

您也可以直接使用 CWnd::OnCtlColor。大多数控件将此消息发送到其父级(通常是一个对话框),以准备 pDC 以使用正确的颜色绘制控件。

有关详细信息,请参阅下面的此文档。

https://msdn.microsoft.com/en-us/library/1xb05f0h.aspx?f=255&mspperror=-2147217396#Anchor_167

最好的问候, 毕男爵


推荐阅读