- 1、本文档共71页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章 MFC消息和命令
第3章 MFC的消息和命令;3.1 Windows操作系统的消息;3.1.1 Windows消息的发送和接收;用户可以发送和接收消息,Windows提供两个发送消息的函数:
PostMessage(),不理会消息是否已被处理
SendMessage(),等待消息处理完毕才返回;3.1.2 MFC的消息处理机制;消息映射包括两方面的内容:;// MyHelloView.h : interface of the CMyHelloView class
class CMyHelloView : public CView
{
// Attributes
public:
CMyHelloDoc* GetDocument();
// Operations
protected:
//{{AFX_MSG(CMyHelloView)
// NOTE - the ClassWizard will add and remove member functions here.
// DO NOT EDIT what you see in these blocks of generated code !
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};;2)在类的实现文件(MyHelloView.cpp)中加上消息映射表;表3.1 几种常见的消息映射宏;应用程序;消息响应函数包括:;3.1.3 Windows的消息分类;消息类型;控件通告消息
包括按下按钮或输入字符等事件的消息
由窗口和视图来处理
例如,当用户对编辑控件中的文本作出修改后,编辑控件向其父窗口发送的WM_COMMAND消息中包含EN_CHANGE控件通告码。;命令消息
也以WM_COMMAND为消息名
包含命令的标示符(ID),以区分具体的命令
来源是以下3种用户接口对象:
菜单:选择某菜单
工具栏:按下工具栏按钮
加速键:在键盘上按下了定义的加速键
可以被更广泛的对象(如文档、文档模板、应用程序模板等)处理;自定义消息
用户可以自定义消息,在应用程序中主动发出
一般用于应用程序的某一部分内部处理;命令消息的传递路径;例:一个MDI应用程序,“编辑”菜单下的“复制”菜单项,当用户选择时,对应的命令消息按如下所述到达其处理函数:;5) 文档有哪些信誉好的足球投注网站自己的消息映射,发现有该命令消息的处理函数,则该处理函数就被应用框架调用,完成复制功能,而命令传递终止,不再继续;
6) 如果文档也没有处理函数,则命令又被传递给文档模板,若还没有,则命令又回到子边框窗口,子边框窗口现在才有哪些信誉好的足球投注网站自己的消息映射。如果同样没有处理函数,命令就被传回给主边框窗口;最终是传递到应用对象,由它来收拾未被处理的命令消息。;3.2 Windows程序框架;GetMesssage( );3.3 鼠标消息处理实例;3.3.1 鼠标消息处理程序;3.3.2 声明视图类的数据成员;3.3.3 修改屏幕重画函数OnDraw( );3.3.4 添加鼠标消息WM_LBUTTONDOWN响应函数;2)选择需要的信息;3)单击AddFunction;4)同样添加WM_LBUTTONUP和WM_MOUSEMOVE;在上述操作中,ClassWizard(类向导)自动为应用程序作了以下三件事:;2)添加了3个消息映射:;3)添加了3个响应函数的空函数体:;3.3.5 编写信息响应函数代码;3.3.6 查看结果;3.3.7 技术要点;3.4 键盘消息处理实例;3.4.1 键盘消息处理程序;3.4.2 声明视图类的数据成员;3.4.3 添加键盘消息响应函数;2)选择需要的信息;3)单击AddFunction;在上述操作中,ClassWizard(类向导)自动为应用程序作了以下三件事:;2)添加了1个消息映射:;3)添加了1个响应函数的空函数体:;3.4.4 编辑消息响应函数;3.4.5 查看结果;3.5 定时器消息处理实例;3.5.1 定时器程序;3.5.2 安装定时器;void CMyHelloView::OnInitialUpdate()
{
CView::OnInitialUpdate();
// TODO: Add your specialized code here and/or call the base class
SetTimer(1,500,NULL); //安装定时器
};3.5.3 清除定时器;void CMyHelloView::OnDestroy()
{
CView::OnDestroy();
// TODO: Add your message handler code here
KillTimer(1); //清除定时器
};3.5.4 添加定时器消息WM_TIMER响应
文档评论(0)