在MFC中手动添加消息处理函数PreTranslateMessage
来源:互联网 发布:淘宝818开学季 编辑:程序博客网 时间:2024/05/01 17:53
一、添加消息处理函数PreTranslateMessage,此函数可以通过MFC ClassWizard添加
- BOOL CPreTranslateMessageDlg::PreTranslateMessage(MSG* pMsg)
- {
- if (pMsg->message==WM_LBUTTONDOWN)
- {
- MessageBox("三三四四");
- }
-
- return CDialog::PreTranslateMessage(pMsg);
- }
此函数为手动添加的消息函数,可通过pMsg->message来判断是什么消息,比如WM_LBUTTONDOWN是左键单击消息,那当单击左键时就会执行此函数,同样当敲击一下键盘也会执行PreTranslateMessage函数
关于PreTranslateMessage
MFC消息控制流最具特色的地方是CWnd类的虚拟函数PreTranslateMessage(),通过重载这个函数,我们可以改变MFC的消息控制流程,甚至可以作一个全新的控制流出来。只有穿过消息队列的消息才受PreTranslateMessage()影响,采用SendMessage()或其他类似的方式向窗口直接发送的而不经过消息队列的消息根本不会理睬PreTranslateMessage()的存在。
顾名思义,PreTranslateMessage就是消息发送给窗口之前,提前拦截消息,然后对消息进行处理(即,改变了MFC的消息控制流程)
要注意一下两点:
再看看一下的例子:
BOOL CMyMessageView::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if (pMsg->message==WM_LBUTTONDOWN)
{
MessageBox("三三四四");
}
if (pMsg->message==WM_MYMESSAGE) //这个是自定义消息,点击某个按钮时,会发送该消息~ 用PostMessage(WM_MYMESSAGE,IDC_BUTTON1);//发送之后立即返回
{
MyDialog dlg;
dlg.DoModal();
}
if (pMsg->message==WM_KEYDOWN)
{
switch (pMsg->wParam)
{
case VK_DOWN:
case VK_LEFT:
case VK_RIGHT:
{
AfxMessageBox("nihao!");
}
return TRUE;
default:
break;
}
}
return CFormView::PreTranslateMessage(pMsg);
}
在上面的例子中,
1.鼠标按下时,会响应 MessageBox("三三四四");
2.键盘按下(并且是左、下、右)时,会响应AfxMessageBox("nihao!");
以上两个消息(鼠标按下的消息、按下键盘的消息),都是系统自带的消息~~易知,PreTranslateMessage改变了消息流程,让他们弹出对话框了
实际上,我们可以为这两个消息添加消息响应函数,OnLButtonDown,OnKeyDown
但是,有了PreTranslateMessage,这些消息响应函数就执行不到了
3.WM_MYMESSAGE是自定义消息~~我们也为它定义了消息响应函数OnMyMessage,但是,因为被PreTranslateMessage捕获了,所以先会执行PreTranslateMessage里面
- 在MFC中手动添加消息处理函数PreTranslateMessage
- 在MFC中手动添加消息处理函数PreTranslateMessage
- 在MFC中手动添加消息处理函数PreTranslateMessage和自定义消息
- 在MFC中手动添加消息处理函数PreTranslateMessage和自定义消息
- 在vs2008 vc++ 中添加mfc中消息处理函数
- 在vs2008 vc++ 中添加mfc中消息处理函数
- 在vs2008 vc++ 中添加mfc中消息处理函数
- MFC在VS2008中如何手动添加消息映射
- MFC在VS2008中如何手动添加消息映射
- MFC在VS2008中如何手动添加消息映射
- MFC在VS2008中如何手动添加消息映射
- MFC中手动添加消息映射
- MFC中PreTranslateMessage函数浅析
- MFC中PreTranslateMessage函数浅析
- MFC中PreTranslateMessage函数浅析
- MFC中PreTranslateMessage函数浅析
- 手动添加命令消息处理函数
- MFC中添加消息处理函数的步骤
- Android开发之修改屏幕方向
- Activity的加载模式之singleInstance——Android
- 如何去掉CDockablePane的Close按钮
- 网站压力测试工具webbench
- ArcEngine 高亮/闪烁
- 在MFC中手动添加消息处理函数PreTranslateMessage
- 使用nexus做Maven的私服
- FragmentTabHost切换Fragment时避免重复加载UI
- 九度1009
- 文件传输的显示
- 软考之路(1)——浅解网络基础知识
- 布局管理器BorderLayout、FlowLayout、GridLayout
- java.lang.NoClassDefFoundError: org/apache/commons/io/FileUtils
- coco2d-x 导入eclipse后的资源链接问题