230 likes | 453 Views
大学Visual C++案例教程. 第五讲 对 话 框 西安交通大学 计算机教学实验中心 http://ctec.xjtu.edu.cn. 教学目标. 对话框的概念和用法 各种常用控件的使用方法. 授课内容. 5.1 对话框 5.2 控件 5.3 对话框的初始化 5.4 对话框的数据交换和数据检验机制 5.5 公用对话框. 5.1 对话框. 对话框(一般概念) 是一种特殊的窗口 主要功能是输出信息和接收用户的输入 对话框内包含一些 控件 ,依靠控件与用户进行交流信息 对话框分为 模态对话框 和 非模态对话框 两种 对话框(从 MFC 角度)
E N D
大学Visual C++案例教程 第五讲 对 话 框西安交通大学计算机教学实验中心http://ctec.xjtu.edu.cn
教学目标 • 对话框的概念和用法 • 各种常用控件的使用方法
授课内容 • 5.1 对话框 • 5.2 控件 • 5.3 对话框的初始化 • 5.4 对话框的数据交换和数据检验机制 • 5.5 公用对话框
5.1 对话框 • 对话框(一般概念) • 是一种特殊的窗口 • 主要功能是输出信息和接收用户的输入 • 对话框内包含一些控件,依靠控件与用户进行交流信息 • 对话框分为模态对话框和非模态对话框两种 • 对话框(从MFC角度) • 对话框的功能被封装在CDialog类中,CDialog类是CWnd类的派生类 • 一个对话框由两部分组成: 对话框模板资源和对话框类
对 话 框 的 设 计 • 对话框模板的设计 • 向项目中添加对话框模板资源; • 编辑对话框模板资源,加入所需的控件; • 对话框类的设计 • 从CDialog类派生对话框类,加入与各控件对应的数据成员; • 在框架窗口类或视图类的菜单选项、鼠标事件或其他消息响应函数中添加对话框对象的应用代码。
模 态 对 话 框 • 在视图类或框架窗口类的消息响应函数中说明一个对话框类的对象; • 调用CDialog::DoModal()成员函数 • 根据其返回值是IDOK还是IDCANCEL来判断用户是确定还是取消了对对话框的操作
【例】添加一个自己的版权对话框并使用鼠标右键弹出【例】添加一个自己的版权对话框并使用鼠标右键弹出 1. 对话框模板的设计
2. 对话框类的设计 • 创建对应的对话框类: 使用ClassWizard,会自动弹出窗口询问创建对应于此对话框模板资源的对话框类,命名为CMyDlg • 在视图类的实现文件添加对话框类的头文件: #include "MyDlg.h" • 添加响应鼠标右键消息的代码: void CMyView::OnRButtonDown(UINT nFlags, CPoint point) { CMyDlg dlg; dlg.DoModal(); CView::OnRButtonDown(nFlags, point); }
5.2 控件(Control) • 对话框与控件是密不可分的 • 控件 • 是Windows提供的独立小部件(现成的程序组件),可以独立运行以完成一定的功能。 • 在对话框与用户的交互过程担任主要角色 • 每个控件均有一个标识符(ID) • 控件实际上也是一个窗口,对应一个CWnd派生类的对象 • windows提供了大量的控件: • 静态控件(Static Text) • 编辑控件(Edit Box) • 组框控件(Group Box) • 图片控件(Picture) • 。。。。。。
与CStatic类型对应的控件 • 静态文本(Static Text)控件: • 用于显示字符串,不接受输入信息。 • 图片(Picture)控件: • 用于显示位图、图标、方框等,不接受输入信息。 • 组框(Group Box)控件: • 显示一个文本字符串和一个方框,通常用于组合一组相关控件。
静态文本控件 • 用途是在对话框上显示一段文字; • 静态文本控件的文字和属性均在编辑对话框模板资源时确定,程序运行中一般无法改变。 • 它的ID并不重要,因为无需编程
与CButton类型对应的控件 • 编辑(Edit Box)控件: • 可用于单行或多行文本编辑,相当于一个小型文本编辑器。 • 按钮(Button)控件: • 用于响应用户的鼠标按键等操作,触发相应的事件。 • 检查框(Check Box)控件: • 用作选择标记,有选中、不选中和不确定等状态。 • 单选按钮(Radio Button)控件: • 用来作多项选择。
编辑控件 • 编辑控件功能十分全面,本身就是一个小型的文本编辑器。 • 编辑控件的作用是接受用户输入的字符串信息。 • 它的ID很重要,因为要实现数据交换
与CListBox类型对应的控件 • 列表框(List Box)控件: • 显示一个文字列表,用户可从表中选择一项或多项 • 列表框中的文字列表通常在对话框类的InitDialog()成员函数中给出
与CCombo类型对应的控件 • 组合框(Combo Box): • 是编辑控件和列表框的组合 • 组合框中列表的内容可在设置时用Data选项卡输入。
主要的对话框管理函数 • CWnd类中管理对话框控件的成员函数: • GetDlgItem() • 返回一个指向一给定控件的指针; • GetDlgItemText() • 获得在一个控件内显示的正文; • SetDlgItemText() • 设置一个控件显示的正文。
5.3 对话框的初始化 • 构造函数 • 初始化对话框的数据成员 • OnInitDialog()函数 • 初始化对话框外观
5.4 对话框的数据交换和数据检验机制 • 控件 数据成员 • 数据交换(DDX) • 数据检验机制(DDV) • DDX和DDV的实现: • 重载CDialog::DoDataExchange()函数 virtual void DoDataExchange (CDataExchange* pDX ); • 加入数据交换函数 • 加入数据检验函数 理解概念。代码已自动生成,无需改动!!!
【例】输入数据的图形显示---【案例26】 公司产量图示程序--- 用户用鼠标左键点击窗口客户区后会弹出对话框,输入坐标后可在客户区显示。 • 编程步骤: • 建立对话框资源 • 对话框的外观和属性设置 • 控件的外观和属性设置 • 建立对话框类 • DDX、DDV • 在文档类中添加代码 • 变量申明和初始化 • 在视图类中添加代码 • 添加包含对话框的申明 • 建立鼠标左键消息响应 • OnDraw函数显示数据
模态对话框编程步骤总结 • 使用对话框编辑器建立对话框模板资源并加入所需的控件。 • 使用ClassWizard建立相应的对话框类,该类从CDialog继承并且和步骤1所建立的对话框模板资源相关联。 • 使用ClassWizard给对话框类添加数据成员,添加控件和数据成员的数据交换功能以及数据校验。 • 使用ClassWizard给对话框的按钮和其它产生事件的控件添加消息处理函数。 • 为特定的控件初始化(在 OnInitDialog中)和消息处理函数编写代码。 • 在视图类中编写代码激活对话框。代码中包含对对话框类的成员函数DoModal的调用。当用户从对话框窗口退出后, DoModal才返回。
【案例30】人事管理系统 • 为某公司设计一个人事管理系统, • 其基本功能为输入、编辑、查看和保存公司的人事档案。 • 职工人事档案包括姓名、性别、年龄、婚姻状况、所在部门和职务等。 • 编程步骤: • 建立对话框资源 • 建立对话框类 • 建立菜单资源 • 在文档类中添加代码?(未涉及到序列化) • 在视图类中添加代码
5.5 公用对话框 • 颜色选择对话框: CColorDialog 例:选择菜单“颜色设置”可调用颜色设置公用对话框设置泡泡的颜色 void CMyDlg::OnColor() { m_colorCurrent = RGB(0, 0, 255); CColorDialog dlg(m_colorCurrent); if(dlg.DoModal() == IDOK) m_colorCurrent = dlg.GetColor(); } • 字体选择对话框: CFontDialog
结 束 语 学好程序设计语言的唯一途径是 你的编程能力与你在计算机上投入的时间成 上机练习 正比