VC++中窗口过程函数及其消息发送、响应机制介绍
来源:互联网 发布:天刀丐帮捏脸数据男 编辑:程序博客网 时间:2024/05/29 11:52
在VC++中,窗口过程函数是应用程序定义的一个函数,主要功能是处理发送给窗口的消息。窗口过程函数的定义是:virtual LRESULT WindowProc( UINT message, WPARAM wParam,LPARAM lParam ); 其中,message指定消息类型,wParam和lParam指定其余的消息特定信息,内容与message参数值有关。
在应用程序中窗口过程函数及其消息发送、响应机制的使用,能够方便程序集中处理各类消息,使得整个程序的架构更加合理、清晰。
下面结合实例详细讲述窗口过程函数及其消息发送、响应机制的使用方法。(完整的实例可在我的CSDN资源中下载:http://download.csdn.net/detail/margin1988/4570359)
(1)自定义消息:
在Resource.h文件中自定义消息:
#define WM_MYMSG 2000
(2)添加窗口过程函数的声明和实现体:
1)在.h文件中添加窗口过程函数声明:
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
2)在.cpp文件中添加窗口过程函数实现体:
LRESULT CPoint18Dlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam){ switch (message){ case WM_MYMSG: MessageBox("WindowProc收到并处理了自定义的WM_MYMSG消息"); break; } return CDialog::WindowProc(message,wParam,lParam);}
(3)发送消息的方式比较:
this->SendMessage(WM_MYMSG,0,0);//this->PostMessage(WM_MYMSG,0,0);//this->SendNotifyMessage(WM_MYMSG,0,0);
注:这三个函数都可以将指定的消息发送到某个窗口,但是这三种消息的发送方式存在如下的区别:SendMessage立即调用窗口过程函数,而且直到窗口过程函数处理完消息后才返回。PostMessage则是将指定的消息寄送到窗口消息队列后立即返回。对于SendNotifyMessage来说,如果窗口是调用线程创建的,SendNotifyMessage为该窗口调用窗口过程函数,并且等待窗口过程函数处理完消息后才返回;如果窗口是由不同的线程创建的,SendNotifyMessage将指定的消息传给窗口过程函数后立即返回。
- VC++中窗口过程函数及其消息发送、响应机制介绍
- VC中查找窗口并向其发送消息
- VC中查找窗口并向其发送消息
- VC编程Windows消息处理机制、阻塞试验、SetTimer、MessageBox、小心消息响应处理函数
- VC编程Windows消息处理机制、阻塞试验、SetTimer、MessageBox、消息响应处理函数
- windows窗口关闭的消息响应机制
- [C++ VC MFC] MFC消息响应机制
- MFC中消息响应机制
- 在MFC中从一个线程工作函数中向窗口发送消息以及窗口到窗口消息传送方法
- vc++窗口的创建过程(MFC消息机制的经典文章)
- vc++窗口的创建过程(MFC消息机制的经典文章)
- vc++窗口的创建过程(MFC消息机制的经典文章)
- vc++窗口的创建过程(MFC消息机制的经典文章)
- VC 某窗口向其他窗口发送消息实现步骤
- VC 分割窗口发送消息给子窗口
- MFC应用程序消息处理及其窗口创建和销毁过程函数调用顺序
- MFC应用程序消息处理及其窗口创建和销毁过程函数调用顺序
- MFC应用程序消息处理及其窗口创建和销毁过程函数调用顺序
- SITTC教你云计算基础知识入门(十二)
- SITTC教你云计算基础知识入门(十三)
- NSIS 封装打包程序 学习笔记 (三)
- 类和类之间的依赖、关联、聚合、组合关系
- EMMC的发展
- VC++中窗口过程函数及其消息发送、响应机制介绍
- 存储-企业级 Hyper-v 群集部署实验方案
- java关于集合(list,set,map)的遍历与增强for循环的使用
- Failed to load Main-Class manifest attribute from
- linux 开机运行的脚本
- 编译android kernel
- oracle的逻辑结构包括表空间、段、区和数据块
- svn:ignore
- OCP-1Z0-051-V9.02-50题