《面向对象的程序设计语言——C》课件--第6章
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Windows应用程序中的菜单是按照一定层次来进行组 织的,包括菜单项和弹出菜单,其中弹出菜单又可以包 括菜单项和其他的弹出菜单。
1.创建菜单资源
菜单中的每一个菜单项都由菜单项名和命令ID号两个 基本要素组成。在菜单资源中,每个菜单项都必须有一 个唯一的命令ID号来对它进行标识,这个ID号是系统在 对菜单项进行识别时使用的。对于用户而言,菜单项的 标识是利用它所属的弹出菜单和菜单项的句子来标识的, 比如ID_,其所属的弹出菜单是【文件】,菜单项名称为 【打开】。
返回
3
在【Caption】栏中输入“显示(&P)”,括号中的&P表示 紧跟在它后面的字母“P”是助记符,这样,在程序运行 过 程 中 , 就 可 以 用 Alt+P 键 来 激 活 【 显 示 】 菜 单 。 按 【Enter】键继续。
这时,在主菜单中将增加一个“显示”菜单,在助记符P下 面有下划线。同时,在生成的菜单的右面和下面各出现 一个新的菜单或菜单项,可以继续添加新的菜单或菜单 项。
返回
2
创建菜单可以有几种方法,最简单的方法是用菜单资 源编辑器进行设计。在这里,我们把第五章关于模式对 话框的例子进行改造,使对话框的弹出方式由在窗口中 双击鼠标改为由单击某个菜单命令实现。具体步骤如下: 步骤一:在Visual C++ 6.0中,选【File】菜单中的【Open Workspace】菜单项,打开已创建的“Dialog.dsw”文件。
protected:
//{{AFX_MSG(CDialogView)
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point); afx_msg void OnDisplayData(); //ClassWizard自动添加的
//}}AFX_MSG
返回
7
在属性对话框(Accel Properties)中,各项的含义如 表6.2所示。
表6.2 Accel Properties对话框中各选项的含义
选项 ID
Modifiers
Type
Key
Next Key Typed
含义
为了能使设定的快捷键与某个菜单项的功 能相对应,从中选择所需的菜单资源ID号
返回
6
2. 建立快捷键
在Windows应用程序中的某些菜单项后面有一个组合键, 表示一个快捷键(shortcut key),在程序运行过程中, 如果用户按下了该组合键,则相应的菜单命令就会被执 行。当然,若要使用快捷键选择某个菜单项,就必须事 先对其作出定义。现在我们来为刚才创建的菜单添加快 捷键,具体步骤如下:
在菜单资源中,我们定义了MFC如何来构造菜单的结 构 , 同 时 还 指 定 了 菜 单 的 资 源 ID 号 , MFC 通 过 ClassWizard会自动把菜单和相应的框架窗口联系在一起。 但除了由系统产生的少量代码外,MFC不能自动地对程 序的菜单项进行响应,必须用手工实现。
返回
10
对 于 每 个 菜 单 项 , 系 统 提 供 了 COMMAND 和 UPDATE_COMMAND_UI两种消息可供选择:
步骤五:在【显示】菜单中增加一个【个人资料】菜单 项。用鼠标右键单击【显示】菜单中的空菜单项,在弹 出菜单中选择【Properties】选项。单击属性对话框左上 角的“图钉”按钮,把对话框“钉”在屏幕上。在属性对话框 的【Caption】栏中输入“个人资料(&D)” 。
返回
4
对于【个人资料】菜单项,Visual C++ 6.0将为该菜单项 自动分配一个ID号。单击其他菜单项或者屏幕的其他部 分,再选中【个人资料】菜单项,系统在【ID】栏中显 示 出 为 该 菜 单 项 分 配 的 ID 号 , 其 一 般 格 式 为 MENUITEMxxxxx(xxxxx 代 表 一 个 整 数 ) 。 【Prompt】 框 中的文本是光标处于菜单项时,状态栏显示的帮助信息
选中时,表示该菜单项呈灰色显示,该菜单项被禁用 选中时,表示该菜单项没有被激活,用户不能选用
选中时,表示该菜单项在程序运行时被放于顶层菜单 的最右端
Break Prompt
其默认值为None,表示菜单项按常规形式显示。该项 的取值还可为Column或Bar,
指明当光标移到该菜单项时在状态栏上显示的提示
(1)COMMAND消息需要用户的干预,如单击、双击等 操作;
(2)UPDATE_COMMAND_UI消息系统会自动进行响应, 通过它可以实现对菜单项外观的动态管理。例如,设计 人员可以使菜单有效、无效或给菜单项动态添加检查标 记等。
可以利用ClassWizard同时设置这两种消息,但是在实 际编程中,必须为每个菜单项提供有关WM_COMMAND 类型消息映射接口。
DECLARE_MESSAGE_MAP()
};
返回
13
其中:
//{{AFX_MSG(CDialogView) ……
//}}AFX_MSG 是ClassWizard分别用来识别命令消息处理函数定义的起
始标记和结束标记,在AFX_MSG(CDialogView)后面括号 内的CDialogView表示是处理该消息的类。 2. 在CDialogView类的实现文件DialogView.cpp中的消息 映射部分也进行了一些修改:
学习和掌握CMenu类、CStatusBar类、CToolBar类、 CCmdUI类及常用成员函数的功能和使用。
菜单、工具栏和状态栏是Windows应用程序中最重要 的三个用户界面元素,是应用程序设计中不可缺少的步 骤。
返回
1
6.1 创建菜单
菜单是一系列命令的列表,是最常用的命令输入方式。 在Windows中,几乎所有的命令操作都与菜单有关。
下面,我们在视图类中对前面已建立的“个人资料 (&D)”菜单项的消息做出响应。具体步骤如下:
返回
11
步骤一:选择【View】菜单中的【ClassWizard】菜单项, 弹出【MFC ClassWizard】对话框。
步 骤 二 : 在 【MFC ClassWizard】 对 话 框 中 , 选 择 【Message Maps】选项卡。在【Class name】下拉列表框 中,选择类CDialogView;在 【Object Ids】中单击选择 ID_DISPLAY_DATA 选项;在 【Messages】 栏中将出现 COMMAND和 UPDATE_COMMAND_UI两个选项,选中 其中的 COMMAND。
步骤四:在【Key】列表框中输入“D”,确认【Modifiers】 栏中的【Ctrl】复选框被选中,而且【Alt】和【Shift】都 未被选中;或者,直接单击【Next Key Typed】按钮,按 下 Ctrl+D 组 合 键放开 , 此时系 统 会自动 记 录所按 下 的 Ctrl+D键为所要设定的组合键。按【Enter】键继续。
//}}AFX_MSG_MAP 是ClassWizard标识命令消息处理映射机制的来自始标记和结 束标记。返回
15
3. 在DialogView.cpp文件中编写OnDisplayData函数的代码。 把 DialogView.cpp 文 件 中 响 应 双 击 窗 口 的 函 数
OnLButtonDBLCLK() 的 代 码 复 制 到 OnDisplayData() 函 数 中,具体代码如下:
BEGIN_MESSAGE_MAP(CDialogView, CView)
//{{AFX_MSG_MAP(CDialogView)
返回
14
ON_WM_LBUTTONDBLCLK() ON_COMMAND(ID_DISPLAY_DATA, OnDisplayData) //ClassWizard自动添加的 //}}AFX_MSG_MAP END_MESSAGE_MAP() 其中: //{{AFX_MSG_MAP(CDialogView) ……
步骤五:为了在【显示】菜单中提示【个人资料】菜单 项的快捷键,可以返回6.1.1节中的步骤五,将【Caption】 框中的内容修改为“个人资料(D)\tCtrl+D”。
这样,我们就建立了一个完整的菜单资源。
返回
9
3 菜单功能的实现
在MFC框架中,菜单命令消息是按照一定的顺序进行 传递的。对于一个单文档应用程序,消息传递的顺序为: 视图类→文档类→框架类→应用程序类。因此,如果我 们在视图类和文档类中同时定义了某个菜单项的消息映 射接口时,由于消息首先传递给视图类,在视图类中对 此消息做出了响应,所以,文档类中定义的此菜单项的 消息映射函数就无法执行。
第六章 菜单、工具栏和状态栏
本章导读
掌握菜单的创建步骤和方法,如何进行命令消息的映 射和编写相应的程序代码。
掌握CMenu类及其常用成员函数的功能和使用方法, 掌握利用这些成员函数创建快捷菜单和实现动态增加或 减少菜单项。
掌握工具栏的创建方法和步骤,如何将工具栏的功能 与菜单的功能相对应。
掌握创建状态栏的方法和步骤。
返回
12
经过以上操作完成后,Visual C++会对程序中的一些程 序文件的代码进行必要的修改,其中粗体部分的代码是 由ClassWizard自动添加的代码。 1. 在CDialogView类的定义文件DialogView.h中的消息映 射部分将会改变为:
// Generated message map functions
在菜单项属性对话框的【General】选项卡中,各选项的 含义如下图所示。
步骤六:用鼠标左键按住【显示】菜单,将其拖到【编 辑】与【帮助】菜单中间。
这样,利用菜单资源编辑器,我们就很轻松地创建了 一个标准的Windows菜单。
返回
5
表6.1 菜单General属性对话框的各项含义
项目
含义
ID
菜单的资源ID号
步骤三:单击对话框右侧的【Add Function】 按钮,系统 将会弹出【Add Member function】对话框。系统将自动 生成一个缺省名称为OnDisplayData的映射函数亦可另取 别的名称,在此取缺省名称,单击【OK】按钮继续。
步骤四:单击【Edit Code】按钮退出【MFC ClassWizard】 对话框,并编辑新增加的函数OnDisplayData。
用来选择Ctrl、Alt、Shift键是否为快捷 键的组成键
用来确定快捷键的值是虚拟键(VirKey)还 是ASCII
是指启动快捷键的键盘按键
单击此按钮时,用户所按的任何按键将成 为快捷键的键值
返回
8
步 骤 三 : 在 对 话 框 中 的 【ID】 下 拉 列 表 中 选 择 【ID_DISPLAY_DATA】 选 项 , 当 选 中 ID 号 时 , 【ID】 框 中 同 时 显 示 出 此 ID 号 对 应 的 整 数 , 如 ID_DISPLAY_DATA=32771。
步骤二:在工作区窗口中选择【Resource View】选项卡, 展开【Dialog Resources】目录,再展开【Menu】文件,将 会看到菜单IDR_MAINFRAME。
步骤三:双击IDR_MAINFRAME,将在菜单资源编辑器 中打开菜单资源。
步骤四:在主菜单中增加一个【显示】菜单。用鼠标双 击主菜单最右边的空菜单项,或者用鼠标右击,在弹出 的快捷菜单中选择【Properties】菜单项。系统将弹出属 性对话框。
void CDialogView::OnDisplayData()
步骤一:在工作区窗口的【Resource View】选项卡中, 双 击 【Accelerator】 文 件 夹 , 双 击 IDR_MAINFRAME , 则系统会弹出一个加速器表 。
步骤二:在加速器表中浏览一下,发现Ctrl+D还没有被使 用,我们就把Ctrl+D设置为菜单项【个人资料】的快捷键。 方法是双击加速器表末尾的空行,将弹出快捷键的属性 对话框(Accel Properties)。
Caption 菜单项的标题文本,当其中某一字母的前面含有&符号 时,则该字母与Alt键构成组合键
Separator 选中时,则相应的菜单项是一个分隔符或一条水平线
Checked 选中时,则相应的菜单项前显示一个选中标记“√”
Pop_up 选中时,表示该菜单项含有弹出式子菜单
Grayed Inactive Help
1.创建菜单资源
菜单中的每一个菜单项都由菜单项名和命令ID号两个 基本要素组成。在菜单资源中,每个菜单项都必须有一 个唯一的命令ID号来对它进行标识,这个ID号是系统在 对菜单项进行识别时使用的。对于用户而言,菜单项的 标识是利用它所属的弹出菜单和菜单项的句子来标识的, 比如ID_,其所属的弹出菜单是【文件】,菜单项名称为 【打开】。
返回
3
在【Caption】栏中输入“显示(&P)”,括号中的&P表示 紧跟在它后面的字母“P”是助记符,这样,在程序运行 过 程 中 , 就 可 以 用 Alt+P 键 来 激 活 【 显 示 】 菜 单 。 按 【Enter】键继续。
这时,在主菜单中将增加一个“显示”菜单,在助记符P下 面有下划线。同时,在生成的菜单的右面和下面各出现 一个新的菜单或菜单项,可以继续添加新的菜单或菜单 项。
返回
2
创建菜单可以有几种方法,最简单的方法是用菜单资 源编辑器进行设计。在这里,我们把第五章关于模式对 话框的例子进行改造,使对话框的弹出方式由在窗口中 双击鼠标改为由单击某个菜单命令实现。具体步骤如下: 步骤一:在Visual C++ 6.0中,选【File】菜单中的【Open Workspace】菜单项,打开已创建的“Dialog.dsw”文件。
protected:
//{{AFX_MSG(CDialogView)
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point); afx_msg void OnDisplayData(); //ClassWizard自动添加的
//}}AFX_MSG
返回
7
在属性对话框(Accel Properties)中,各项的含义如 表6.2所示。
表6.2 Accel Properties对话框中各选项的含义
选项 ID
Modifiers
Type
Key
Next Key Typed
含义
为了能使设定的快捷键与某个菜单项的功 能相对应,从中选择所需的菜单资源ID号
返回
6
2. 建立快捷键
在Windows应用程序中的某些菜单项后面有一个组合键, 表示一个快捷键(shortcut key),在程序运行过程中, 如果用户按下了该组合键,则相应的菜单命令就会被执 行。当然,若要使用快捷键选择某个菜单项,就必须事 先对其作出定义。现在我们来为刚才创建的菜单添加快 捷键,具体步骤如下:
在菜单资源中,我们定义了MFC如何来构造菜单的结 构 , 同 时 还 指 定 了 菜 单 的 资 源 ID 号 , MFC 通 过 ClassWizard会自动把菜单和相应的框架窗口联系在一起。 但除了由系统产生的少量代码外,MFC不能自动地对程 序的菜单项进行响应,必须用手工实现。
返回
10
对 于 每 个 菜 单 项 , 系 统 提 供 了 COMMAND 和 UPDATE_COMMAND_UI两种消息可供选择:
步骤五:在【显示】菜单中增加一个【个人资料】菜单 项。用鼠标右键单击【显示】菜单中的空菜单项,在弹 出菜单中选择【Properties】选项。单击属性对话框左上 角的“图钉”按钮,把对话框“钉”在屏幕上。在属性对话框 的【Caption】栏中输入“个人资料(&D)” 。
返回
4
对于【个人资料】菜单项,Visual C++ 6.0将为该菜单项 自动分配一个ID号。单击其他菜单项或者屏幕的其他部 分,再选中【个人资料】菜单项,系统在【ID】栏中显 示 出 为 该 菜 单 项 分 配 的 ID 号 , 其 一 般 格 式 为 MENUITEMxxxxx(xxxxx 代 表 一 个 整 数 ) 。 【Prompt】 框 中的文本是光标处于菜单项时,状态栏显示的帮助信息
选中时,表示该菜单项呈灰色显示,该菜单项被禁用 选中时,表示该菜单项没有被激活,用户不能选用
选中时,表示该菜单项在程序运行时被放于顶层菜单 的最右端
Break Prompt
其默认值为None,表示菜单项按常规形式显示。该项 的取值还可为Column或Bar,
指明当光标移到该菜单项时在状态栏上显示的提示
(1)COMMAND消息需要用户的干预,如单击、双击等 操作;
(2)UPDATE_COMMAND_UI消息系统会自动进行响应, 通过它可以实现对菜单项外观的动态管理。例如,设计 人员可以使菜单有效、无效或给菜单项动态添加检查标 记等。
可以利用ClassWizard同时设置这两种消息,但是在实 际编程中,必须为每个菜单项提供有关WM_COMMAND 类型消息映射接口。
DECLARE_MESSAGE_MAP()
};
返回
13
其中:
//{{AFX_MSG(CDialogView) ……
//}}AFX_MSG 是ClassWizard分别用来识别命令消息处理函数定义的起
始标记和结束标记,在AFX_MSG(CDialogView)后面括号 内的CDialogView表示是处理该消息的类。 2. 在CDialogView类的实现文件DialogView.cpp中的消息 映射部分也进行了一些修改:
学习和掌握CMenu类、CStatusBar类、CToolBar类、 CCmdUI类及常用成员函数的功能和使用。
菜单、工具栏和状态栏是Windows应用程序中最重要 的三个用户界面元素,是应用程序设计中不可缺少的步 骤。
返回
1
6.1 创建菜单
菜单是一系列命令的列表,是最常用的命令输入方式。 在Windows中,几乎所有的命令操作都与菜单有关。
下面,我们在视图类中对前面已建立的“个人资料 (&D)”菜单项的消息做出响应。具体步骤如下:
返回
11
步骤一:选择【View】菜单中的【ClassWizard】菜单项, 弹出【MFC ClassWizard】对话框。
步 骤 二 : 在 【MFC ClassWizard】 对 话 框 中 , 选 择 【Message Maps】选项卡。在【Class name】下拉列表框 中,选择类CDialogView;在 【Object Ids】中单击选择 ID_DISPLAY_DATA 选项;在 【Messages】 栏中将出现 COMMAND和 UPDATE_COMMAND_UI两个选项,选中 其中的 COMMAND。
步骤四:在【Key】列表框中输入“D”,确认【Modifiers】 栏中的【Ctrl】复选框被选中,而且【Alt】和【Shift】都 未被选中;或者,直接单击【Next Key Typed】按钮,按 下 Ctrl+D 组 合 键放开 , 此时系 统 会自动 记 录所按 下 的 Ctrl+D键为所要设定的组合键。按【Enter】键继续。
//}}AFX_MSG_MAP 是ClassWizard标识命令消息处理映射机制的来自始标记和结 束标记。返回
15
3. 在DialogView.cpp文件中编写OnDisplayData函数的代码。 把 DialogView.cpp 文 件 中 响 应 双 击 窗 口 的 函 数
OnLButtonDBLCLK() 的 代 码 复 制 到 OnDisplayData() 函 数 中,具体代码如下:
BEGIN_MESSAGE_MAP(CDialogView, CView)
//{{AFX_MSG_MAP(CDialogView)
返回
14
ON_WM_LBUTTONDBLCLK() ON_COMMAND(ID_DISPLAY_DATA, OnDisplayData) //ClassWizard自动添加的 //}}AFX_MSG_MAP END_MESSAGE_MAP() 其中: //{{AFX_MSG_MAP(CDialogView) ……
步骤五:为了在【显示】菜单中提示【个人资料】菜单 项的快捷键,可以返回6.1.1节中的步骤五,将【Caption】 框中的内容修改为“个人资料(D)\tCtrl+D”。
这样,我们就建立了一个完整的菜单资源。
返回
9
3 菜单功能的实现
在MFC框架中,菜单命令消息是按照一定的顺序进行 传递的。对于一个单文档应用程序,消息传递的顺序为: 视图类→文档类→框架类→应用程序类。因此,如果我 们在视图类和文档类中同时定义了某个菜单项的消息映 射接口时,由于消息首先传递给视图类,在视图类中对 此消息做出了响应,所以,文档类中定义的此菜单项的 消息映射函数就无法执行。
第六章 菜单、工具栏和状态栏
本章导读
掌握菜单的创建步骤和方法,如何进行命令消息的映 射和编写相应的程序代码。
掌握CMenu类及其常用成员函数的功能和使用方法, 掌握利用这些成员函数创建快捷菜单和实现动态增加或 减少菜单项。
掌握工具栏的创建方法和步骤,如何将工具栏的功能 与菜单的功能相对应。
掌握创建状态栏的方法和步骤。
返回
12
经过以上操作完成后,Visual C++会对程序中的一些程 序文件的代码进行必要的修改,其中粗体部分的代码是 由ClassWizard自动添加的代码。 1. 在CDialogView类的定义文件DialogView.h中的消息映 射部分将会改变为:
// Generated message map functions
在菜单项属性对话框的【General】选项卡中,各选项的 含义如下图所示。
步骤六:用鼠标左键按住【显示】菜单,将其拖到【编 辑】与【帮助】菜单中间。
这样,利用菜单资源编辑器,我们就很轻松地创建了 一个标准的Windows菜单。
返回
5
表6.1 菜单General属性对话框的各项含义
项目
含义
ID
菜单的资源ID号
步骤三:单击对话框右侧的【Add Function】 按钮,系统 将会弹出【Add Member function】对话框。系统将自动 生成一个缺省名称为OnDisplayData的映射函数亦可另取 别的名称,在此取缺省名称,单击【OK】按钮继续。
步骤四:单击【Edit Code】按钮退出【MFC ClassWizard】 对话框,并编辑新增加的函数OnDisplayData。
用来选择Ctrl、Alt、Shift键是否为快捷 键的组成键
用来确定快捷键的值是虚拟键(VirKey)还 是ASCII
是指启动快捷键的键盘按键
单击此按钮时,用户所按的任何按键将成 为快捷键的键值
返回
8
步 骤 三 : 在 对 话 框 中 的 【ID】 下 拉 列 表 中 选 择 【ID_DISPLAY_DATA】 选 项 , 当 选 中 ID 号 时 , 【ID】 框 中 同 时 显 示 出 此 ID 号 对 应 的 整 数 , 如 ID_DISPLAY_DATA=32771。
步骤二:在工作区窗口中选择【Resource View】选项卡, 展开【Dialog Resources】目录,再展开【Menu】文件,将 会看到菜单IDR_MAINFRAME。
步骤三:双击IDR_MAINFRAME,将在菜单资源编辑器 中打开菜单资源。
步骤四:在主菜单中增加一个【显示】菜单。用鼠标双 击主菜单最右边的空菜单项,或者用鼠标右击,在弹出 的快捷菜单中选择【Properties】菜单项。系统将弹出属 性对话框。
void CDialogView::OnDisplayData()
步骤一:在工作区窗口的【Resource View】选项卡中, 双 击 【Accelerator】 文 件 夹 , 双 击 IDR_MAINFRAME , 则系统会弹出一个加速器表 。
步骤二:在加速器表中浏览一下,发现Ctrl+D还没有被使 用,我们就把Ctrl+D设置为菜单项【个人资料】的快捷键。 方法是双击加速器表末尾的空行,将弹出快捷键的属性 对话框(Accel Properties)。
Caption 菜单项的标题文本,当其中某一字母的前面含有&符号 时,则该字母与Alt键构成组合键
Separator 选中时,则相应的菜单项是一个分隔符或一条水平线
Checked 选中时,则相应的菜单项前显示一个选中标记“√”
Pop_up 选中时,表示该菜单项含有弹出式子菜单
Grayed Inactive Help