- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VisualC高级编程第五讲
Visual C++高级编程 第五讲 管理程序中的消息 消息管理 前面我们已经简单地介绍了Windows中消息循环事件驱动的机制以及 MFC 的消息映射。在这一讲中,我们将深入探讨: 消息派发 消息传递 消息映射 MFC的层次关系 消息处理类 在程序中很多类都可以设计消息处理函数,但是并非所有的MFC类都可以处理消息的。 所有能接收消息的类,都应该派生自CCmdTarget类。 派生自CWnd的所有类,都可以拦下任何Windows消息,与窗口无关的MFC类(如CDocument和CWinApp)只能收到WM_COMMAND命令消息。 消息获取 消息在程序的窗口类注册中就定义好了处理该程序所有消息的窗口函数,因此程序一旦接收到消息首先就是发送给窗口处理函数。 那么首先获取消息的应该是一个共用的窗口处理函数——WndProc,它依据消息结构中消息的目的地(HWND hWnd)来决定发往何处。 窗口函数 要了解消息派发到何处,必须了解程序窗口注册时窗口类中指定的消息处理函数。MFC与SDK不同,窗口的注册在窗口诞生前一刻完成,也就是说“WinMain一开始调用InitApplication完成窗口类的注册”已成了过去。 深入探讨(1) 深入探讨(2) 深入探讨(3) Windows的消息传递 深入探讨(1) 深入探讨(2) 深入探讨(3) 深入探讨(4) 深入探讨(5) 键盘消息 任何游戏都必须设计出与用户交互的功能,消息管理模块的设计是整个游戏的核心模块。键盘消息是一种标准的Windows消息。 键盘是计算机中标准设备之一,虽然目前大多数游戏程序以鼠标或摇杆来作为主要输入设备,但是键盘操纵在游戏中仍然具有较重要的位置。 常用的键盘输入消息 添加响应函数 改写响应函数 鼠标消息 设置窗口外鼠标消息的捕获 可能发生的错误:程序窗口内按下鼠标左键后移动到窗口外释放鼠标,显然本来应该程序处理的鼠标释放消息无法获取。 解决这问题的可以通过SetCapture函数来实现。这函数使程序获取其窗口外的鼠标消息。 当然调用该函数的前提是程序需要接收后续的鼠标消息,通过ReleaseCapture函数可以释放窗口外鼠标消息的捕获。 改变鼠标指针 在游戏中,通过会根据程序的场景以及运行状况来设置各种不同的鼠标指针。 要设置各种不同的鼠标指针可以利用贴位图的方法来实现。具体的实现方法是: 设置鼠标移动消息响应函数捕获鼠标位置; 利用鼠标前两次移动中鼠标所在位置的不同贴不同的人物和鼠标指针图案 * * 几个重要的MFC类的层次关系 疑问1: Windows程序如何获取消息? 疑问2: 消息如何派发到特定的消息处理函数中 即如何传递消息? Create函数中并没有窗口类的注册,但是看到了CreateEx函数 这个窗口创建函数是CFramWnd类的成员函数 CFrame 没有 改写 CreateEx() 这个函数在游戏编程中具有重要的作用,以后我们在详细说明 还是没看到窗口的注册,但是出现了PreCreateWindow CFrame改写了 PreCreateWindow 终于看到了窗口函数,但是在MFC中并不是把消息派给它, 而是利用hook(钩子)技术改换成了AfxWndProc。 命令消息接收物的类型 处理次序 Frame 窗口 View Document 1、View 2、Frame窗口本身 3、CWinApp对象 1、View 本身 2、Document 1、Document 本身 2、Document Template 标准的Windows消息按照直线而上的规则来进行消息传递, 即子类获取到不属于或自己无法处理的消息向父类传递。 实现消息映射的三个宏 采用链表的结构来实现 填 充 填 充 构 造 一个链表节点 又到了CWnd::WindowProc 这个窗口句柄是谁的? 三种不同类型 消息的不同传 递途径 标准消息:由pBaseMap直线向上 第二、三类消息按照指定路径传递 Frame 窗口 1、View 2、Frame窗口本身 3、CWinApp对象 消息 说明 WM_KEYDOWN 按下键盘所发生的消息 WM_KEYUP 松开键盘所发生的消息 WM_CHAR 按下键盘所发生的消息,并转换为对应的字符 WM_KEYDOWN与WM_KEYUP并不分辨输入字符的大小写 WM_CHAR则会根据使用者按下按键的虚键转换成字符。常用虚键P139 响应函数: OnKeyDown(UINT nChar,
您可能关注的文档
最近下载
- 上半年基本公共卫生服务项目工作总结.docx VIP
- 北师版小学五年级上册数学 第七单元 可能性 第七单元复习.ppt VIP
- 子宫内膜异位症诊治指南(第三版).pptx VIP
- 软件工程——理论与实践(附微课视频 第3版)吕云翔课后习题答案解析.pdf
- 历史故事教学法在初中历史时空观念培养中的实践研究教学研究课题报告.docx
- 云南省港航投资建设有限责任公司笔试题目.pdf VIP
- 施耐德ATS22软启动器使用说明.docx VIP
- 造纸工艺流程 完整版课件PPT.pptx VIP
- 常州大地测绘中文电子经纬仪使用说明书2012220.doc VIP
- 人工智能在促进中小学教育改革与发展中的作用研究教学研究课题报告.docx
原创力文档


文档评论(0)