MFC学习笔记(2)—— 消息(1)
2014-07-19 16:47
190 查看
Windows是基于消息的,应用程序的每一个动作都靠处理消息来进行。消息具体是什么?其实就是一堆以WM_开头的宏。
消息的分类:
1、标准消息(窗口消息):所有以“WM_”开头的消息都是标准消息,除了WM_COMMAND和WM_NOTIFY。
接收者是衍生自CWnd的类,例如CFrameWnd和CView。
2、命令消息:WM_COMMAND这类消息都是命令消息,发送者是UI对象,例如菜单、工具栏、加速键等等。
接收者可以使衍生自CCmdTarget的所有类,例如CWnd、CWinApp、CDocument。
3、控件消息(通知消息):WM_NOTIFY,顾名思义,是由控件发送的。接收者是它的父窗口。消息也通常为WM_COMMAND。
自定义消息:
发出自定义消息有两种方式:
第一种:在应用程序空闲的时候发送,不进入消息队列,不是阻塞函数
第二中:立即发送,不进入消息队列,是阻塞函数,等消息处理完再往下执行
自定义消息的实现函数:
自定义消息的消息映射:
要想添加一个自定义消息,就要在三个部分添加代码——声明,实现,消息映射。这些可以添加在一个类里,也可以添加在两个类里。比如,要想在CView类里发送一个消息,实现放在CFrameWnd类里,这个消息的发送者就不能是Cview类隐式调用的this指针,而需要获得框架类的指针来调用,获得框架指针的方法有三种:
同样的,想要框架类给视图类发送消息,就需要获得当前视图的指针:
消息的分类:
1、标准消息(窗口消息):所有以“WM_”开头的消息都是标准消息,除了WM_COMMAND和WM_NOTIFY。
接收者是衍生自CWnd的类,例如CFrameWnd和CView。
2、命令消息:WM_COMMAND这类消息都是命令消息,发送者是UI对象,例如菜单、工具栏、加速键等等。
接收者可以使衍生自CCmdTarget的所有类,例如CWnd、CWinApp、CDocument。
3、控件消息(通知消息):WM_NOTIFY,顾名思义,是由控件发送的。接收者是它的父窗口。消息也通常为WM_COMMAND。
命令消息的响应顺序:虽然这四个类都可以响应命令消息,但是响应也分先后的。
CView——CDocument——CFrameWnd——CWinApp自定义消息:
发出自定义消息有两种方式:
PostMessage(UINT message,WPARAMA wp=0, LPARAMA lp=0); SendMessage(UINT message, WPARAMA wp=0, LPARAMA lp=0);
第一种:在应用程序空闲的时候发送,不进入消息队列,不是阻塞函数
第二中:立即发送,不进入消息队列,是阻塞函数,等消息处理完再往下执行
自定义消息的实现函数:
LRESULT funName(WPARAM wp, LPARAM, lp)返回值是一个LRESULT,其实就是一个长整形,通常返回1l,返回0也可以。
自定义消息的消息映射:
ON_MESSAGE(MSG_ID, &fun)第一个参数是消息的ID,也就是post和send的第一个参数,需要自己定义。第二个参数是实现函数的地址。
要想添加一个自定义消息,就要在三个部分添加代码——声明,实现,消息映射。这些可以添加在一个类里,也可以添加在两个类里。比如,要想在CView类里发送一个消息,实现放在CFrameWnd类里,这个消息的发送者就不能是Cview类隐式调用的this指针,而需要获得框架类的指针来调用,获得框架指针的方法有三种:
AfxGetMainWnd(); GetParent(); GetParentFrame();
同样的,想要框架类给视图类发送消息,就需要获得当前视图的指针:
GetActiveView();
相关文章推荐
- MFC学习笔记之四————菜单编程与windows消息分类
- MFC学习笔记——消息映射
- MFC学习笔记3 Windows编程基础--DialogBox、回调、消息、控件
- 孙鑫vc++学习(vs2008)笔记之第四课MFC消息映射、画图
- MFC学习笔记——CDialog(为控件添加消息处理函数)
- 达内学习笔记——MFC消息处理
- [每日一学]MFC学习笔记——自定义消息的使用
- VS2013MFC单文档工程学习笔记六 - 窗口的常用消息事件
- MFC学习笔记二 处理键盘消息
- MFC学习笔记之:VC6.0中通过向导添加的消息响应系统自动添加的代码及删除方式
- MFC学习笔记——自定义消息的使用 .
- MFC学习笔记之四————菜单编程与windows消息分类
- mfc 学习笔记lesson 1 消息消息队列
- MFC学习笔记之消息映射机制
- mfc学习笔记之如何修改mfc消息机制处理顺序
- MFC学习笔记之二----------MFC框架程序及消息映射
- MFC学习笔记(二):消息对话框的两个函数用法与区别
- 【VS2010学习笔记】【函数学习】一(MFC+OpenCV2.4.7读取摄像头之WM_TIMER消息处理函数的添加问题)
- mfc的消息映射学习笔记
- MFC学习笔记之二----------MFC框架程序及消息映射