友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
VC语言6.0程序设计从入门到精通-第20部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
return CPropertyPage::OnSetActive();
}
重 复 前 面 的 过 程 , 在 “ Messages ” 列 表 框 中 选 择 OnWizardFinish , 添 加
CTestPage3::OnWizardFinish()函数,使得完成向导对话框时提示用户,添加的函数代码如下:
BOOL CTestPage3::OnWizardFinish()
{
// TODO: Add your specialized code here and/or call the base class
MessageBox(〃您已经完成向导!〃);
return CPropertyPage::OnWizardFinish();
}
这样就完成了向导对话框的所有属性页模板和相应属性页类的创建。
4 .创建属性表类
创建完向导对话框的所有属性页类后,就可以为实例 Sample4_1 添加属性表 CPropertySheet
·85 ·
…………………………………………………………Page 95……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
类的派生类,用于操作向导对话框。其步骤如下:
(1)在 IDE 的主菜单中选择“View| ClassWizard ”菜单命令,或按快捷键 Ctrl+W 打开
ClassWizard 对话框。
(2 )在“ClassWizard ”对话框中,单击“Add Class ”按钮,在弹出的下拉菜单中选择“New ”
菜单项,打开“New Class ”对话框。
(3 )在“NewClass ”对话框中创建名为 CTestSheet 的属性表派生类。在“Class type ”下
拉列表框中选择 MFC Class ,在“Name ”输入框中输入 CTestSheet,在“Base class ”下拉列
表框中选择 CPropertySheet,如图 4…24 所示。单击“OK ”按钮退出“New Class ”对话框,
返回“ClassWizard ”对话框,可以看到“Class name ”下拉列表框中已经选择了新创建的
CTestSheet ”类。
“
图 4…24 添加 CProperySheet 类的派生类
(4 )为 CTestSheet 类添加每个属性页类的成员变量 。关闭“ClassWizard ”对话框,在 IDE
左侧工作区中单击“ClassView ”选项卡,展开 Sample4_1 classes 节点,在 CTestSheet 上单击
Add Member Variable ”菜单项,打开 Add Member Variable 对话框。在“Variable
鼠标右键,选择“
Type ”输入框中输入 CTestPage1,在“Variable Name ”输入框中输入 m_page1 ,单击“OK ”
按钮就可以为 CTestSheet 类添加第一个属性页类 CTestPage1 的 m_page1 成员变量。重复这一
过程,为 CTestSheet 添加成员变量 CTestPage2 类的 m_page2 和 CTestPage3 类的 m_page3 。
(5 )最后在属性表类 CTestSheet 的构造函数中将所有属性页添加到属性表中。在 IDE 左
侧工作区中单击“ ClassView ”选项卡,展开 Sample4_1 classes|CTestSheet 节点,双击
“CTestSheet(LPCTSTR pszCaption; CWnd* pParentWnd = NULL; UINT iSelectPage = 0) ”,即可
编辑 CTestSheet 的构造函数,修改函数代码如下:
CTestSheet::CTestSheet(LPCTSTR pszCaption; CWnd* pParentWnd; UINT iSelectPage)
:CPropertySheet(pszCaption; pParentWnd; iSelectPage)
{
AddPage(&m_page1);
AddPage(&m_page2);
AddPage(&m_page3);
}
·86 ·
…………………………………………………………Page 96……………………………………………………………
第 4 章 对话框
5 .打开向导对话框
在实例 Sample4_1 中添加一个菜单项打开前面创建的向导对话框,步骤如下:
(1)首先创建打开向导对话框的菜单项。
单击 IDE 左侧工作区的“ResourceView ”标签,展开Menu 节点,双击 IDR_SAMPLETYPE ,
打开“IDR_SAMPLETYPE ”菜单资源编辑界面。在 IDE 右侧客户区展开顶层“查看”菜单,
双击虚线框,打开添加一个新的菜单项的对话框。在“ID ”输入框中输入 ID_WIZARD,在
“Caption ”输入框中输入“打开向导对话框”,回车确认修改。
(2 )为新建的菜单项添加消息处理函数。
在 IDE 主菜单栏中依次选择菜单“View|ClassWizard ”,或者在开发环境的界面中直接使
用快捷键 Ctrl+W,打开“ClassWizard ”对话框。单击“Message Maps ”选项卡,在“Class name ”
下拉列表框中选择“CSample4_1View ”,在“Object IDs ”列表框中选择 ID_WIZARD ,在
“Messages ”列表框中选择 MAND,单击“Add Function ”按钮,在弹出的对话框中单击
OK ”按钮,就创建了名为 OnWizard 的菜单项消息处理函数。
“
(3 ) 单 击 “ Edit Function ” 按 钮 , 关 闭 “ ClassWizard ” 对 话 框 , IDE 定 位 到
CSample4_1View::OnWizard()函数,编辑 CSample4_1View::OnModalless()函数,代码如下:
void CSample4_1View::OnWizard()
{
// TODO: Add your mand handler code here
// 创建属性表对象
CTestSheet sheet(〃〃);
// 设置属性对话框为向导对话框
sheet。SetWizardMode();
// 打开模态向导对话框
sheet。DoModal();
}
至此,创建向导对话框的所有步骤已经完成,编译运行 Sample4_1,选择菜单“查看|打
开向导对话框 ”,就可以打开创建的向导对话框,图 4…25 所示为在向导对话框最后一步单击
“完成”按钮后的运行结果。
图 4…25 向导对话框的最后一步
·87 ·
…………………………………………………………Page 97……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
4。4。3 一般属性页对话框的创建步骤
一般属性页对话框提供了选项卡的功能,为属性进行合理的分类。本节将介绍这类属性
对话框的创建步骤。
(1)创建属性页模板。
(2 )为各个属性页添加属性页类。
(3 )创建属性表类。
以上 3 个步骤都与向导对话框的创建步骤相同。惟一的区别是不用添加 4。4。2 节中提到
的 OnSetActive()和 OnWizardFinish()函数。
(4 )打开属性页对话框。
打开一般属性对话框与打开向导对话框的方法类似,只需要把打开前的 SetWizardMode()
函数去掉即可。例如在 Sample4_1 中打开一个为 CTestSheet 类的一般属性页对话框,首先根
据 4。4。2 节的第 4 部分,为 Sample4_1 创建 ID 为 ID_PROPERTIES 的“查看|打开一般属性页
对话框”菜单项,并为之在 CSample4_1View 类中添加消息处理函数 OnProperties() 。添加如
下代码就可以直接打开一般属性页对话框:
void CSample4_1View::OnProperties()
{
// TODO: Add your mand handler code here
// 创建属性表对象
CTestSheet sheet(〃〃);
// 打开模态一般属性页对话框
sheet。DoModal();
}
技巧:开发大型程序时有可能会创建许多类。这种情况下可以创建目录优化工作区。例如在
Sample4_1 中可以将 CTestSheet 及其包含的属性页类 CTestPage1、CTestPage2 和 CTestPage3
归在同一个目录下。具体操作为如下:
(1)单击在 IDE 左侧工作区窗口的“ClassView ”选项卡。
(2 )在“ClassView ”中的 Sample4_1 classes 节点上单击鼠标右键,选择“New Folder ”菜
单项,打开“New Folder ”对话框。
(3 )在“New Folder ”对话框中的“Name of the new folder ”输入框中输入 TestSheet,单击
“OK ”按钮退出对话框,就可以看到“ClassView ”中的 Sample4_1 classes 节点多了一个
TestSheet 的目录。
(4 )在“ClassView ”中将 CtestSheet、CTestPage1、CTestPage2 和 CTestPage3 拖至 TestSheet
目录就可以完成归类。
4。5 通用对话框
在 Windows 系统中提供了一些通用对话框,如打印设置对话框、页面设置对话框、查找
·88 ·
…………………………………………………………Page 98……………………………………………………………
第 4 章 对话框
对话框、文件对话框、字体对话框和颜色对话框等 。这些是 Windows 系统中出现频率很大的
对话框,将它们定义为通用对话框可以极大地减轻程序的复杂度 。同时,MFC 已经用类封装
了这些通用对话框。一般来讲,要使用通用对话框,不需要派生新的类,因为 MFC 提供的
基类已经提供了常用的功能。而且在对话框结束后,可以通过成员函数得到用户在对话框中
的选择。
本节用一个包含各种通用对话框的例程来分别介绍 Windows 系统提供的通用对话框的
编程方法。
实例 4…5 :创建通用对话框实例。源代码在光盘中“04实例 4…5GridDemo ”目录下。
GridDemo,是一个表格编辑器。该表格编辑器提供一个固定大小的自绘表格,用户可以
新建、打开和保存表格。同时该程序还提供了一些基本的编辑功能,如查找表格中出现的字
符串、设置表格中文本的字体和颜色 。最后该表格还可以调整打印效果,并在打印机中输出。
这些功能都是用通用对话框进行设置的。
首先介绍一下 GridDemo 的基本框架。GridDemo 是一个单文档应用程序,类和主要成员
变量的关系如图 4…26 所示。
o CMainFrame :GridDemo 的框架类。
o CGridDemoDocument :GridDemo 的文档类,用于存取文档并更新相应的视图。
o m_CellTextArray :CGridDemoDocument 的成员变量,用于保存表格中的文本,是一个
一维的字符串数组,通过行数 m_nRow 和列数 m_nCol 映射到二维的表格中。
o CGridDemoView :GridDemo 的视图类,用于显示和修改表格。表格的每个单元格在
CGridDemoView 中以输入框的控件形式出现。这个表格由一个输入框控件数组
m_CellArray 组成,并且由这个控件数组进行绘制。
o m_CellArray :CGridDemoView 的成员变量,用于显示和修改表格,是一个一维的
CMyEdit 类型数组,数组下标与文档类中的 m_CellTextArray 一致。
o CMyEdit :重载的 CEdit 类,用于更改输入框文字颜色和字体。
图 4…26 GridDemo 的组织关系图
4。5。1 打印设置对话框
打印设置对话框如图 4…27 所示,这个对话框提供了 Windows 标准打印设置,包括选择
打印机、打印范围和打印份数等。这些选项一般在打印输出前进行设置。
·89 ·
…………………………………………………………Page 99……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
图 4…27 打印设置对话框
CPrintDialog 封装了打印设置对话框的操作 。在 GridDemo 的 GridDemoView。cpp 文件中,
CGridDemoView::OnFilePrint()函数用于创建打印设置对话框,步骤如下:
(1)创建 CGridDemoView::OnFilePrint()函数。
CGridDemoView::OnFilePrint()是 GridDemo 例程视图类“文件|打印”菜单项的消息处理
函数。在用 IDE 的 AppWizard 创建 SDI 应用程序的过程中,默认创建了“文件|打印”菜单
项,用户只需要依照第 3 章的讲解,在 CGridDemoView 类中为该菜单项 ON_FILE_PRINT
添加消息处理函数,就可以创建 CGridDemoView::OnFilePrint()函数。
(2 )创建 CPrintDialog 对象。CGridDemoView::OnFilePrint()函数创建 CPrintDialog 对象
dlg,代码如下:
//打开一个打印设置对话框
CPrintDialog dlg(FALSE;PD_NOSELECTION|PD_NOPAGENUMS;this);
(3 ) 打 开 CPrintDialog 对 话 框 。 这 通 过 调 用 CPrintDialog::DoModal() 函 数 实 现 ,
CGridDemoView::OnFilePrint()函数中的代码如下:
if(dlg。DoModal() == IDOK)
上面的 if 语句打开打印设置对话框,并判断如果用户是否单击“确定”按钮,如果是,
DoModal() 函数返回 IDOK ,进行 if 语句块中的打印操作,反之则不进行打印。
(4 )将从打印设置对话框获得的打印设备上下文附加到打印输出时使用的设备上下文对
象。CGridDemoView::OnFilePrint() 中这一步骤具体如下:
CDC dc;
dc。Attach(dlg
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!