第十六讲 对话框与菜单栏 控件的基本概念 Visual C++中的控件 对话框概述 创建对话框 菜单栏 工具栏 状态栏.

Slides:



Advertisements
Similar presentations
7.1 内置对象概述及分类 JSP 视频教学课程. JSP2.2 目录 1. 内置对象简介 1. 内置对象简介 2. 内置对象分类 2. 内置对象分类 3. 内置对象按功能区分 3. 内置对象按功能区分 4. 内置对象作用范围 4. 内置对象作用范围.
Advertisements

广州市小学信息技术教学同步资源 第一册 第二章 第六节 《 Window窗口》 广州市荔湾区西华路小学 董绮珊.
第六 章数据库访问页 6.1 数据访问页视图 6.2 创建数据访问页 6.3 编辑数据访问页 6.4 查看数据访问页 退出.
项目2 字符格式和段落编排 2017年3月7日6时54分.
插入超链接 高邮市第一实验小学 范太国 任务一:设置文本超链接 任务一:设置文字超链接 步骤:1、选定文字并右击,在快捷菜单 中选择“超链接”命令。 2、在弹出的对话框中选择左侧“链接到:”中的“本文档中的位置(A)”项,在“请选择文档中的位置(C):”中选择需要链接的幻灯片,单击“确定”按钮。
UI(用户界面)集训班 Illustrator 高级班.
第14章 c++中的代码重用.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
在PHP和MYSQL中实现完美的中文显示
走进Word 认识Word2010的工作界面 计算机专业 赵德玲.
UI 软件 设计 网页基本元素设计(二).
Visual C++ Windows Programming
第八章 菜单设计 §8.1 Visual FoxPro 系统菜单 §8.2 为自己的程序添加菜单 §8.3 创建快捷菜单.
VISUAL C++ 简介.
第1章 Windows应用程序框架的 创建与消息处理
走进编程 程序的顺序结构(二).
辅导课程六.
网络常用常用命令 课件制作人:谢希仁.
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
Visual C# 2005程序设计 第1章 Visual C#概述 第2章 C#语法基础 第3章 顺序结构程序设计
2019/1/12 GDP设计协同 超级管理员操作手册 GDP项目组.
第10章 高级用户界面设计 10.1 菜单设计 10.2 通用对话框 10.3 图像列表框控件 10.4 树形视图控件
Windows 7 的系统设置.
POWERPOINT TEMPLATE HI.
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
PRESENTED BY OfficePLUS
第七章 操作符重载 胡昊 南京大学计算机系软件所.
第一章 函数与极限.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第四讲 客户问卷调查程序 教育部“十二五”职业教育国家规划教材
产品推广 PRODUCT PROMOTION PRESENTED BY OfficePLUS.
直接扫描保存成TIF格式, 其他图片格式用Windows XP自带的 Windows图片与传真查看器打开
标准配色方案 背景 文本和线条 阴影 强调色 主色一 主色二 主色三 主色四 推荐应用顺序. 标准配色方案 背景 文本和线条 阴影 强调色 主色一 主色二 主色三 主色四 推荐应用顺序.
第十二讲 菜单、工具栏和状态栏 严宣辉 数学与计算机科学学院
线 性 代 数 厦门大学线性代数教学组 2019年4月24日6时8分 / 45.
第1章 c++概述 1.1 C++语言的简史及特点 1.2 简单的C++程序 1.3 C++语言的基本组成
VisComposer 2019/4/17.
PRESENTED BY OfficePLUS
姚金宇 MIT SCHEME 使用说明 姚金宇
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
组件 复选框(Checkbox)可以让用户进行多项选择。复选框有两种状态,分别为“开(on)”和“关(off)”。当用户点中复选框的时候,复选框的状态就会改变。 1、创建复选框 (1)声明复选框。 Checkbox mycheckbox =new Checkbox (); (2)添加复选框。将复选框组件放置到容器中。
项目二:HTML语言基础.
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
第六章 Excel的应用 一、Excel的单元格与区域 1、单元格:H8, D7, IV26等 2、区域:H2..D8, HS98:IT77
第4章 Excel电子表格制作软件 4.4 函数(一).
Word中活用“艺▪图▪框” 信息技术必修(一).
iSIGHT 基本培训 使用 Excel的栅栏问题
PPT中视频的播放控制 苏州电教馆在线课程培训教程:PPT2003教程   制作:赵立锋 更多教程请见:
第六章 素材的加工与处理 第13讲 用GoldWave进行音频的截取、合并、淡入淡出操作
LOGIX500软件入门 西安华光信息技术有限公司 2008年7月11日.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
Visual Basic程序设计 第13章 访问数据库
魏新宇 MATLAB/Simulink 与控制系统仿真 魏新宇
VRP教程 2011.
Delphi 7.0开发示例.
Python 环境搭建 基于Anaconda和VSCode.
MFC控件 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
Polarization of electro- magnetic wave after reflection
第六章 Excel的应用 五、EXCEL的数据库功能 1、Excel的数据库及其结构 2、Excel下的数据排序 (1)Excel的字段名行
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
YOUR SUBTITLE GOES HERE
第七章 Visual FoxPro菜单与工具栏
第8章 创建与使用图块 将一个或多个单一的实体对象整合为一个对象,这个对象就是图块。图块中的各实体可以具有各自的图层、线性、颜色等特征。在应用时,图块作为一个独立的、完整的对象进行操作,可以根据需要按一定比例和角度将图块插入到需要的位置。 2019/6/30.
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
第六讲 酒店客房管理系统(二) 教育部“十二五”职业教育国家规划教材
LOGO HERE 单击此处添加 您的标题标题标题 PRESENTED BY JANE DOE
第3章 对话框.
Presentation transcript:

第十六讲 对话框与菜单栏 控件的基本概念 Visual C++中的控件 对话框概述 创建对话框 菜单栏 工具栏 状态栏

控件的基本概念 控件是独立的小部件,在对话框与用户的交互过程中,担任着主要角色。 控件是构成应用程序窗体的主要组成部分。

控件的基本概念 控件是Windows应用程序和用户进行交互的常用 手段。在Visual C++中,控件可以分成三类: ActiveX 控件 其他的MFC控件 Windows标准控件由Windows操作系统提供,包括 按钮、复选框、列表框 和静态文本等。 控件一般成组地放置在特殊的窗口中,这种特殊 窗口或者是对话框或者是表单(Form)。

ActiveX控件 ActiveX 控件是一种可重用的软件组件。 通过使用 ActiveX控件,可以很快地在网址、台式 应用程序、以及开发工具中加入特殊的功能。如 StockTicker控件可以用来在网页上即时地加入活动 信息,动画控件可用来向网页中加入动画特性。 ActiveX控件一旦被开发出来,设计和开发人员就可 以把它当作预装配组件,用于开发客户程序。

第十六讲 对话框与菜单栏 控件的基本概念 Visual C++中的控件 对话框概述 创建对话框 菜单栏 工具栏 状态栏

Visual C++中的常用控件 Visual C++ 6.0中所有的控件类都是由CWnd类派生来的,因此,控件实际上也是窗口。 控件通常是作为对话框的子窗口而创建的,控件也可以出现在视图窗口、工具栏和状态栏中。 控件的种类很多,Visual C++ 6.0提供的一些基本控件如图所示。

文本控件 文本控件是指在对话框中显示文字或图像的控件,该类控件是一种单向交互的控件,只能支持应用程序的输出,而不能接受用户的输入。在Visual C++中其包含静态正文控件(Static Text)和图片控件(Picture)两种。

静态正文控件 显示文本,矩形,图标,光标,位图,元文件。 只输出,不输入 MFC提供了CStatic类,封装了对静态文本框的 所有操作。 如果想在程序中动态创建静态文本框,而不是直 接从Toolbox中拖到对话框模板上,那么就需要 使用CStatic类的成员函数Create。Create函数的 原型如下:

静态文本框风格

CStatic类的成员函数简介 除了上述成员函数外,由于CStatic是CWnd的派生类, CWnd的很多成员函数也可以使用,例如, GetWindowText、GetWindowRect、SetWindowText等。

图片控件 图片控件的使用与静态正文对话框相似,将Picture控件导入到对话框中,并单击右键打开如图所示属性对话框,为其设置属性即可 。

编辑框控件(Edit Box) 编辑框控件可以接受用户的输入和编辑。在编辑框中,用户可以输入文字、数字,并能用剪切、粘贴、复制、删除等操作来编辑用户的输入,编辑框既可以是单行的,也可以是多行的。

按钮控件 命令按钮的作用是对用户的鼠标单击作出反应并触发相应的事件,在按钮中既可以显示正文,也可以显示位图。按钮可以响应鼠标单击的小矩形子窗口,向父窗口发出两种控件通知消息:BN_CLICKED(在按钮上单击)和BN_DOUBLECLICKED(在按钮上双击)。

列表框控件(List Box) 列表框控件是一个条目列表,它允许用户从所列出的表项中进行单项或多项选择,被选择的项呈高亮度显示。列表框具有边框,并且一般带有一个垂直滚动条。 列表框分单选列表框和多重选择列表框两种:单选列表框一次只能选择一个列表项,而多重选择列表框可以进行多重选择。

组合框控件(Combo Box) 组合框把一个编辑框和一个单选择列表框结合在了一起 ,用户既可以在编辑框中输入,也可以从列表框中选择 一个列表项来完成输入。组合框有以下3种风格。 简易式(Simple):简易式组合框包含一个编辑框和 一个总是显示的列表框。 下拉式(Dropdown):下拉式组合框同简易式组合框 类似,二者的区别在于仅当单击下滚箭头后列表框才 会弹出。 下拉列表式(Drop List):下拉列表式组合框也有一 个下拉的列表框,但它的编辑框是只读的,不能输入 字符。

滚动条控件(Scroll Bar) 滚动条的主要作用是从某一预定义值的范围内快速有效地选取一个整数值。 按照滚动条的走向,滚动条分为水平滚动条和垂直滚动条两种。 在滚动条内有一个滚动框,用来表示当前的值。用鼠标单击滚动条,可以使滚动框移动一页或一行,也可以直接拖动滚动框。 滚动条既可以作为一个独立控件存在,也可以作为窗口、列表框和组合框的一部分。

添加、移动、复制和删除控件 要在实际应用中使用控件,首先必须将控件添加到对话框 中。一般来说,在对话框中添加控件的方法有如下两种。 在控件工具栏中选择某控件,此时的鼠标箭头在对话框中 变成“+”形状。在对话框指定位置单击鼠标左键,则此 控件被添加到对话框的相应位置,再拖动选择框可改变控 件的大小和位置。 在控件工具栏中选择某控件,并按住鼠标左键不放,在移 动鼠标到对话框的指定位置的过程中,用户会看到一个虚 线框,下面带有该控件的标记,然后释放鼠标,新添加的 控件就出现在对话框中。

控件的布局 在对话框中添加了控件后,如果控件数量众多,那 么手动拖动这些控件的位置使之对齐是非常烦琐的。 因此,Visual C++ 6.0提供了控件布局工具栏。 选中【Dialog】菜单项后可弹出控件布局工具栏。 需要注意的是,弹出的布局工具都是灰色图标,表 示当前不可用,只有当用户选定了多个控件后这些 图标才是可用的,如图所示。

控件应用实例 设计一个学生个人信息登记表窗体。该范例介 绍如何在对话框中添加前面介绍的各类控件, 并将这些控件进行布局设置,组成一个常见的 学生个人信息登记表窗体。

第十六讲 对话框与菜单栏 控件的基本概念 Visual C++中的控件 对话框概述 创建对话框 菜单栏 工具栏 状态栏

对话框概述 在Visual C++中,对话框是一个窗口。对话框不仅可以接收消息,而且还可以被移动和关闭,甚至可以在其客户区中进行绘图。因此,可以将对话框看成一个大容器,在它上面能够放置各种各样的标准及扩展控件,使程序支持用户输入的手段更加丰富。

对话框的种类 一般的说,Windows应用程序中,对话框分为模态(Model )对话框和非模态(Modeless)对话框两种,这两种对话 框的区别在于当对话框打开时是否允许用户进行其他对象 的操作。 模态对话框是指在用户想要进行对话框以外的应用程序操 作时必须首先对该对话框进行响应。 非模态对话框与模态对话框不同,当用户打开非模态对话 框时,依然可以操作其他窗口。

模态对话框 模态对话框垄断了用户的输入,当一个模态对话框打开时,用户只能与该对话框进行交互,而其他用户界面对象收不到输入信息。模态对话框下,用户需要操作目标对话框就必须先操作模态对话框,这就是用户对模态对话框的处理。

非模态对话框 非模态对话框允许用户在处理非模态对话框的同时处理目标对话框,其不会垄断用户的输入,如图所示。

对话框编辑器 对话框的设计区域称为对话框编辑器。当插入一个新的对 话框资源后,打开工作台的资源面板,打开【Dialog】文 件夹,可以看到下面有一个ID号为IDD_ABOUTBOX对话 框,这几乎是每个MFC应用程序所具备的。 此外,用户可以添加一个自己的对话框。鼠标右击【 Dialog】文件夹,在弹出的快捷方式菜单中选择【Insert Dialog】菜单项,这时,不仅在资源面板中多了一个ID号 IDD_DIALOG1的对话框资源,而且在右边的编辑器中也 显示了这个对话框模板的编辑窗口,如图所示。

对话框编辑器

第十六讲 对话框与菜单栏 控件的基本概念 Visual C++中的控件 对话框概述 创建对话框 菜单栏 工具栏 状态栏

创建对话框 无论是模态对话框还是非模态对话框,都需要拥有相 应的对话框模板资源和新的对话框类,二者的创建都 是遵循以下步骤。 添加一个新的对话框资源并用对话框编辑器设计对话框。 创建新的对话框类,该类应从CDialog类派生。 使用ClassWizard为对话框类加入与控件相关联的成员变量。 在对话框类中添加需要的消息处理。 创建对话框并显示。

添加对话框资源 使用AppWizard创建一个单文档视图工程“创建对话框”,需要为该工程添加一个对话框,只需在工作台的【ResourceView】选项卡中选择【Dialog】项,右键单击该项并在快捷菜单中单击【Insert Dialog】命令,如图所示。

添加控件 添加了对话框资源后,即可根据用户的需要在对话框中添加控件。例如,需要创建一个具有对用户输入的两个数字进行相加的对话框时,那么只需要在上一步骤中创建的对话框中添加相应控件,并设置相关属性即可,如图所示:

使用ClassWizard创建对话框类 利用ClassWizard,用户可以十分方便地创建MFC窗口类的派生类,对话框类也不例外。

使用ClassWizard加入成员变量 创建好了对话框类后,就可以使用ClassWizard 为对话框类加入与控件相关联的成员变量了。

添加消息处理函数 所谓消息处理函数即窗口过程,在这个函数中, 不同的消息将用switch分支语句分配到不同的处理 程序中去,消息处理函数在应用程序中的功能如 图所示。

添加消息处理函数 双击ClassWizard中的按钮来打开【Add Member Function】对话框。在该对话框中添加消息处理函数。事实上,读者可以右击该类,在其中选择【Add Windows Message Handle】菜单项,在其中也可添加消息处理函数。

构造主程序框架 在工作区的Resource View选项卡中单击Menu节点,双击 IDR_MAINFRAME选项。 加入对话框,分别为模态对话框和非模态对话框,ID分别为 “IDM_MODEDLG”和“IDM_MODELESSDLG” 完成菜单添加后,需要在CMainFrame类中添加这两个菜单项 的COMMAND消息处理函数,在工作区的Class View选项卡中 CMainFrame节点,右键单击选择Add Windows Message Handler菜单项,表示添加消息处理函数。 在弹出对话框右下角的Class or Object to handle下拉列表框中 找到前面添加的新菜单对象“IDM_MODELDLG”和 “IDM_MODELESSDLG”

显示模态对话框 例如,要创建并显示一个模态对话框, 其实现代码如下所示: CMyDlg m_Mydlg; //定义对象m_Mydlg m_Mydlg.DoModal(); //创建模态对话框

显示非模态对话框 构造一个对话框类的对象。用户可以在框架窗口 类的头文件声明一个对话框类的对象成员变量: Public: CMyDlg m_Mydlg; 该程序中,由于在这里声明的是CMyDlg类的对 象,因此,还要在框架窗口类的头文件 MainFrm.h中加入如下语句: # include “MyDlg.h”

显示非模态对话框 例如,要显示一个非模态对话框m_Mydlg,其实现代码如下所示。 if (!m_Mydlg.m_hWnd) //判断对话框是否已被创建 { m_Mydlg.Create(IDD_MYDLG); //创建对话框IDD_MYDLG } m_Mydlg.ShowWindow(SW_SHOW); //显示对话框

对话框的数据交换 对话框的数据成员变量存储了与控件相对应的数据。在对话 框运行后,数据变量需要和控件交换数据,以完成输入或输 出功能。 例如,一个编辑框可能需要用来输入,也可能需要用来输 出。 当用作输入时,用户在其中输入了数值之后,对应的数据成 员应该更新与编辑框中的数值相同; 当用作输出时,应及时刷新编辑框的内容以反映相应数据成 员的变化。 因此,对话框就需要一种机制来实现这种数据交换功能。

对话框的数据交换 Visual C++的对话框中数据交换通过调用UpdateData函数来实现。UpdataData函数原形如下: BOOL UpdateData ( BOOL bSaveAndValidaet = TRUE); UpdataData函数只有一个布尔型参数bSaveAndValidate,其决定了数据传送的方向。若参数值为TURE,即调用UpdateData(TRUE),表示将数据从对话框的控件中传送到对应的数据成员中;若参数值为FALSE,即调用UpdateData(FALSE),则表示将数据从数据成员中传送给对应的控件。

对话框的数据交换 例如,用户在非模态对话框IDD_MYDLG的【相加】按钮的处理函数OnOK()函数中键入如下代码来实现数据交换。 UpdateData(TRUE); //将数据从对话框的控件中传送到对应的数据成员中 m_output=m_input1+m_input2; //计算 UpdateData(FALSE); //将数据从数据成员中传送给对应的控件

第十六讲 对话框与菜单栏 控件的基本概念 Visual C++中的控件 对话框概述 创建对话框 菜单栏 工具栏 状态栏

菜单概述 Windows应用程序中使用的菜单形式较为多 样,其中常见的主要有三种形式的菜单: 下拉式菜单 级联菜单 快捷菜单

下拉式菜单 下拉式菜单一般出现在应用程序窗口的顶部,该形式的菜单实现将某个类别相关的所有功能排在该类别的下面。如果选中某个类别时,其下就会拉出菜单,该菜单中有一系列具有相关功能的菜单项可供选择,如图所示即为一个下拉式菜单。

级联菜单 级联菜单是下拉菜单的一个扩展。如果某个菜单项的右边有一个向右的黑三角符号,那么这个菜单项就是一个级联菜单。级联菜单带有另一个子菜单,子菜单一般显示在所属菜单项的右边。这个子菜单和下拉式菜单相似,有一系列菜单项可供选择,如图所示。

快捷菜单 第三种菜单形式是可以通过在应用程序区域中单击鼠标右键调出的一种很方便的菜单,称为快捷菜单或弹出式菜单。由于该菜单的菜单项内容依赖于被选中的对象或光标、鼠标在工作区域内所指的位置,因此该种菜单也称为上下文菜单。比如在Word的编辑区右键单击,将出现快捷菜单,如图所示。

Visual C++ 6.0自动生成的菜单 在Visual C++ 6.0中,一般当用户新建好一个MFC应用程序时,AppWizard都会自动生成一个常用的菜单。单文档应用程序会自动生成标识符为IDR_MAINFRAME的菜单资源 ,而多文档应用程序自动生成标识符为IDR_MAINFRAME和IDR_xxxTYPE的菜单资源,其中xxx为新建的工程名 。

菜单项属性对话框 ID(菜单项ID) Caption(菜单项名称) Separator(分隔线) Pop-up(弹出式复选框) 可以设置快捷键 Separator(分隔线) 选中该复选框,则菜单变成一个分格线。 Pop-up(弹出式复选框) 选择此复选框,菜单项将成为弹出式菜单,即单击此菜单会弹出下一级子菜单

菜单项属性对话框 Inactive(非活动复选框) Checked(检查标记复选框) Grayed(变灰)复选框 Break(菜单项的分割) 选择此复选框表明菜单项的初始状态为非活动状态 Checked(检查标记复选框) 次复选框是菜单初始值的检查标记。选择该复选框,会在菜单项的左边打上一个钩。 Grayed(变灰)复选框 选中此复选框,菜单项将以灰色显示,表明菜单的初始状态为不可访问。 Break(菜单项的分割) 当一个菜单项过多时,放在一列中会感觉很长很拥挤,此时可以把它们分成两列显示。

创建菜单的步骤 一般来说,创建一个菜单都遵循下面几个步骤。 添加一个自定义的菜单资源。 设计菜单。 将菜单加入到应用程序中。 为每个菜单项添加消息映射。 以上步骤是创建一个自定义菜单的常规步骤,大家 也可以在菜单编辑器中或应用程序中修改、控制 AppWizard生成的系统菜单及用户自定义菜单。

例子:添加自定义菜单并设计菜单

加入到应用程序中 在OnCreate(LPCREATESTRUCT lpCreateStruct) 函数中加入代码: CMenu menu; menu.LoadMenu(IDR_MENU1); this->SetMenu(&menu);

添加消息处理函数

快捷菜单 快捷菜单在应用程序中也是用的很频繁的一种菜单,其使用户和应用程序之间更容易地进行交互。 创建快捷菜单的方法有两种,一种是完全手动的添加资源及代码。另一种是通过Visual C++提供的组件。

手动创建快捷菜单 添加快捷方式菜单的步骤如下所示。 给应用程序新建一个菜单资源,并在菜单编辑器中进 行编辑。 在View类中加入WM_RBUTTONDOWN的响应函数 OnRButtonDown,在其中加入如下代码。 CMenu menu; //定义菜单对象 menu.LoadMenu(IDR_MYMENU); //加载菜单资源 CMenu *pSubMenu=menu.GetSubMenu(0);//取得第一个顶层菜单 ClientToScreen(&point); //转换坐标 pSubMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON, point.x,point.y,GetParent()); //弹出菜单

第十六讲 对话框与菜单栏 控件的基本概念 Visual C++中的控件 对话框概述 创建对话框 菜单栏 工具栏 状态栏

工具栏设计 工具栏是Windows应用程序中一个非常重要的图形界面元素,其提供了一组顺序排列的带有位图图标的按钮。 通常,用户可以通过位图就可以知道这个按钮所要实现的功能,因此,操作工具栏比菜单更方便快捷。 在应用程序中,可以将常用到的功能封装在工具拦中,工具栏是一个特殊的窗口对象,不仅可以停靠在主框架窗口的一边,还可以浮动在窗口中。

Visual C++中加入工具栏 当用户使用AppWizard户新建一个MFC框架的应用程序时,不管是单文档应用程序还是多文档应用程序,只要在【MFC AppWizard-step 4of 6】对话框中,按照默认的将【Docking toolbar】复选框复选,就会在应用程序中生成一个工具栏。

利用工具栏编辑器设计工具栏按钮 上述创建的工具栏只有默认的按钮。事实上,用户可以通过Visual C++ 6.0的工具栏编辑器实现对工具栏按钮的编辑。展开工作台资源面板中的Toolbar文件夹,双击下面的ID号为IDR_MAINFRAME的工具栏资源,在窗口的右侧出现了工具栏编辑器窗口,如图所示。

新建工具栏 在一个应用程序中,可以有一个以上的工具栏。因此,大家不仅可以在原来MFC提供的工具栏的基础上增加按钮,还可以自己创建一个工具栏并添加到应用程序中,下面就是新建工具栏的步骤。 添加工具栏资源 设计工具栏按钮 添加到应用程序

添加工具栏资源 前面讲述的是在AppWizard自动生成的原工具栏的基础上增加了一个工具栏按钮,现在来增加一个新的工具栏资源。使用AppWizard新建一个单文档工程“创建工具栏”。在工作台的资源面板上,鼠标右键单击Toolbar文件夹,弹出如图所示的快捷菜单。

设计工具栏按钮

添加到应用程序 完成工具栏设计后,需要将该工具栏添加到应用程序中。其添加操作步骤如下。 在CMainFrame框架类的头文件中,声明一个CToolBar类的对象。 CToolBar m_toolbar 在CMainFrame的OnCreate函数中完成工具栏窗口的创建和加载。

加载新的工具栏代码 { TRACE0("Failed to create toolbar\n"); if (!m_toolbar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_RIGHT| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_toolbar.LoadToolBar(IDR_TOOLBAR1)) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create } m_toolbar.EnableDocking(CBRS_ALIGN_ANY);//将工具栏停靠在任意位置 DockControlBar(&m_toolbar);//停靠工具栏在主框架窗口上

第十六讲 对话框与菜单栏 控件的基本概念 Visual C++中的控件 对话框概述 创建对话框 菜单栏 工具栏 状态栏

状态栏 状态栏是Windows窗口上另一个很重要的界面元素。状态栏的主要作用是显示应用程序目前的基本状态,同时还会在选择菜单或工具栏按钮时显示提示信息。

Visual C++中的状态栏 当新建一个MFC框架的应用程序时,不管是单文档应用程序还是多文档应用程序,只要在【MFC AppWizard-step 4of 6】对话框中,按照默认的将【Initial Status Bar】复选框复选,就会在应用程序中生成一个状态栏,如图。

创建状态栏 状态栏也是主框架窗口的子窗口,因此其主要创建步骤也是在框架窗口类的OnCreate函数中完成的。 默认的状态栏是Visual C++给MFC应用程序自动添加的,读者并不需要书写任何代码 ,如图中红色框线中为没有进行任何操作的状态栏。

修改状态栏 状态栏的窗格大体分为两类:一类是处于状态栏左边的,用于显示菜单项命令或工具栏命令提示信息或其他帮助信息的,称为提示行。另一类是在状态栏的右边呈一格一格形式排列的,用于显示SCROLL LOCK、NUMLOCK、CAPSLOCK等开关状态或其他用户自添加状态等信息,称为状态指示器。

指示器数组 在MFC应用程序中,增加或减少状态栏窗格数都是通过修改指示器数组来实现的。指示器数组indicators是用来说明状态栏窗格的数量及各个窗格的意义的。打开CMainFrame的实现文件OnCreate函数,在.cpp文件的开始部分有以下一段代码: static UINT indicators[] = { ID_SEPARATOR, // status line indicator ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, };

修改状态栏 一般来说,修改状态栏是指修改状态栏的窗格。熟悉了指示 器数组,那么修改状态栏窗格就显得很容易了,只需要修改 indicator数组就可以增加或减少窗格数。 例如,在状态栏上增加两个窗格,并在其中的指示器窗格中 显示字符 ,将CMainFrame类的实现文件OnCreate函数中的 indecator数组改成如下形式,也即添加两行定义语句。 static UINT indicators[] = { ID_SEPARATOR, // status line indicator ID_SEPARATOR, //增加提示行窗格 ID_INDICATOR_STR, //增加状态指示器窗格 ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, };

修改状态栏 此处不仅加了一个提示行窗格ID_SEPARATOR,还增加了一个状态指示器窗格ID_INDICATOR_STR,用于显示字符。因此,可以在字符串资源表中再添加一个ID为ID_INDICATOR_STR的字符串资源,字符串内容为“添加一个窗格”。 添加一个字符串资源在工作区的【ResourceView】选项卡中,如图所示。

例子1: ID_SEPARATOR, // status line indicator ID_SEPARATOR, ID_INDICATOR_STR, ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL,

例子2: ID_SEPARATOR, ID_INDICATOR_STR, ID_INDICATOR_TIME, ID_INDICATOR_CAPS, ID_INDICATOR_NUM, SetTimer(1,1000,NULL); CTime time=CTime::GetCurrentTime(); CString str=time.Format("%H:%M:%S"); CClientDC dc(this); CSize sz=dc.GetTextExtent(str); m_wndStatusBar.SetPaneInfo(1,ID_INDICATOR_TIME,SBPS_POPOUT,sz.cx); m_wndStatusBar.SetPaneText(1,str);

大作业--题1:1月15日上传截止 编写一个应用程序,实现对圆面积、圆柱体积、 圆锥体积和圆台体积的计算。要求: 运用基类和派生类的方法实现。例如,基类可以实现 圆面积的计算,派生类在此基础上实现体积的计算。 要求其中至少使用一次私有派生。 显式写出基类和派生类中的构造及析构函数。 参数可以在提示下由键盘输入。 本题为构造函数、析构函数、类的继承应用

大作业--题2:1月15日上传截止 按下列要求编写程序:在一个工厂里,规定车间 主任和工人的月工资的计算方法如下: 本题考查虚函数的应用 车间主任的月工资固定为8000元; 工人的月工资和他的加班时间有关,计算方法是每加 班1小时获报酬100元,固定工资为3000元。 编写程序,实现对1位车间主任和3位工人的月工资计 算。其中,三位工人的加班时间分别为12小时、18小 时、24小时。 要求利用虚函数或纯虚函数的方式加以实现。 本题考查虚函数的应用

大作业--题3:1月15日上传截止 本题考查运算符重载

大作业--题4:1月15日上传截止 设计一个单文档程序,用于计算两数的最大公 约数和最小公倍数。 本题考查对话框、控件、菜单栏的使用 菜单栏上设置“Comput”菜单项。 菜单项下设两个按钮,分别激活模态和非模态对话 框。 模态对话框中用于计算两数的最大公约数 非模态对话框中用于计算两数的最小公倍数 程序界面美观整齐,全英文标示。 本题考查对话框、控件、菜单栏的使用