Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++中如何调用WMLCTLCOLLIFTION消息实现LTEXT控件_C++_Visual Studio_Winapi - Fatal编程技术网

C++中如何调用WMLCTLCOLLIFTION消息实现LTEXT控件

C++中如何调用WMLCTLCOLLIFTION消息实现LTEXT控件,c++,visual-studio,winapi,C++,Visual Studio,Winapi,我使用表单设计器编辑.rc文件,创建了MFC类的对话框表单,如下所示:, 它被视为LTEXT。我想使用WM_CTLCOLORSTATIC消息更改该文本的颜色。 我使用的子类如下所示 HWND name_message = ::GetDlgItem(hwnd_, IDC_EDIT_OUTPUT_STRING); g_EditTxtViewWndProc = (WNDPROC)(LONG_PTR)GetWindowLongPtr(name_message, GWLP_WNDPROC); SetWi

我使用表单设计器编辑.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消息。我是窗口编程的初学者


有谁能帮助我如何像上面那样子类化吗?

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

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

有关更多信息,请参阅以下文档

致以最良好的祝愿, Baron Bi

WM_CTLCOLORSTATIC发送给控件的父控件,而不是控件本身。因此父级的wndproc需要处理它,而不是控件的wndproc。文件中明确说明了这一点。