- 浏览: 11659 次
最新评论
消息处理函数
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年下考酡语一轮温习必建一Unit 2 English
2012-01-20 12:02 573[热门][转载]2012年下考酡语一轮温习必建一Unit 2 ... -
螺丝规格定义与认识
2012-01-20 12:02 538螺丝规格定义与认识 2010年01月28日 论坛首页 & ... -
安徽省皖中省级示范三校08-09学年高二下学期期中考试
2012-01-20 12:02 682安徽省皖中省级示范三 ... -
调用API函数
2012-01-19 16:53 554调用API函数 2010年11月26 ... -
从VC6到VC9移植代码问题总结收藏
2012-01-19 16:52 406从VC6到VC9移植代码问题 ... -
窗口和消息
2012-01-19 16:52 419窗口和消息 2011年06月27 ... -
vs2008使用点滴
2012-01-19 16:52 1033vs2008使用点滴 2011年02 ... -
Linux cp命令详解
2012-01-17 06:35 553Linux cp命令详解 2012年01月06日 源:h ... -
最新高配电脑
2012-01-17 06:35 431最新高配电脑 2012年01月09日 电脑型号 技嘉 ... -
协议适配器错误的解决方法
2012-01-17 06:35 558协议适配器错误的解决方法 2011年12月16日 Cas ... -
my.ini(my.cnf)与mysql优化指南
2012-01-17 06:35 861my.ini(my.cnf)与mysql优化指南 2011年 ... -
VB的webbrowser点击网页上的按钮链接问题
2012-01-16 05:16 1288VB的webbrowser点击网页上的按钮链接问题 2010 ... -
关于升级了IE后 VB6.0中添加webBrowser控件的问题
2012-01-16 05:16 857关于升级了IE后 VB6.0中添加webBrowser控件的问 ... -
VB自动登陆网络站点详解(二):Inet控件与WebBrowser控件配合使用
2012-01-16 05:16 767VB自动登陆网络站点详解(二):Inet控件与WebBrows ... -
如何用vb获取指定网页的验证码啊?(可以用webbrowser)
2012-01-16 05:16 574如何用vb获取指定网页的验证码啊?(可以用webbrowser ... -
VB代码VB小程序: 捕获 WebBrowser控件的鼠标和键盘事件
2012-01-16 05:16 1101VB代码VB小程序: 捕获 Web ...
相关推荐
按键消息处理函数,按键消息处理函数,按键消息处理函数按键消息处理函数
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,非模态,对话框,指针