第三章 窗口及消息.ppt

  1. 1、本文档共51页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3.1.9 消息循环 MSG结构定义 typedef struct tagMSG { HWND hwnd ; UINT message ; WPARAM wParam ; LPARAM lParam ; DWORD time ; POINT pt ; } MSG, * PMSG ; POINT是一个结构,定义如下: typedef struct tagPOINT { LONG x ; LONG y ; } POINT, * PPOINT; 3.1.9 消息循环 TranslateMessage (msg) ; 将msg结构传给Windows,进行一些键盘转换。 DispatchMessage (msg) ; 将msg结构回传给Windows。Windows将该消息发送给适当的窗口函数,让它进行处理。 这也就是说,Windows将呼叫窗口函数。(为什么?) 3.1.9 消息循环 消息循环 while (GetMessage (msg, NULL, 0, 0)) { TranslateMessage (msg) ; //将msg结构传给Windows,进行一些键盘转换。 DispatchMessage (msg) ; //将msg结构回传给Windows。Windows将该消息发送给适当的窗口函数,让它进行处理。 } 3.1.10 窗口消息处理程序 窗口函数可任意命名。 一个Windows程序可以包含多个窗口函数。 一个窗口函数与RegisterClass注册的特定窗口类别相关联。 CreateWindow函数根据窗口类别建立窗口。 依据一个窗口类别,可以建立多个窗口。 3.1.10 窗口消息处理程序 窗口函数定义形式: LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 窗口函数参数与MSG结构的前四个字段是相同的。第一个接收消息的窗口句柄。 第二个参数标识消息。 最后两个参数是32位消息参数,提供消息的更多信息。 窗口函数由Windows呼叫。 程序通过呼叫SendMessage函数呼叫窗口函数。 3.1.11 处理消息 窗口消息用一个数值(message)来标识参数。头文件WINUSER.H为每个消息定义以WM(窗口消息)为前缀开头的标识符。 窗口函数使用switch和case结构来确定接收的消息及如何处理它。处理完消息后,必须传回0。 窗口函数不处理的消息应该被传给DefWindowProc的Windows函数。 从DefWindowProc传回的值由窗口函数传回。 3.1.11 处理消息 HELLOWIN中,窗口函数的结构如下: switch (iMsg) { caseWM_CREATE : 处理WM_CREATE消息 return 0 ; caseWM_PAINT : 处理WM_PAINT消息 return 0 ; caseWM_DESTROY : 处理WM_DESTROY消息 return 0 ; } return DefWindowProc (hwnd, iMsg, wParam, lParam) ; 3.1.11 播放声音文件 窗口函数接收的第一个消息是WM_CREATE。当Windows处理CreateWindow函数时,WndProc接收这个消息。 HELLOWIN对这个消息的处理中播放一个名为HELLOWIN.WAV的声音文件(playSound)。 WndProc通过从窗口函数中传回0,结束了整个WM_CREATE的处理。 3.1.12 WM_PAINT消息 WndProc处理的第二个消息为WM_PAINT。这个消息在Windows程序设计中是很重要的。当窗口显示区域的一部分显示内容或者全部变为「无效」,以致于必须「更新画面」时,将由这个消息通知程序。 显示区域的显示内容怎么会变得无效呢?在最初建立窗口的时候,整个显示区域都是无效的,因为程序还没有在窗口上画什么东西。第一条WM_PAINT消息(通常发生在WinMain中呼叫UpdateWindow时)指示窗口函数在显示区域上画一些东西。 3.1.12 WM_DESTROY消息 WM_DESTROY消息是另一个重要消息。这一个消息指示,Windows正在关闭窗口。 PostQuitMessage (0) 在程序的消息队列中插入一个WM_QUIT消息。导致WinMain退出消息循环,并终止程序。 3. 2 Windows 程序设计的难点 Windows程序所作的一切都是响应发送给窗口函数的消息。这是概念上的主要难点之一。 3.2.1 别呼叫我,我会呼叫

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档