MFC学习笔记(3)—— 消息(2)
来源:互联网 发布:zcash挖矿软件 编辑:程序博客网 时间:2024/06/06 07:00
介绍完了消息的种类和自定义消息的发送,下面再来介绍一下Windows的消息响应机制,以便于我们更好的理解消息,也为我们截获消息做准备。
消息首先进入系统的消息,然后进入响应应用程序的消息队列,进入应用程序唯一的消息循环。消息循环不停地接收消息,同时判断这个消息是不是退出消息,如果是就退出,不是就预处理,翻译并分发下去。随后到达全局的回调函数,也叫消息的入口点函数
AfxWndProc();AfxCallWndProc();
接着到达CWnd下的
WindowProc();然后
CWnd::OnWndMsg();CFrameWnd::OnCommand()CWnd::OnCommand();CFrameWnd::OnCmdMsg();在这几个函数之后,就按照CView、CFrameWnd、CDocument、CWinApp的顺序依次响应。
截获消息:了解消息的流程
1、截获命令消息:在CWnd::OnWndMsg() 这个函数之后处理的消息都是命令消息,所以只要重写CFrameWnd::OnCommand()这个函数,判断消息的ID,就可以达到截获的目的。
2、截获标准消息:在CView或CFrameWnd类里重写父类CWnd::OnWndMsg()这个函数,判断消息,就可以截获。
3、截获自定义消息,同理标准消息。
以上三个截获请注意:在哪个类里接收消息,就要在哪个类里截获。
4、截获退出消息:这个有些麻烦,因为退出程序的时候发送了三个消息:WM_CLOSE、WM_DESTORY、WM_QUIT。因为在唯一的消息循环里已经判断了是否为退出消息,所以我们需要在这之前截获。
在CMainApp类中重写父类CThread::PumpMessage() 代码如下
BOOL CmsgApp::PumpMessage(){// TODO: 在此添加专用代码和/或调用基类MSG msg;//定义个消息结构体接收传来的消息if (PeekMessage(&msg,NULL,0,0,PM_REMOVE)){if (msg.message == WM_QUIT)//接收的是quit{return FALSE;//直接退出}AfxPreTranslateMessage(&msg);//如果不是,预处理,翻译,分发消息::TranslateMessage(&msg);::DispatchMessage(&msg);}return CWinAppEx::PumpMessage();}这就相当于自己重写了一个消息循环,是不是很cool?
0 0
- MFC学习笔记(3)—— 消息(2)
- MFC学习笔记(2)—— 消息(1)
- MFC学习笔记——消息映射
- MFC学习笔记——自定义消息的使用 .
- MFC学习笔记——消息映射机制afx
- 达内学习笔记——MFC消息处理
- MFC学习笔记3_消息对话框
- MFC学习笔记2_消息映射
- 深入浅出MFC学习笔记2--消息映射和消息路由
- MFC学习笔记五——消息映射(Message Mapping)
- MFC学习笔记——CDialog(为控件添加消息处理函数)
- MFC消息机制学习笔记
- MFC消息映射学习笔记
- MFC笔记——消息响应
- 探索MFC笔记——消息映射
- 学习笔记之深入浅出MFC 第3讲 消息循环
- C++学习笔记之MFC消息机制(转)
- MFC学习笔记之四————菜单编程与windows消息分类
- 最小生成树之 prim算法和kruskal算法(以 hdu 1863为例)
- HDU3015 Disharmony Trees
- 解决无线路由器连接AP外置型epon上行e8-c家庭网关无法上网的问题
- C++两个不同类成员之间的调用
- 猜数:首先生成一个介于1-100之间的整数,从键盘不断输入数值直到该数值与生成的那个数相符为止,并打印出猜数的次数。
- MFC学习笔记(3)—— 消息(2)
- Cocos2d-x 开发神器cococreator使用介绍
- protobuf数据类型
- LeetCode - Two Sum
- 百练2755 神奇的口袋 【深搜】or【动规】or【普通递归】or【递推】
- poj 3255
- UVA10387 Billiard
- [转]Android蓝牙开发浅谈
- Github新手入门,简单使用方法!