对话框与通用控件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
// Call after initialization return CDialog::OnInitDialog();
}
将对话框与视图相连接
1.在Class Wizard中选择CExaView类。 2.利用Class Wizard加入OnLButtonDown成 员函数 3.为文件exaView.cpp中的OnLButtonDown 函数编写代码。
Class Wizard和对话框类
1.从Developer Studio的View菜单中选择ClassWizard 此时,要保证新创建的IDD_DIALOG1对话框仍然在对 话框编辑器中被选中。 2.加入CExaDialog类。( ClassWizard 会询问是否加入 一个类) 3.加进CExaDialog的变量。( ClassWizard member Variables 标签,选择类名为CExaDialog,添加的成员如 下图)
Windows标准控件
控件 按钮 MFC类 Cbutton 描述 用来产生某种行为的按钮, 以及复选框、单选钮和组框
列表框
编辑框 组合框
CListBox
CEdit CComboBox
包括一系列字符串的列表
用于键入文本 编辑框和列表框的组合
滚动条
静态文本 动画 标题头
CScrollBar
Cstatic CAnimateCtrl CHeaderCtrl
用于显示状态信息的窗口,同
MFC类CStatusBar类似
选项卡
CTabCtrl
在选项卡对话框或属性页中
提供具有类似笔记本中使用的分隔标签的外观的选项卡
工具条 CToolBarCtrl 具有一系列命令生成按钮的 窗口,同MFC类CToolBar类似
工具提示
CToolTipCtrl
一个小的弹出式窗口,用于提供
IDC_LIFE
IDC_LOYAL IDC_MED IDC_NAME
m_bInsLife
m_nLoyal m_bInsMed m_strName
BOOL
int BOOL Cstring
IDC_RELY
IDC_SKILL IDC_SSN
m_nRely
m_strSkill m_nSsn
int
Cstring int
为对话框提供控件形式的滚动条
常用于为其它控件提供标签 显示连续的AVI视频剪辑 位于某一行文本之上的按钮, 可用来控制显示文件的宽度
热键
CHotKeyCtrl
用于通过按下某一组合键
来很快的执行某些常用的操作
图象列表 列表 进度
CImageList CListCtrl
一系列图象 显示文本及其图标列表的窗口
4.利用Class Wizard对对话框中的按钮和其 他可以产生事件的控件加入相应的消息控 制函数。 5.对一些特殊的控件初始化函数(如 OnInitDialog)及消息控制函数进行编辑。 6.对视图类的代码进行编辑,以便对话框能 够被激活。
包罗万象的对话框
我们不准备在一些小的对话框上浪费时间, 而是将直接创建一个几乎包含了各种类 型的控件的庞大对话框。有了Developer Studio中的对话框编辑器的帮助,这一工 作就容易得多了!
加进CExaDialog的变量
控件ID
IDC_BIO IDC_CAT
数据成员
m_strBio m_nCat
类型
Cstring int
IDC_DEPT
IDC_DIS IDC_EDUC IDC_LANG
m_strDept
m_bInsDis m_strEduc m_strLang
Cstring
BOOL Cstring Cstring
对工具条按钮或其它控件功能的简单描述 树 CTreeCtrl 用于显示一系列的项的继承结构
模式对话框的编程
向现存项目中添加模式对话框的步骤: 1.用对话框编辑器创建包含各种控件的对话框资 源。对话框编辑器会对项目的资源文件进行更 新,使之包含新的对话框资源,并且该项目的 resource.h文件也会被更新,以便能够包含新 的#define常量 2.利用Class Wizard来创建Cdialog的派生类,并 将它和第一步所创建的资源相连接。Class Wizard会自动在Developer Studio的项目中加 入相应的代码和头文件。 3.利用Class wizard 向对话框类中加入数据成员、 交换函数和确认函数。
int ret = dlg.DoModal(); //关键 TRACE("DoModal return = %d\n", ret); TRACE("name = %s, ssn = %d, cat = %d\n", dlg.m_strName, dlg.m_nSsn, dlg.m_nCat); TRACE("dept = %s, skill = %s, lang = %s, educ = %s\n", dlg.m_strDept, dlg.m_strSkill, dlg.m_strLang, dlg.m_strEduc); TRACE("life = %d, dis = %d, med = %d, bio = %s\n", dlg.m_bInsLife, dlg.m_bInsDis, dlg.m_bInsMed, dlg.m_strBio); TRACE("loyalty = %d, reliability = %d\n", dlg.m_nLoyal, dlg.m_nRely); }
资Leabharlann Baidu和控件
对话框包含了一些被称为控件的元素,对话框控件包括编辑控 件(既文本框)、按钮、列表框、组合框、静态文本(既标 签)、树状视图、进度指示器和滑块等等,而Windows正是通 过特殊的组及选项卡逻辑来管理这些控件的,这极大地减轻了 我们的编程负担。这些对话框控件既可以通过CWnd的指针来 引用(因为它们本身实际上就是窗口),也可以通过资源文件 中所制定的索引值(和#define常量相关联)来引用。控件通 过向上级对话框发送消息来响应用户的动作,如输入了正文或 按下了鼠标键等。
4.向文件exaView.cpp中的虚函数OnDraw 中加入代码。
void CEx06aView::OnDraw(CDC* pDC) { pDC->TextOut(0, 0, "Press the left mouse button here."); }
5.在exaView.cpp文件中加入对对话框类的 包含语句。
创建对话框资源
控件说明
Name字段的静态文本控件 Name编辑控件 SS Nbr(社会安全号码)编辑控件 Bio(简历)编辑控件 Category分组框 Hourly和Salary单选按钮。 Insurance分组框
Life,Disability和Medical复选框 Skill组合框 Educ(教育程度)组合框 Dept(部门)列表框 Lang(语言)组合框 Loyalty和Reliability滚动条 OK,Cancel和Special按钮 Any图标
Cdialog::DoModal CEx06aDialog::OnInitDialog …其他初始化… Cdialog:: OnInitDialog CWnd::UpdateData(FLASE) CEx06aDialog::DoDataExchange 用户输入数据… 用户单击OK 按钮 CEx06aDialog::OnOK …其他的确认处理… Dialog::OnOK CWnd::UpdateData(TRUE) CEx06aDialog::DoDataExchange CEx06aDialog::EndDialog(IDOK)
void CExaView::OnLButtonDown(UINT nFlags, CPoint point) { CEx06aDialog dlg; //建立对象 dlg.m_strName = "Shakespeare, Will"; dlg.m_nSsn = 307806636; dlg.m_nCat = 1; // 0 = hourly, 1 = salary dlg.m_strBio = "This person is not a well-motivated tech writer"; dlg.m_bInsLife = TRUE; dlg.m_bInsDis = FALSE; dlg.m_bInsMed = TRUE; dlg.m_strDept = "Documentation"; dlg.m_strSkill = "Writer"; dlg.m_strLang = "English"; dlg.m_strEduc = "College"; dlg.m_nLoyal = dlg.m_nRely = 50;
利用Class Wizard加入OnInitDialog 消息控制函数。
BOOL CEx06aDialog::OnInitDialog() { // Be careful to call CDialog::OnInitDialog // only once in this function CListBox* pLB = (CListBox*) GetDlgItem(IDC_DEPT); pLB->InsertString(-1, "Documentation"); pLB->InsertString(-1, "Accounting"); pLB->InsertString(-1, "Human Relations"); pLB->InsertString(-1, "Security");
4.为Special按钮加入消息控件函数。 ( ClassWizard Message Maps 标签,选择 IDC_SPECIAL,在选择Message中的 BN_CLICKED消息,添加处理函数OnSpecial void CEx06aDialog::OnSpecial() { TRACE("CEx06aDialog::OnSpecial\n"); }
#include "exaView.h" #include "exaDialog.h"
6.编译和测试该应用程序。
深入理解EXA应用程序
当程序中调用了DoModal时,只有在用户关闭 了对话框后,控制才能返回到程序中。只有 理解了这点,才算理解了模式对话框。当我 们开始学习无模式对话框时,就会深切地体 会到模式对话框的程序设计是多么的简单, 不过当DoModal被调用时,实际上在“幕后” 将引起一系列的动作。我们将一些调用关系 总结如下:
对话框与通用控件
模式和无模式对话框 资源和控件 模式对话框的编程 包罗万象的对话框 Windows通用控件 示例程序 无模式对话框 CFormView类——另外一种 可供选择的无模式对话框 Windows通用对话框
模式和无模式对话框
Cdialog基类既支持模式对话框,也支持无模式对话框。 对于模式对话框,如Open File对话框,在该对话框被 关闭之前,用户将无法在同一个应用程序(更准确地 说,是在同一用户接口线程里)的其他地方进行工作; 而对于无模式对话框,在它仍然保留在屏幕上的同时, 用户还可以在应用程序的其他窗口中进行工作。 Microsoft Word 中的Find And Replace对话框就是无模 式对话框的一个很好的例子,在该对话框打开的同时, 我们仍然可以对文档进行编辑。
CProgressCtrl 用于在一较长操作中提示用户所完 成的进度
多格式文本编辑 CRichEditCtrl 提供可设置字符和段落格式的 文本编辑的窗口 滑块 旋转按钮 CSliderCtrl 包括一个有可选标记的滑块的窗口 提供一对可用于增减某个 值的箭头
CSpinButtonCtrl
状态条
CStatusBarCtrl
CScrollBar* pSB = (CScrollBar*) GetDlgItem(IDC_LOYAL); pSB->SetScrollRange(nMin, nMax); pSB = (CScrollBar*) GetDlgItem(IDC_RELY); pSB->SetScrollRange(nMin, nMax);
1 创建对话框资源
1.运行AppWizard来产生名为EXA的项目。 2.用标识符(ID)IDD_DIALOG1来创建一个新 的对话框。(insert 菜单,选择Resource,选择 新建一个对话框) 3.设置对话框的尺寸及标题。 4.设置对话框的风格。 5.设置对话框的附加风格。 6.加入对话框的控件。(如下页图) 7.检查对话框的Tab键顺序。 8.将资源文件存盘。