如何在c ++

时间:2018-11-02 19:05:51

标签: 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消息。我是Window编程的初学者。

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

1 个答案:

答案 0 :(得分:1)

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

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

有关更多信息,请参阅下面的文档。

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

最好的问候, 毕男爵