- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2.3 消息处理函数 ——窗口过程WndProc() 2.3.1 消息处理函数的作用和形式 对消息的处理发生在窗口消息处理函数中。窗口消息处理函数确定了窗口怎样响应用户的输入以及在窗口的客户区中显示些什么。 在前面的例子中,窗口消息处理函数是命名为WndProc()的函数,但是可任意命名(只要求不和其它名字发生冲突)。 一个Windows程序可以注册多个窗口类,每个窗口类和一个窗口消息处理函数相关联,所以,一个Windows程序可以有多个窗口消息处理函数。 窗口消息处理程序总是定义为如下形式: 注意,窗口消息处理函数的四个参数与MSG结构体的前四个字段是相同的。第一个参数hwnd是接收消息的窗口的句柄,它与CreateWindow()函数的传回值相同。对于只建立一个窗口的程序,这个参数是程序所知道的唯一窗口句柄。如果程序是依据同一窗口类(同时也是同一窗口消息处理函数)建立多个窗口,则hwnd标识接收消息的特定窗口。 第二个参数与MSG结构体中的message字段相同,它是标识消息的数值。最后两个参数都是32位的消息参数,提供关于消息的更多信息。 2.3.2 消息处理函数中怎样处理消息 一般来说,Windows程序员使用switch和case结构来确定窗口消息处理函数接收的是什么消息,以及如何适当地处理它。窗口消息处理函数在处理消息后,必须传回0。窗口消息处理函数不予处理的所有消息必须被传给名为DefWindowProc()的Windows函数,不然一般动作,如终止程序,将不会正常执行。从DefWindowProc()传回的值必须由窗口消息处理函数传回。 每个消息均是用一个无符号整数来标识的,也就是传给窗口消息处理函数的message参数。为了方便记忆,Windows为每个消息的整数值定义了一个以“WM_” 为前缀开头的标识符。 例:前面的例子中,WndProc只选择处理三种消息:WM_CREATE、WM_PAINT和WM_DESTROY。窗口消息处理函数的结构如下: 2.3.3 详细研究三种消息及其处理 ① WM_CREATE 窗口消息处理函数接收的第一个消息是WM_CREATE。在WinMain ()中调用CreateWindow()时,Windows将做一些它必须做的工作,包括发出WM_CREATE消息。具体做法是,调用WndProc(),将第一个参数设定为窗口句柄,第二个参数设定为WM_CREATE,然后等待WndProc()返回。WndProc处理WM_CREATE消息,然后将控制传回给Windows。 Windows就可以从CreateWindow()调用中回到WinMain()中进行下一步的处理。 在我们的例子中,对这个消息的处理为播放一个名为HELLOWIN.WAV的声音文件。它简单地使用PlaySound()函数来做到这一点。然后,从窗口消息处理函数中传回0,结束了整个WM_CREATE的处理。 ② WM_PAINT 这个消息在Windows程序设计中非常重要。当窗口客户区的一部分显示内容或者全部变为“无效”时,系统将发出这条消息,通知程序重绘客户区。 客户区的显示内容什么时候会变得无效呢?第一,在最初建立窗口的时候,整个客户区都是无效的,因为程序还没有在窗口上画什么东西。第一条WM_PAINT消息(通常发生在WinMain()中调用UpdateWindow()时)指示窗口消息处理函数在客户区上画一些东西。 另外,当用户改变窗口的大小时、当用户将窗口 * * 第2章 Windows程序的基本框架 (教材P.136) 2.1 Windows程序的进入点 ——WinMain()函数 2.1.1 回顾DOS程序的框架 它包括一个include声明、程序的进入点、一个对执行期链接库函数的调用和一个return语句。 2.1.2 Windows程序的进入点 Windows关于“hello, world”程序的等价程序有和DOS版本完全相同的组件,也包括一个include声明、一个程序进入点、一个函数调用和一个return语句。 从结构上说,Windows程序与DOS程序是相同的。表头文件stdio.h已被windows.h所代替,进入点main被WinMain所代替,而且C语言执行时期链接库函数printf被Windo
文档评论(0)