c++ - 如何在 C++ 中为 LTEXT 控件调用 WM_CTLCOLORSTATIC 消息

标签 c++ visual-studio winapi

我通过使用窗体设计器编辑 .rc 文件为 MFC 类创建了对话框窗体,如下所示, enter image description here

它被视为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 消息。我是窗口编程的初学者。

谁能帮我知道如何像上面那样子类化?

最佳答案

Remy Lebeau's comment是正确的。您需要在父级 的窗口过程中处理此消息。

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

有关详细信息,请参阅 MSDN:https://learn.microsoft.com/en-us/cpp/mfc/reference/cwnd-class#onctlcolor

关于c++ - 如何在 C++ 中为 LTEXT 控件调用 WM_CTLCOLORSTATIC 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53124475/

相关文章:

c++ - 在C++中移动和复制构造函数

c - 请帮我解决c编程中的这个错误

c++ - Visual Studio 中的 "wcs"和 "_w"和 "_mbs"前缀

c# - 如何使用 C# 以编程方式部署数据库

c++ - 阻塞的 send() 会立即返回吗?

c++ - 在它自己的指针上模板化一个类?

c++ - 该程序未打印整个字符串

c++ - std::logic_error 类是不同类型的 std::invalid_argument,不是吗?

c++ - 使用 Windows API 启动外部程序

c++ - 什么是 Windows 工具包以及它们如何工作?