我如下通过使用表单设计器编辑.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消息。我是Window编程的初学者。
任何人都可以帮助我如何像上面那样子类化吗?
答案 0 :(得分:1)
Remy是正确的。您需要使用父级的wndproc处理此消息。
您也可以直接使用CWnd :: OnCtlColor。大多数控件都会将此消息发送给其父级(通常是一个对话框),以准备pDC以使用正确的颜色绘制控件。
有关更多信息,请参阅下面的文档。
https://msdn.microsoft.com/en-us/library/1xb05f0h.aspx?f=255&mspperror=-2147217396#Anchor_167
最好的问候, 毕男爵