c++ - 如何在 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 消息。我是窗口编程的初学者。
任何人都可以帮助我如何像上面那样子类化吗?
解决方案
雷米是正确的。您需要使用父级的 wndproc 来处理此消息。
您也可以直接使用 CWnd::OnCtlColor。大多数控件将此消息发送到其父级(通常是一个对话框),以准备 pDC 以使用正确的颜色绘制控件。
有关详细信息,请参阅下面的此文档。
https://msdn.microsoft.com/en-us/library/1xb05f0h.aspx?f=255&mspperror=-2147217396#Anchor_167
最好的问候, 毕男爵
推荐阅读
- python - 如何解释 word2vec 权重的形状?
- javascript - 验证表,空域警告消失,持续约 3 毫秒
- python - 关于分析图像数组的唯一值
- visual-studio - 如何更改 Visual Studio CMake 运行时库
- .net - 使用 Microsoft.CodeAnalysis 如何找到对类默认实例构造函数的引用(C# 4 的第 10.11.4 节)
- python - 将来自 tensorflow dynamic_rnn 的输出馈送到后续层
- asp.net - 如何在 .NET core 2 中动态创建 sitemap.xml?
- r - 从 mars, earth r 包中的 evimp 中提取返回值
- r - lapply 为重复回归产生错误
- cocos2d-x - 如何使用起点、角度和距离找到终点