OnCtrlColor 不起作用?
我使用以下重载方法在基于 Visual C++ MFC 对话框的应用程序中将列表框中的文本颜色更改为红色。当我在调试模式下构建程序时,它运行得很好。但是当我使用 RELEASE 模式时,文本颜色不会改变。这是为什么?我该如何克服这个问题?
谢谢!!
HBRUSH MyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
if(nCtlColor == CTLCOLOR_LISTBOX)
{
if(bChangeTextColor)
{
pDC->SetTextColor(RGB(255, 0, 0));
return m_hRedBrush;
}
}
return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}
I used the following overloaded method to change the text color to red in a listbox, in a Visual C++ MFC dialog based application. When I build the program in DEBUG mode, it works perfectly. But when I use the RELEASE mode the text color doesn't change. Why is this and how can I overcome this problem??
Thanks!!
HBRUSH MyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
if(nCtlColor == CTLCOLOR_LISTBOX)
{
if(bChangeTextColor)
{
pDC->SetTextColor(RGB(255, 0, 0));
return m_hRedBrush;
}
}
return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您必须在 MESSAGE_MAP 中声明
,例如:
You must declare in MESSAGE_MAP
ex:
您可以尝试在自定义代码之前调用基本实现
CDialog::OnCtlColor
,如下所示:CDialog::OnCtlColor
在内部执行一些由您的跳过的操作return
在你的函数中。这只是一个非常模糊的想法,但我一直以这种方式使用OnCtlColor
并且从未遇到过问题。Can you try to call the base implementation
CDialog::OnCtlColor
before your custom code, like this:CDialog::OnCtlColor
does some stuff internally which is skipped by yourreturn
inside of your function. It's only a very vague idea but I have always usedOnCtlColor
this way and never had a problem.我必须使用之前的两个答案才能使其发挥作用。
我在 MESSAGE_MAP 中声明了句柄
我在自定义代码之前使用了
CDialog::OnCtlColor
:I have to use both previous answers to make it work.
I declared handle in MESSAGE_MAP
I used
CDialog::OnCtlColor
before my custom code: