求助:如何拦截WM_SETTEXT事件?

VcTrue 2016-08-22 09:42:32
我派生了一个CStatic类,主要是自定义标签显示的字体及去掉背景。
在类中重载了OnPaint、CtlColor及OnEraseBkgnd。
现在遇到个问题,当父窗口用SetWindowText修改标签内容时,以上被重载的函数除了CtlColor外都不会被执行,所以标签内容修改后字体还用的是系统默认的字体。
虽然可以在CtlColor中重绘窗体,但因阻止不了系统的重写标签内容过程,会有闪烁。
所以请教下大家,有没有什么方法拦截WM_SETTEXT所执行的函数,把系统重写标签的过程作我自己的过程来替代。
...全文
230 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2016-08-23
  • 打赏
  • 举报
回复
LRESULT CMyStatic::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) { // TODO: Add your specialized code here and/or call the base class if(message==WM_SETTEXT) { //wParam = 0; // not used; must be zero //lParam = (LPARAM)lpsz; afxDump << (LPCTSTR)lParam << " WM_SETTEXT\n"; } return CStatic::DefWindowProc(message, wParam, lParam); }
VcTrue 2016-08-23
  • 打赏
  • 举报
回复
谢谢上面两位朋友。 不过你们只是拦截WM_SETTEXT消息, 这个我知道。我的目的是想重载其接下来要执行的写文字的动作。 我现在用的方法是拦截到WM_SETTEXT后保存其文字内容,然后重绘界面后直接返回,貌似也达到目的了。
schlafenhamster 2016-08-22
  • 打赏
  • 举报
回复
LRESULT CMyStatic::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) { // TODO: Add your specialized code here and/or call the base class if(message==WM_SETTEXT) { afxDump << "WM_SETTEXT\n"; } return CStatic::DefWindowProc(message, wParam, lParam); }
zgl7903 2016-08-22
  • 打赏
  • 举报
回复
重载 WindowPorc 处理

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧