实习(第3天_mfc的消息和命令ppt培训课件

上传人:aa****6 文档编号:54578800 上传时间:2018-09-15 格式:PPT 页数:28 大小:173KB
返回 下载 相关 举报
实习(第3天_mfc的消息和命令ppt培训课件_第1页
第1页 / 共28页
实习(第3天_mfc的消息和命令ppt培训课件_第2页
第2页 / 共28页
实习(第3天_mfc的消息和命令ppt培训课件_第3页
第3页 / 共28页
实习(第3天_mfc的消息和命令ppt培训课件_第4页
第4页 / 共28页
实习(第3天_mfc的消息和命令ppt培训课件_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《实习(第3天_mfc的消息和命令ppt培训课件》由会员分享,可在线阅读,更多相关《实习(第3天_mfc的消息和命令ppt培训课件(28页珍藏版)》请在金锄头文库上搜索。

1、第3天 MFC的消息和命令,通过本章的学习,使读者掌握:Windows消息种类MFC的消息处理机制鼠标消息处理方法键盘消息处理方法自定义消息处理方法,教学目标,教学内容,3.1 Windows操作系统的消息 3.2 Windows程序框架 3.3 鼠标消息处理实例 3.4 键盘消息处理实例 3.5 定时器消息处理实例 3.6 自定义消息处理实例,3.1 Windows消息的发送和接受,返 回,一条Windows消息由消息号,字参数和长整型参数三部分组成。只有窗口才能接收Windows发送的各种消息。对于MFC来说,只有主框架类CMainFrame和视图类CView及其派生类才能接收消息。应用程

2、序也能够发送消息,作为用户,我们也可以以自己定义消息来发送和接收以便满足我们的需求,Windows提供两个发送消息的函数: PostMessage() SendMessage()其中函数PostMessage()在发送完消息之后就返回了,而不去理会该消息是否已被处理,而SendMessage()函数在发送完消息后,直到等到该消息被处理完毕后才返回。,MFC的消息处理机制,Windows操作系统是通过格式化的消息在应用程序中通信的,每个事件发生后,Windows就将它转化为一条消息,判断这条消息应该由哪个窗口来处理,然后将该消息发往该窗口,并交由该窗口的拥有程序去处理,而将一条消息翻译并交由相应

3、窗口去处理的过程就是消息映射。 VC+的消息映射包括如下两方面内容,以例程MyHello为例来说明。 在类的定义中(在MyHelloView.h中)加上一行宏调用:DECLARE_MESSAGE_MAP() 在类的实现文件(MyHelloView.cpp)中加上消息映射表:BEGIN_MESSAGE_MAP(CMyHelloView, CView)/AFX_MSG_MAP(CMyHelloView)/AFX_MSG_MAP/ Standard printing commandsON_COMMAND(ID_FILE_PRINT, CView:OnFilePrint)END_MESSAGE_MAP

4、(),返 回,windows的消息分类,Windows应用程序的消息来源有四种不同类型:1标准Windows消息: 由窗口和视图来处理,它通常包括WM前缀,例如WM_CREATE,WM_PAINT等,它们又可以分为鼠标、键盘和窗口消息三类,主要消息如教材表3-2所示; 2控件通告消息: 包括按下按钮或输入字符等事件消息。同标准Windows消息一样,控件通告消息由窗口和视图处理。例如,当用户对编辑控件中的文本作出修改后,编辑控件向其父窗口发送的WM_COMMAND消息中包含EN_CHANGE控件通告码。窗口的消息处理函数将对该通告消息作出合适的处理,例如接收输入到控件中的文本。3命令消息: 以

5、WM_COMMAND为消息名,在消息中包含有命令的标识符(ID),以区分具体的命令。命令消息的来源是以如下三种用户接口对象: 菜单:用户选择某菜单,要产生相应的命令消息; 工具栏:用户按下工具栏按钮产生相应的命令消息; 加速键:用户在键盘上按下了定义的加速键也产生相应的命令消息; 与其它消息不同,它可被更广泛的对象(如文档、文档模块、应用程序模块等)处理。4自定义消息: 在应用程序中主动发出,一般用于应用程序的某一部分内部处理。,返 回,3.2 Windows程序框架,每个应用程序都是基于事件和消息的,而且包含一个主事件标准Windows消息循环。Windows程序的执行顺序取决于事件发生顺序

6、,程序的执行顺序是由顺序产生的消息驱动的,但消息的产生往往并不要求有次序之分。程序员可针对消息类型编写程序以处理接收到的消息,或发出其它消息以驱动其它程序。消息驱动的Windows程序框架如下图所示。,返 回,3.3 鼠标消息处理实例,3.3.1 鼠标消息处理程序当用户按下鼠标左键并释放,Windows就会产生WM_LBUTTONDOWN和WM_LBUTTONUP两个消息。我们将对第一章MyHello程序添加响应鼠标输入功能。当鼠标按下左键或释放或移动鼠标时,程序主窗口将显示相应的动作和屏幕位置。,返 回,class CMyHelloView : public CView protected:

7、CString m_MousePoint;/ 存储鼠标的方式和位置 / Generated message map functions protected: ;在视图类的构造函数中初始化。 CMyHelloView:CMyHelloView() / TODO: add construction code herem_MousePoint=“; ,3.3.2 声明视图类的数据成员在视图类中添加一数据成员,记录用户操作鼠标的方式和位置。,void CMyHelloView:OnDraw(CDC* pDC) CMyHelloDoc* pDoc = GetDocument();ASSERT_VALID

8、(pDoc);/ TODO: add draw code for native data here/pDC-TextOut(100,80,“Hello, 我们开始VC+编程了!”);pDC-TextOut(100,100, m_MousePoint); ,3.3.3 修改屏幕重画函数OnDraw()将原显示字符串:“Hello, 我们开始VC+编程了!”语句注释 掉。添加显示存储鼠标动作和位置等信息的变量m_MousePoint语句。,(1) 从View菜单中选择ClassWizard菜单项。 (2) 在MFC ClassWizard对话框中,选择Message Maps(消息映射)标签。作如

9、下选择:Class Name: CMyHelloView;Objiect IDs: CMyHelloView;Messages: WM_LBUTTONDOWN;,3.3.4 添加鼠标消息WM_LBUTTONDOWN响应函数,用同样的方法,在CMyHelloView类中,添加了鼠标消息WM_LBUTTONUP、WM_MOUSEMOVE的响应函数,留作课堂练习。,(3) 单击“Add Function”按钮,就在CMyHelloView类添加了鼠标消息WM_LBUTTONDOWN的响应函数。,(1)在CMyHelloView类中添加了三个成员方法,即在MyHelloView.h中添加了三个响应函数

10、的原型说明 class CMyHelloView : public CView protected: / create from serialization onlyCMyHelloView();DECLARE_DYNCREATE(CMyHelloView) / Generated message map functions protected:/AFX_MSG(CMyHelloView)afx_msg void OnLButtonDown(UINT nFlags, CPoint point);afx_msg void OnLButtonUp(UINT nFlags, CPoint point

11、);afx_msg void OnMouseMove(UINT nFlags, CPoint point);/AFX_MSGDECLARE_MESSAGE_MAP() ;,小结:ClassWizard自动为应用程序做了以下三件事,BEGIN_MESSAGE_MAP(CMyHelloView, CView)/AFX_MSG_MAP(CMyHelloView)ON_WM_LBUTTONDOWN()ON_WM_LBUTTONUP()ON_WM_MOUSEMOVE()/AFX_MSG_MAP/ Standard printing commandsON_COMMAND(ID_FILE_PRINT, CV

12、iew:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView:OnFilePrintPreview) END_MESSAGE_MAP(),(2)在MyHelloView.cpp中添加了三个消息映射,void CMyHelloView:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultCVie

13、w:OnLButtonDown(nFlags, point); void CMyHelloView:OnLButtonUp(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultCView:OnLButtonUp(nFlags, point); void CMyHelloView:OnMouseMove(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call def

14、aultCView:OnMouseMove(nFlags, point); ,(3) 在MyHelloView.cpp中添加了三个响应函数的空函数体,void CMyHelloView:OnLButtonDown(UINT nFlags, CPoint point) m_MousePoint.Format(“鼠标左键在点(%d,%d)按下“, point.x,point.y);Invalidate();CView:OnLButtonDown(nFlags, point); void CMyHelloView:OnLButtonUp(UINT nFlags, CPoint point) m_Mo

15、usePoint = “鼠标左键被释放“ ;Invalidate();CView:OnLButtonUp(nFlags, point); void CMyHelloView:OnMouseMove(UINT nFlags, CPoint point) m_MousePoint.Format(“鼠标位于点(%d,%d)“, point.x,point.y);Invalidate();CView:OnMouseMove(nFlags, point); ,3.3.5 编写消息响应函数代码 在MyHelloView.cpp程序中,定位要编辑的函数,编写记录鼠标动作和位置信息。,3.3.7 技术要点在响

16、应鼠标消息函数中,语句:Invalidate(); 是使系统产生使用户区无效,从而调用重画函数OnDraw()。所以我们只要在其中编写显示m_MousePoint即可。,3.4 键盘消息处理实例,用户按下了一个键盘键,就将产生WM_KEYDOWN和WM_KEYUP两个消息,而且Windows将此键翻译成ASCII码后又将产生WM_CHAR消息,用户只要对这些消息中的一部分编写相应的响应函数即可。 3.4.1 键盘消息处理程序对MyHello程序再次进行改造,添加响应键盘的字符输入 。,返 回,3.4.2 声明视图类的数据成员为了记录用户输入回车次数和存储在当前行输入的字符,定义一个整型变量存储

17、回车次数,CString型变量存储当前行输入的字符。,class CMyHelloView : public CView . protected:CString m_MousePoint;int m_nLine;/ 存储回车次数CString m_strDisplay;/ 存储当前行输入的字符/ Generated message map functions protected: ; 在视图类的构造函数中初始化。 CMyHelloView:CMyHelloView() / TODO: add construction code here m_MousePoint=“; m_nLine = 0; ,

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

当前位置:首页 > 办公文档 > PPT模板库 > 教育/培训/课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号