消息处理函数
- 博客分类:
- 技术杂绘
消息处理函数
2010年07月10日
消息处理函数
消息处理函数又叫窗口过程,在这个函数中,不同的消息将用switch语句分配到不同的处理程序中去。Windows的消息处理函数都有一个确定的样式,即这种函数的参数个数和类型以及其返回值的类型都有明确的规定。在VC的说明书中,消息处理函数的原型是这样定义的:
LRESULT CALLBACK WindowProc(
HWND hwnd, //接收消息窗口的句柄
UINT uMsg, //主消息值
WPARAM wParam, //副消息值
LPARAM lParam //副消息值
);
如果你的程序中还有其它的消息处理函数,也都必须按照上面的这个样式来定义,但函数名称可以随便取。EasyWin中的WinProc()函数就是这样一个典型的消息处理函数。
消息处理函数的四个参数是由GetMessage()函数从消息队列中获得MSG结构,然后分解后得到的。第二个参数uMsg和MSG结构中的message值是一致的,代表了主消息值。程序中用switch语句来将不同类型的消息分配到不同的处理程序中去。
WinProc()函数明确的处理了4个消息,分别是WM_KEYDOWN(击键消息)、WM_RBUTTONDOWN(鼠标右键按下消息)、WM_PAINT(窗口重画消息)、WM_DESTROY(销毁窗口消息)。
值得注意的是,应用程序发送到窗口的消息远远不止以上这几条,象WM_SIZE、WM_MINIMIZE、WM_CREATE、WM_MOVE等这样频频使用的消息就有几十条。为了减轻编程的负担,Windows的API提供了DefWindowProc()函数来处理这些最常用的消息,调用了这个函数后,这些消息将按照系统默认的方式得到处理。
因此,在switch_case语句中,只须明确的处理那些有必要进行特别响应的消息,把其余的消息交给DefWindowProc()函数来处理,是一种明智的选择,也是你必须做的一件事。
结束消息循环
当用户按Alt+F4或单击窗口右上角的退出按钮,系统就向应用程序发送一条WM_DESTROY的消息。在处理此消息时,调用了PostQuitMessage()函数,该函数会给窗口的消息队列中发送一条WM_QUIT的消息。在消息循环中,GetMessage()函数一旦检索到这条消息,就会返回FALSE,从而结束消息循环,随后,程序也结束。
小结
本章介绍的是Win32编程的基础知识,在进行DirectX编程之前,掌握它们是十分必要的。
通过本文的学习,你应该学到以下知识:
如何创建一个Win32应用程序工程
用RegisterClass()函数注册一个窗口类,再立即调用CreateWindow()函数创建一个窗口的实例
设置窗口的类型以及将一个消息处理函数与窗口联系上
用一固定的模式开启消息循环
了解消息处理函数的定义规则,如何自己定义一个窗口消息处理函数
在消息处理函数中,最后必须调用DefWindowProc()函数以处理那些缺省的消息
调用PostQuitMessage()函数以结束消息循环
发表评论
-
跨平台自动化测试部署
2012-01-20 09:42 440跨平台自动化测试部署 ... -
接下来做什么
2012-01-20 09:42 733接下来做什么 2010年10 ... -
如何开展灰盒测试[4]:接口测试实战――测试跨主机的模块接口
2012-01-20 09:42 902如何开展灰盒测试[4]:接口测试实战――测试跨主机的模块接口 ... -
跨平台编程和QT
2012-01-20 09:42 906跨平台编程和QT 2011年03 ... -
人民日报:中国企业未参与菲律宾石油开采竞标
2012-01-19 14:46 667人民日报:中国企业未参 ... -
人民日报:中国企业没有参与菲律宾南海石油开采竞标
2012-01-19 14:46 628人民日报:中国企业没有 ... -
第二届《全国京剧票友万里行艺术团》欧洲行开始报名
2012-01-19 14:46 844第二届《全国京剧票友 ... -
出口埃及记
2012-01-19 14:46 618出口埃及记 2010年11月28 ... -
调用API函数
2012-01-17 04:31 948调用API函数 2010年11月26 ... -
从VC6到VC9移植代码问题总结收藏
2012-01-17 04:30 604从VC6到VC9移植代码问题 ... -
窗口和消息
2012-01-17 04:30 558窗口和消息 2011年06月27 ... -
vs2008使用点滴
2012-01-17 04:30 1906vs2008使用点滴 2011年02 ... -
2009亚太最具社会责任感华商领袖颁奖盛典8月2日隆重举行
2012-01-16 03:21 5952009亚太最具社会责任感华商领袖颁奖盛典8月2日隆重举行 ... -
林 伦 伦:关于海外潮学研究的几点看法和建议
2012-01-16 03:21 1268林 伦 伦:关于海外潮学研究的几点看法和建议 2011年03 ... -
011-5-20越南平阳沉船惨案陈述
2012-01-16 03:21 632011-5-20越南平阳沉船惨案陈述 2011年05月30日 ...
相关推荐
按键消息处理函数,按键消息处理函数,按键消息处理函数按键消息处理函数
mfc动态替换消息处理函数源码 MFC中动态替换消息响应函数 编译可运行,含exe
17.如何在应用程序中添加命令范围消息处理函数?(Visual C++编程 源代码)17.如何在应用程序中添加命令范围消息处理函数?(Visual C++编程 源代码)17.如何在应用程序中添加命令范围消息处理函数?(Visual C++...
MFC的消息处理函数 解释了各个MFC消息的应用 解释详尽
VC MFC 多窗口消息共享同一个消息处理函数。
当用户同时按住ctrl键和f8键盘时,激发某一操作,即弹出对话框
VC++消息映射与处理\使用命令范围消息处理函数
Windows 应用程序是靠消息驱动的,在VC中我们通过 Classwizard 可以为某窗口类添加消息处理函数,Classwizard将为你添加消息映射,对于 Windows 消息,生成的消息处理函数重载了基类的虚拟方法。而在C#中如何处理消息...
LINUX操作系统消息函数分析LINUX操作系统消息函数分析
VC++ 、MFC初学者
PPT中讲解了很有用的消息循环机制,我觉得对大家来说是很有帮助的。 MFC 消息采用了消息泵的机制,有效的理解消息原理!
摘要:VC/C++源码,其它分类,消息处理,应用程序 在应用程序中添加命令范围消息处理函数,咋看着跟菜单似的,消息处理函数相关VC++源码,运行于VS2010及以上版本IDE环境。
的消息处理函数OnTimer,并添加代码如下: void CMainFrame::OnTimer(UINT nIDEvent) {// TODO: Add your message handler code here and/or call default CTime time; time=CTime::GetCurrentTime();/...
事件驱动和消息响应机制 ..................................................................................................................... 17 建立一个应用程序 ..........................................
9.2.3 消息和消息处理函数 247 9.2.4 控件 247 9.2.5 资源 248 9.2.6 对话框 248 9.3 图形用户界面:窗口 248 9.3.1 注册窗口类 249 9.3.2 创建窗口 251 9.3.3 窗口消息处理函数 253 9.3.4 窗口...
9.2.3 消息和消息处理函数 247 9.2.4 控件 247 9.2.5 资源 248 9.2.6 对话框 248 9.3 图形用户界面:窗口 248 9.3.1 注册窗口类 249 9.3.2 创建窗口 251 9.3.3 窗口消息处理函数 253 9.3.4 窗口...
华中科技大学数字图像处理课程课件。内含源代码,你学习的同时可以参考源代码,这样易于掌握VC知识。
如果跨进程,这就麻烦了,由于我们的函数在我们的进程中(废话),而目标进程的窗口的消息处理函数在目标进程(还是废话),所以只能想办法把我们的代码放到对方进程中去执行——并且要告知我们的进程得到了什么消息...
代码示范或实现下列功能:1、实现非模态对话框2、为何在自定义消息处理函数中无法利用wParam或lParam传递指针 关键字:modeless,dialog,wParam,lParam,pointer,非模态,对话框,指针