按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
合适的控件变量和控件消息处理函数。注意在 CTestPage3 中需要添加 OnSetActive()和
OnWizardFinish()消息处理函数。
添加 CTestPage3::OnSetActive() 函数,使得向导对话框进行到最后一页时只有“完成”
(
Finish )按钮。在已经打开的 ClassWizard 对话框中,单击“Message Maps ”选项卡,在“Class
name ”下拉列表框中选择 CTestPage1,在“Object IDs ”列表框中选择 CTestPage3,在“Messages ”
列表框中选择 OnSetActive,单击“Add Function ”按钮添加该函数。再单击“Edit Function ”
按钮,关闭“ClassWizard ”对话框,IDE 自动定位到 CTestPage3::OnSetActive()函数,修改函
数代码如下:
BOOL CTestPage3::OnSetActive()
{
// TODO: Add your specialized code here and/or call the base class
CPropertySheet* psheet = (CPropertySheet*) GetParent();
//设置属性表只有“完成”按钮
psheet…》SetFinishText(〃完成〃);
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、CTestPa