Chinaunix首页 | 论坛 | 博客
  • 博客访问: 485991
  • 博文数量: 80
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1916
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-11 22:01
个人简介

从事实时计算多年,熟悉jstorm/spark/flink/kafka/rocketMq, 热衷于开源,希望在这里和前辈们一起学习与分享,得到长足的进步!邮箱:hustfxj@gmail.com 我的githup地址是:https://github.com/hustfxj。欢迎和大家一起交流探讨问题。

文章分类

全部博文(80)

文章存档

2017年(11)

2015年(3)

2014年(33)

2013年(33)

分类: WINDOWS

2013-12-10 15:44:50

非模态框不响应PreTranslateMessage,后来看网上看到有人是使用Hook方法来做的,真是难找啊,分享给大家


具体实现如下:


LRESULT CALLBACK CMessMangerApp::GetMessageProc(int nCode, WPARAM wParam, LPARAM lParam)
{
 AFX_MANAGE_STATE(AfxGetStaticModuleState( ));
 LPMSG lpMsg = (LPMSG) lParam;

 if(AfxGetApp()->PreTranslateMessage(lpMsg))
 {  
  lpMsg->message = WM_NULL;
  lpMsg->lParam = 0L;
  lpMsg->wParam = 0;  
 }

 // Passes the hook information to the next hook procedure in
 // the current hook chain.
 return ::CallNextHookEx(hHook, nCode, wParam, lParam);
}

BOOL CMessMangerApp::InitInstance()
{
 hHook = ::SetWindowsHookEx(
  WH_GETMESSAGE,
  GetMessageProc,
  AfxGetInstanceHandle(),
  GetCurrentThreadId());

 ASSERT (hHook);
 return CWinApp::InitInstance(); 
}

int CMyApp::ExitInstance()
{
 UnhookWindowsHookEx((HHOOK)hHook); 
 return CWinApp::ExitInstance();
}

备注:其实我用钩子的方法去实现了后,发现虽然能够很好的处理一些问题,比如编辑框tooltip提示功能。但另一方面使得非模态对话框失去一些功能,有点退化成了模态对话框。所以一定程度上要尽量去避免上述问题。
在这之后,我自己碰到了在非模态对话框中编辑框提示功能问题。基于上述方法,可以达到我的目的。但是非模态对话框退化成了模态对话框,所以下面我给出了针对于编辑框提示功能的新方法。具体实现请下载代码:

阅读(2569) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~