友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
VC语言6.0程序设计从入门到精通-第14部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
该函数允许或禁用“应用”(Apply )按钮。其原型如下:
void SetModified(
BOOL bChanged = TRUE
);
o bChanged 参数:值为 TRUE 时“应用”按钮可用,为 FALSE 时禁用该按钮。
(5 )可重载的消息处理函数
为了响应属性页对话框的按钮消息和页面切换消息,CPropertyPage 类中增加了一系列消
息处理函数。重载这些函数就可以对属性页对话框中用户的操作进行处理。这些消息处理函
数如表 4…1 所示。
表 4…1 属性页类的消息处理函数说明
消息处理函数 函数说明
OnApply 响应属性表的“应用”按钮被单击的消息
OnCancel 响应属性表的“取消”按钮被单击的消息
OnKillActive 响应该属性页从当前活动页被切换出去的消息,用于数据验证
OnQueryCancel 响应属性表的“取消”按钮被单击前发出的消息
OnReset 响应属性表的“重置”按钮被单击的消息
OnSetActive 响应该属性页切换为当前活动页的消息
OnWizardBack 响应属性表的“上一步”按钮被单击的消息,仅在向导对话框中有效
OnWizardFinish 响应属性表的“完成”按钮被单击的消息,仅在向导对话框中有效
OnWizardNext 响应属性表的“下一步”按钮被单击的消息,仅在向导对话框中有效
2 .CPropertySheet 类
CPropertySheet 类负责对属性表进行控制。该类完成的功能有装入或删除属性页、打开
属性页对话框,以及属性页对话框运行时切换属性页等功能。CPropertySheet 类是 CWnd 的
派生类,但也有类似于对话框的两种运行方式,即模态和非模态。下面介绍 CPropertySheet
类中与属性表操作相关的函数。
(1)构造函数
构造一个新的属性表类的对象,原型如下:
CPropertySheet( );
CPropertySheet(
UINT nIDCaption;
CWnd* pParentWnd = NULL;
UINT iSelectPage = 0
);
·79 ·
…………………………………………………………Page 89……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
CPropertySheet(
LPCTSTR pszCaption;
CWnd* pParentWnd = NULL;
UINT iSelectPage = 0
);
o nIDCaption 参数:给出标题的字符串的 ID 。
o pParentWnd 参数:给出对话框的父窗口,为 NULL 时,父窗口默认为程序主窗口。
o iSelectPage 参数:给出对话框打开时初始属性页的序号。
o pszCaption 参数:给出标题的字符串。
(2 )GetActiveIndex()函数
该函数返回当前活动的属性页的序号,原型如下:
int GetActiveIndex( ) const;
返回值就是当前活动的属性页的序号。
(3 )GetActivePage()函数
该函数返回当前活动的属性页对象,原型如下:
CPropertyPage* GetActivePage( ) const;
返回值为当前活动的属性页对象的指针。可以通过强制类型转换,将指针类型由
CPropertyPage 变为程序中自定义的属性页类。
(4 )GetPage()函数
该函数返回某个属性页对象,原型如下:
CPropertyPage* GetPage(
int nPage
) const;
o nPage 参数:表示所要获取的属性页的序号,从零开始。
o 返回值:属性页对象的指针。
(5 )GetPageCount()函数
该函数返回属性页的总数,原型如下:
int GetPageCount( ) const;
返回值为属性页的总数。
(6 )GetPageIndex()函数
该函数获取属性页在对话框中的序号,原型如下:
int GetPageIndex(
CPropertyPage* pPage
);
o pPage 参数:要获取序号的属性页对象的指针。
o 返回值:属性页对象对应的序号。
(7 )SetActivePage()函数
该函数设置某个属性页为当前活动的属性页,原型如下:
·80 ·
…………………………………………………………Page 90……………………………………………………………
第 4 章 对话框
BOOL SetActivePage(
int nPage
);
BOOL SetActivePage(
CPropertyPage* pPage
);
o nPage 参数:要设置为活动的属性页的序号。
o pPage 参数:要设置为活动的属性页的对象指针。
o 返回值:表示操作是否成功。
(8)SetTitle()函数
该函数设置属性表的标题,原型如下:
void SetTitle(
LPCTSTR lpszText;
UINT nStyle = 0
);
o lpszText 参数:新的标题字符串指针。
o nStyle 参数:设置标题的属性,只能为 0 或者 PSH_PROPTITLE 。取值为 0 时没有附
加属性;取值为 PSH_PROPTITLE 会在新的标题后面添加“属性”两个字,比如 lpszText
为“Text ”,则当 nStyle 为 PSH_PROPTITLE 时,真正的标题显示为“Text 属性”。
(9 )AddPage() 函数
该函数为属性表添加新的属性页,原型如下:
void AddPage(
CPropertyPage *pPage
);
pPage 参数为要添加的属性页对象的指针标题字符串。
(10)PressButton() 函数
该函数模拟单击属性表的某个按钮,原型如下:
void PressButton(
int nButton
);
nButton 参数给出要模拟单击的按钮,可以取下列值中的一个。
o PSBTN_BACK :选择“上一步”按钮。
o PSBTN_NEXT :选择“下一步”按钮。
o PSBTN_FINISH :选择“完成”按钮。
o PSBTN_OK :选择“确认”按钮。
o PSBTN_APPLYNOW :选择“应用”按钮。
o PSBTN_CANCEL :选择“取消”按钮。
o PSBTN_HELP :选择“帮助”按钮。
·81 ·
…………………………………………………………Page 91……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
(11)RemovePage() 函数
该函数为属性表删除已有的属性页,原型如下:
void RemovePage(
CPropertyPage *pPage
);
void RemovePage(
int nPage
);
o pPage 参数:要删除的属性页的对象指针。
o nPage 参数:要删除的属性页的序号。
(12)SetWizardButtons()函数
该函数进行设置向导对话框的典型按钮(比如前进、后退、完成等)。注意该函数必须
在调用 DoModal()时才能使用,因此一般在属性页中的 CPropertySheet::OnSetActive()函数中
调用。函数其原型为:
void SetWizardButtons(
DWORD dwFlags
);
dwFlags 参数设置向导按钮的属性,可以为以下值的组合:
o PSWIZB_BACK :显示“上一步”按钮,如果没有包含该值,“上一步”按钮被禁用。
o PSWIZB_NEXT :显示“下一步”按钮,如果没有包含该值,“下一步”按钮被禁用。
o PSWIZB _FINISH :显示“完成”按钮。
o PSWIZB _DISABLEFINISH :显示被禁用的“完成”按钮。
(13)SetWizardMode ()函数
该函数设置属性页对话框为向导对话框模式,应当在调用 DoModal() 函数之前调用该函
数。其原型为:
void SetWizardMode( );
(14)DoModal () 函数
该函数显示一个模态属性页对话框,其原型为:
virtual INT_PTR DoModal( );
返回值:返回对话框关闭的状态,对于一般属性页,返回值一般为 IDOK、IDCANCEL
或者 0 ;对于向导对话框返回值为 ID_WIZFINISH 或 IDCANCEL 。
4。4。2 向导对话框的创建步骤
向导对话框用于完成一系列设置步骤,每一步通过“上一步”和“下一步”按钮进行切
换。本节将在实例 Sample4_1 的基础上创建一个有 3 个步骤(包含 3 个属性页)的向导对话
框。
实例 4…4 :创建向导对话框实例。源代码在光盘中“04实例 4…4Sample4_1 ”目录下。
·82 ·
…………………………………………………………Page 92……………………………………………………………
第 4 章 对话框
1.创建属性页模板
创建向导对话框首先要创建属性页模板,步骤如下:
(1)打开实例 Sample4_1 的工程后,在 IDE 中依次选择菜单“Insert|Resource ”,打开“Insert
Resource ”对话框。在“Resource type ”属性列表框中选择 Dialog 选项,单击“New ”按钮,
创建一个默认 ID 为 IDD_DIALOG1 的新的对话框资源。
(2 )在 IDE 左侧工作区中单击“ResourceView ”选项卡,展开“Sample4_1 resources|Dialog”,
找到 IDD_DIALOG1 ,在其上单击鼠标右键,选择菜单“Properties ”,打开对话框资源属性设
置 对 话 框 。 在 “ ID 输 入 框 ” 中 输 入 IDD_TESTPAGE1 , 即 设 置 对 话 框 资 源 ID 为
IDD_TESTDPAGE1 ,回车关闭属性设置对话框并确认修改。
(3 )在 IDE 左侧“ResourceView ”选项卡中,双击刚刚修改过的 IDD_TESTPAGE1 ,打
开 IDD_TESTPAGE1 的对话框资源编辑器,在 IDE 右侧客户区的对话框上单击鼠标右键,选
择菜单项“Properties ”,打开该对话框的属性设置对话框。
(4 )在对话框的属性设置对话框中设置对话框的标题。单击“General ”选项卡,在“Caption ”
输入框中输入“测试页 1”。
(5 )仍在步骤 4 中对话框的属性设置对话框中,设置对话框的样式为属性页对话框的样
式。单击“Styles”选项卡,如图 4…22 所示。在“Style”下拉列表框中选择 Child,在“Border ”
下拉列表框中选择“Thin ”,选中“Title bar ”复选框,清除其他复选框的选项,如图 4…22 所
示。回车确认设置并关闭此对话框。
(6 )按照 4。1。2 节第 3 部分的讲解,删除 IDD_TESTPAGE1 中的“确认”(OK )按钮和
Cancel )按钮,并为 IDD_TESTPAGE1 添加合适的控件。完成控件的添加后,
“取消”(
IDD_TESTPAGE1 就是要创建的属性页对话框的第一个属性页模板。
图 4…22 属性页模板的风格设置
2 .为属性页添加属性页类
创建完属性页模板后,需要用 ClassWizard 为每个属性页添加 CPropertyPage 的派生类,
并添加相应的控件变量和消息处理函数,以及添加属性表按钮被单击的消息处理函数。其步
骤如下:
(1)在 IDE 主菜单栏中依次选择菜单“View|ClassWizard ”,或者在开发环境的界面下直
接使用快捷键 Ctrl+W,打开“ClassWizard ”对话框。同时它会检测到添加了新的对话框资源,
并打开“Adding a Class ”对话框,提示用户是否为新建的对话框添加一个对话框类。
(2 )在“Adding a Class ”对话框中,选中“Create a new class ”单选框,意思是要为对
话框资源创建一个新的类,单击“OK ”按钮确认后打开“New Class ”对话框。
(3 )在“New Class ”对话框中,ClassWizard 要为新添加的 IDD_TESTPAGE1 模板创建
·83 ·
…………………………………………………………Page 93……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
一个新的类。在“Name ”输入框中输入 CTestPage1 ,在“Base class ”下拉列表框中选择
CPropertyPage,如图 4…23 所示。单击“OK ”按钮关闭“New Class ”对话框,返回“ClassWizard ”
对话框,就可以看见“ClassWizard ”对话框中的“Class name ”下拉列表框中已经自动选择
了新创建的类 CTestPage1 。
图 4…23 创建属性页类的对话框
(4 )依照 4。1。3 第 2 到第 4 部分的讲解,为 CTestPage1 添加合适的控件变量和控件消息
处理函数。
(5 )为 CTestPage1 添加合适的属性页消息处理函数 。在已经打开的“ClassWizard ”对话
框中,单击“Message Maps ”选项卡,在“Class name ”下拉列表框中选择 CTestPage1,在
“Object IDs ”列表框中选择 CTestPage1,在“Messages ”列表框中选择表 4…1 中出现的合适
的消息处理函数,单击“Add Function ”按钮,就可以添加对应的消息处理函数。
在实例 Sample4_1 中,由于 CTestPage1 作为向导对话框的第一个属性页,因此显示测试
页 1 时向导对话框中只有“下一个”(Next )按钮。这就需要为 CTestPage1 添加 OnSetActive()
函数。在“Messages ”列表框中选择 OnSetActive,单击“Add Function ”按钮添加该函数。
再 单 击 “ Edit Function ” 按 钮 , 关 闭 “ ClassWizard ” 对 话 框 , IDE 自 动 定 位 到
CTestPage1::OnSetActive()函数,修改函数代码如下:
BOOL CTestPage1::OnSetActive()
{
// TODO: Add your specialized code here and/or call the base class
// 获得父窗口,即属性表 CPropertySheet 类
CPropertySheet* psheet = (CPropertySheet*) GetParent();
// 设置属性表只有“下一步”按钮
psheet…》SetWizardButtons(PSWIZB_NEXT);
return CPropertyPage::OnSetActive();
}
经过上述步骤,就为属性页 IDD_TESTPAGE1 添加了对应的属性页类 CTestPage1 。
·84 ·
…………………………………………………………Page 94……………………………………………………………
第 4 章 对话框
3 .创建其余的属性页和对应的属性页类
为实例 Sample4_1 创建其余的属性页,包括第二页 IDD_TESTPAGE2 和最后一页
IDD_TESTPAGE3 ,对应的属性页类为 CTestPage2 和 CTestPage3 。步骤如下:
(1)参照第 1 部分,为实例 Sample4_1 创建第二个属性页模板 IDD_TESTPAGE2 。
(2 )参照第 2 部分,为 IDD_TESTPAGE2 创建属性页类 CTestPage2,为 CTestPage2 添加
合适的控件变量和控件消息处理函数,注意在 CTestPage2 中不用添加 OnSetActive()消息处理
函数。
如果用户想为向导对话框添加更多的中间步骤,可以重复步骤 1 和 2 。
(3 )参照第 1 部分,为实例 Sample4_1 创建最后一个属性页模板 IDD_TESTPAGE3 。
(4 )参照第 2 部分,为 IDD_TESTPAGE3 创建属性页类 CTestPage3,为 CTestPage3 添加
合适的控件变量和控件消息处理函数。注意在 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 ”菜单命
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!