Visual C++高级编程 第五讲.ppt

上传人:qwe****56 文档编号:70011820 上传时间:2023-01-14 格式:PPT 页数:22 大小:457.50KB
返回 下载 相关 举报
Visual C++高级编程 第五讲.ppt_第1页
第1页 / 共22页
Visual C++高级编程 第五讲.ppt_第2页
第2页 / 共22页
点击查看更多>>
资源描述

《Visual C++高级编程 第五讲.ppt》由会员分享,可在线阅读,更多相关《Visual C++高级编程 第五讲.ppt(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、Visual C+Visual C+高级编程高级编程第五讲管理程序中的消息消息管理前面我们已经简单地介绍了Windows中消息循环事件驱动的机制以及 MFC 的消息映射。在这一讲中,我们将深入探讨:消息派发消息传递消息映射MFC的层次关系几个重要的几个重要的MFC类的层次关系类的层次关系消息处理类在程序中很多类都可以设计消息处理函数,但是并非所有的MFC类都可以处理消息的。所有能接收消息的类,都应该派生自CCmdTarget类。派生自CWnd的所有类,都可以拦下任何Windows消息,与窗口无关的MFC类(如CDocument和CWinApp)只能收到WM_COMMAND命令消息。疑问疑问1:

2、Windows程序如何获取消息?程序如何获取消息?消息获取消息在程序的窗口类注册中就定义好了处理该程序所有消息的窗口函数,因此程序一旦接收到消息首先就是发送给窗口处理函数。那么首先获取消息的应该是一个共用的窗口处理函数WndProc,它依据消息结构中消息的目的地(HWND hWnd)来决定发往何处。疑问疑问2:消息如何派发到特定的消息处理函数中消息如何派发到特定的消息处理函数中即如何传递消息?即如何传递消息?窗口函数要了解消息派发到何处,必须了解程序窗口注册时窗口类中指定的消息处理函数。MFC与SDK不同,窗口的注册在窗口诞生前一刻完成,也就是说“WinMain一开始调用InitApplica

3、tion完成窗口类的注册”已成了过去。深入探讨(1)Create函数中并没有窗口类的注册,但是看到了函数中并没有窗口类的注册,但是看到了CreateEx函数函数这个窗口创建函这个窗口创建函数是数是CFramWnd类的成员函数类的成员函数深入探讨(2)CFrame没有没有改写改写CreateEx()这个函数在游戏这个函数在游戏编程中具有重要编程中具有重要的作用,以后我的作用,以后我们在详细说明们在详细说明还是没看到窗口的注册,但是出现了还是没看到窗口的注册,但是出现了PreCreateWindow深入探讨(3)CFrame改写了改写了PreCreateWindow终于看到了窗口函数,但是在终于看

4、到了窗口函数,但是在MFC中并不是把消息派给它,中并不是把消息派给它,而是利用而是利用hook(钩子)技术改换成了(钩子)技术改换成了AfxWndProc。Windows的消息传递命令消息接收物的类型命令消息接收物的类型 处理次序处理次序 Frame 窗口窗口ViewDocument1、View2、Frame窗口本身窗口本身3、CWinApp对象对象1、View 本身本身2、Document1、Document 本身本身2、Document Template标准的标准的Windows消息按照直线而上的规则来进行消息传递,消息按照直线而上的规则来进行消息传递,即子类获取到不属于或自己无法处理的消

5、息向父类传递。即子类获取到不属于或自己无法处理的消息向父类传递。深入探讨(1)实现消息映实现消息映射的三个宏射的三个宏采用链表的结构来实现填填充充填填充充构构造造一个链表节点深入探讨(2)又到了又到了CWnd:WindowProc这个窗口这个窗口句柄是谁句柄是谁的?的?深入探讨(3)三种不同类型三种不同类型消息的不同传消息的不同传递途径递途径深入探讨(4)标准消息:由标准消息:由pBaseMap直线向上直线向上深入探讨(5)第二、三类消息按照指定路径传递第二、三类消息按照指定路径传递Frame 窗口窗口1、View2、Frame窗口本身窗口本身3、CWinApp对象对象键盘消息任何游戏都必须设

6、计出与用户交互的功能,消息管理模块的设计是整个游戏的核心模块。键盘消息是一种标准的Windows消息。键盘是计算机中标准设备之一,虽然目前大多数游戏程序以鼠标或摇杆来作为主要输入设备,但是键盘操纵在游戏中仍然具有较重要的位置。常用的键盘输入消息消息消息 说明说明 WM_KEYDOWN 按下键盘所发生的消息按下键盘所发生的消息 WM_KEYUP 松开键盘所发生的消息松开键盘所发生的消息WM_CHAR 按下键盘所发生的消息,并转换为对应的字符按下键盘所发生的消息,并转换为对应的字符WM_KEYDOWN与与WM_KEYUP并不分辨输入字符的大小写并不分辨输入字符的大小写WM_CHAR则会根据使用者按

7、下按键的虚键转换成字符。常用虚键则会根据使用者按下按键的虚键转换成字符。常用虚键P139响应函数:响应函数:OnKeyDown(UINT nChar,UINT nRepCnt,UINT nFlags)OnKeyUp(UINT nChar,UINT nRepCnt,UINT nFlags)OnChar(UINT nChar,UINT nRepCnt,UINT nFlags)添加响应函数响应消息的响应消息的类名称类名称消息消息类型类型消息函消息函数名称数名称改写响应函数消息映消息映射项射项改写消息改写消息响应函数响应函数键盘控制人物移动键盘控制人物移动鼠标消息消息消息 说明说明 WM_LBUTTO

8、NDBLCLK 双击鼠标左键消息双击鼠标左键消息 WM_LBUTTONDOWN 按下鼠标左键消息按下鼠标左键消息WM_LBUTTONUP 松开鼠标左键消息松开鼠标左键消息WM_RBUTTONDBLCLK 双击鼠标右键消息双击鼠标右键消息 WM_RBUTTONDOWN 按下鼠标右键消息按下鼠标右键消息WM_RBUTTONUP 松开鼠标右键消息松开鼠标右键消息WM_MOUSEMOVE 鼠标移动消息鼠标移动消息 WM_MOUSEWHEEL 鼠标滚轮转动消息鼠标滚轮转动消息nFlag参数值参数值 说明说明 MK_CONTROL 按下按下Ctrl键键 MK_LBUTTON 按下鼠标左键按下鼠标左键MK_

9、MBUTTON 按下鼠标中键按下鼠标中键MK_RBUTTON 按下鼠标右键按下鼠标右键 MK_SHIFT 按下按下Shift键键设置窗口外鼠标消息的捕获可能发生的错误:程序窗口内按下鼠标左键后移动到窗口外释放鼠标,显然本来应该程序处理的鼠标释放消息无法获取。解决这问题的可以通过SetCapture函数来实现。这函数使程序获取其窗口外的鼠标消息。当然调用该函数的前提是程序需要接收后续的鼠标消息,通过ReleaseCapture函数可以释放窗口外鼠标消息的捕获。鼠标控制鼠标控制改变鼠标指针在游戏中,通过会根据程序的场景以及运行状况来设置各种不同的鼠标指针。要设置各种不同的鼠标指针可以利用贴位图的方法来实现。具体的实现方法是:设置鼠标移动消息响应函数捕获鼠标位置;利用鼠标前两次移动中鼠标所在位置的不同贴不同的人物和鼠标指针图案改变鼠标指针改变鼠标指针

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁