第五部分MFC和对话框编程教学讲义

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

BOOL CRegisterDialog::OnInitDialog() {
CDialog::OnInitDialog(); // TODO: Add extra initialization here m_ctrlIncome.AddString("500元以下"); m_ctrlIncome.AddString("500-1000元"); m_ctrlIncome.AddString("1000-2000元"); m_ctrlIncome.AddString("2000元以上");
return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }
这些数据对象相当于控件与用户或程序之间交换数据信息 的缓冲区,所以在对话框类中增加与对话框模板中控件对应的 数据对象是必要的。控件所对应的数据对象有两类: ·一类是控件所对应的 MFC 类对象(控件类对象)可以用于对
控件的功能的调用; ·另一类是数值类对象,用于数据信息的交换。常用控件所对
应的数值类对象如下:
CObject CCmdTarget CWnd CDialog CStatic CEdit CComboBox CListBox
控件
CProgressCtrl CSliderCtrl
CSpinButtonCtrl
由此我们可以看出:对话框可以视为是提供了一个能放置多 个子窗口,并提供了窗口之间通讯操作的窗口框架。这种异类 同构的结构有利于简化构造和便于通讯。
本例在 CRegisterDialog 中增加的数据对象如下:
控件ID
IDC_AGE IDC_INCOME IDC_INCOME IDC_KIND IDC_MARRIED IDC_NAME IDC_SEX IDC_UINT IDC_WORK
数据对象类型
UINT CString CListBox CString BOOL CString int CString int
工作单位 默认
文本框
IDC_UINT
默认
静态文本 默认
单位性质 默认
组合列表框 IDC_KIND
下拉列表、不排序、初
始化列表项。
静态文本 默认
工资收入 默认
列表框
IDC_INCOME
不排序
按钮
IDOK
确定(&Y) 默认
按钮
IDCANCEL 取消(&C) 默认
3 设置控件的 Tab 顺序 4 测试对话框效果
·ID
指定对话框的标识值,程序可使用它装载对话框
资源和选取对话框窗口。
·Caption 指定对话框的显示标题。
·Font… 选择对话框中所有文本(包括控件标题)字体。
·Menu 如果需要,可为对话框选择显示菜单资源。
控件的通用属性的含义如下:
·ID
指定控件的标识值,程序使用它装载控件资源和
选取控件窗口。
有该属性的控件。控件选中顺序可以任意指定。
·Group
用来指定一组控件(例如单选按钮),用户可以 用箭头键在组内的控件之间移动选择;在同一组 内的单选按钮具有互斥性,即只能选中一个单选 按钮。如果一个控件具有Group 属性,则这个控 件以及按Tab 顺序紧随其后的的所有控件都属于 同一组,直到另一个有Group 属性的控件为止。
·Caption 指定诸如静态文本、组框、按钮、复选框、单选 按钮等控件的显示标题。对于能发出通知消息的 控件,其标题与菜单项标题一样,紧跟字符& 之 后的字符在运行时具有下划线,可通过按《Alt + 下划线字符》替代点击该控件。
·Visible 指定控件被创建后是否可见。 ·Disable 指定控件被创建后是处于允许还是被禁止使用。 ·Tab stop 对话框运行时,允许用户使用Tab 键顺序选中具
第五章 MFC 与对话框编程
5.1 对话框的基本原理
对话框是 Windows 应用程序 GUI 界面的一个重要组成部分, 它的主要功能: ·接收用户的输入(数据和操作、控制命令); ·输出用户关心的状态信息(操作的结果数据和状态)。
在对话框中,可以放置各种必要的控件,所有与用户的交互 操作都是通过这些控件实现的。 在 MFC 中,对话框的基本属性和行为由 CDialog 类描述,该 类的基类为 CWnd,因此,它继承了窗口类的所有属性和功能, 并且增加了交互操作所需要的数据交换特性。放置在对话框中 的各类控件,MFC 都有相应的类来描述,所有控件类的基类都 是 CWnd。 CDialog 类和所有控件类的派生层次结构如下:
5.2 创建模态对话框
创建一个名为“Register” SDI 应用程序,用于人员信息的注册 登记。该应用程序项目除视图的基类选择 CEditView 外,其他均 接受缺省选择。
5.2.1 创建对话框模板资源
为项目添加一个对话框模板(缺省命名为 IDD_DIALOG1)。 从控件选择面板上选择所需要的控件,将它放置到对话框模板 中你所希望的设计位置上。
对话框和对话框中的每个控件都可以通过“属性”对话框设 置
它们的属性和风格。选中对话框或某个控件,点击鼠标右键便
选择菜单项 Properties,便弹出选中对话框或控件的属性操作对 话框:
操作选择标签的个数和类型随着选中的对象(对话框或不同控 件)的不同而不同,但其中最右边的两个按钮和第一项标签是 相同的。
5.2.4 对话框的初始化
对话框初始化是在对话框类构造函数和对话框窗口初始化成 员函数 OnInitDialog 中完成的。 ·构造函数只完成数据成员的初始化,因为此时对话框类对象
正在创建中,而对话框窗口还未创建,窗口句柄无效。如果 需要初始化的数据对象是通过 ClassWizard 的 Member Variables 页添加的,则构造函数中数据对象的初始化代码将会由 ClassWizard 自动添加(当然可以根据需要修改这些代码)。 例如:
在对话框中选中要添加数据对象的控件 ID,双击被选项或点击 <Add Variable…> 按钮,弹出“Add Member Variable”对话框:
在该对话框中可以确定你所要添加的数据对象的种据对象命名(推荐命名规
则:m_+ 数据对象类型缩写 + 数据对象含义,例如 m_nWork)。
对话框和放置在其中的控件的创建,MFC 应用程序是从两个 方面实现的: ·对话框模板资源:描述对话框本身和各个控件的类型、外观
属性和控件在对话框中的分布信息。使用资源编辑器绘制模 板,并将相关的信息保存在资源文件(扩展名为“.rc”)中。 ·对话框类:封装对话框的属性和操作功能。保存在相应的定 义和实现文件中。 注意,与所有 CWnd 及其派生类对象一样,对话框类对象必须 与对话框模板所描述的 Windows 窗口相关联后,所有施加于对 话框的操作才是合法的。
数据对象名
m_nAge m_strIncome m_ctrlIncome m_strKind m_bMarried m_strName m_nSex m_strUnit m_nWork
在 Visual C++ .NET 中,是通过在对话框模板中,为每个需要添加 对象成员的方法实现的。具体的添加方法如下图所示:
对话框的设计步骤一般是先设计对话框模板,然后定义与对 话框模板资源相关联的对话框类。
对话框的使用分为模态对话框和非模态对话框两种: ·模态对话框:对话框打开时,用户只能在对话框中进行交互
操作,只有对话框关闭后,才能进行其他用户界面的操作。 ·非模态对话框:打开对话框进行操作的同时,仍然可以进行
其他用户界面的交互操作。
CRegisterDialog::CRegisterDialog(CWnd* pParent /*=NULL*/) : CDialog(CRegisterDialog::IDD, pParent) {
//{{AFX_DATA_INIT(CRegisterDialog) m_nAge = 0; m_strIncome = _T(""); m_strKind = _T(""); m_bMarried = FALSE; m_strName = _T(""); m_nSex = -1; m_strUnit = _T(""); m_nWork = -1; //}}AFX_DATA_INIT }
控件类型
数值类对象类型
文本框 CEdit
CString, int, UINT, long, DWORD, float, double, short,
BOOL, COleDateTime, COleCurrency(输入输出的不同类 型内容)
普通复选框 CButton BOOL(非零:选择,零:不选择)
5.2.2 对话框类的创建
使用 ClassWizard 创建与对话框模板资源 IDD_REGISTER 相关 联的对话框类 CRegisterDialog,其基类为 CDialog。
5.2.3 为对话框类加入成员变量
对话框的主要功能就是要完成数据信息的输入输出,用户通 过控件输入的数据信息需要存放在相应的数据对象中,才能被 程序读取使用;程序通过控件输出的数据信息也需要先存储到 相应数据对象中,才能被送到对应的控件显示。
下拉式组合列表框 CString (空:无列表项选中、非空:选中的列表项) 或
CComboBox
int (-1: 未选中, 0: 选中列表第一项, 1: 选中列表第二项…)
为控件定义哪一类数据对象,或是两类数据对象都定义将根 据控件在对话框类中的使用情况而定。具体的添加方法: 在 Visual C++ 6.0 中,使用 ClassWizard 的《Member Variables》属 性页完成。添加方法如下:
本例中对话框的具体设计步骤如下: 1 修改对话框模板资源的标识为 IDD_REGISTER。 2 在对话框中添加控件
控件类型 控件标识 显示标题
其他属性
组框
默认
个人情况 默认
组框
默认
单位情况 默认
静态文本 默认
姓名
默认
文本框 复选框 静态文本 文本框 组框
IDC_NAME
IDC_MARRIED
默认
·OnInitDialog 虚函数是窗口消息 WM_INITDIALOG 的响应函数。 当对话框对象收到此消息时,对话框窗口已创建完成,对话 框窗口句柄已经有效,但对话框还没有被显示,对话框窗口 中的控件也已被创建。这意味着在重新定义的 OnInitDialog 中 可以添加一些影响对话框(包括控件)外观的初始化和对话 框构造函数无法完成的初始化工作。OnInitDialog 对对话框的 作用与 OnCreate 对 CMainFrame 对象的作用类似。本例中,首 先使用 ClassWizard 为 CRegisterDialog 添加对 WM_INITDIALOG 消息映射和处理函数 OnInitDialog(注意,在 Visual C++ .NET 中 是通过重载基类的虚函数 OnInitDialog 的方法完成的),然后 手工在 OnInitDialog 中加入对用于工资收入的列表框控件的初 始化代码如下:
1 按钮 :按下该按钮,使按钮变成 ,使得该属性对话框 保持可见(Keep Visible),直到释放该按钮或强制关闭对话框。 属性对话框的内容会随着当前选中对象的改变而变化。
2 按钮 :点击该按钮,将显示当前选中属性页面相关内容的 帮助信息。
3 通用标签
:提供对话框或所有控件的通用属性操作。
对话框的主要通用属性操作:
三态复选框 CButton int(0: 未选中、1: 选中、2: 不确定)
滚动条 CScrollBar, 滑尺 CSliderCtrl
int(游标位置)
组中的确单选按钮
CButton
int (-1: 无选中, 0: 选中组中第一按钮, 1: 组中第二个…)
列表框 CListCtrl CString (空:无列表项选中、非空:选中的列表项)
婚否
IDC_AGE
默认
性别
默认 默认 默认 默认 默认
单选按钮 IDC_SEX

单选按钮 默认

Group、Tab stop 默认
控件类型 控件标识 显示标题
其他属性
组框
默认
就业情况 默认
单选按钮 IDC_WORK 在职
Group、Tab stop
单选按钮 IDC_WORK1 下岗
默认
静态文本 默认
相关文档
最新文档