第 20 章
默认为指定对
话框的标题。
枫叶文学网www.fywxw.com
第4 章 对话框
·79·
? lpszTemplate 参数:给出属xìng页对话框资源的名称字符串。
(3)CancelToClose()函数
在模态对话框中,当一个不可恢复的过程完毕后,调用该函数将“确定”(OK)按钮改
变为“关闭”(Close)按钮,同时禁用“取消”(Cancel)按钮。其原型如下:
void CancelToClose( );
(4)SetModified()函数
该函数允许或禁用“应用”(Apply)按钮。其原型如下:
void SetModified(
BOOL bChanged = TRUE
);
? bChanged 参数:值为TRUE 时“应用”按钮可用,为FALSE 时禁用该按钮。
(5)可重载的消息处理函数
为了响应属xìng页对话框的按钮消息和页面切换消息,CPropertyPage 类中增加了一系列消
息处理函数。重载这些函数就可以对属xìng页对话框中用户的cāo作进行处理。这些消息处理函
数如表4-1 所示。
表4-1 属xìng页类的消息处理函数说明
消息处理函数 函数说明
OnApply 响应属xìng表的“应用”按钮被单击的消息
OnCancel 响应属xìng表的“取消”按钮被单击的消息
OnKillActive 响应该属xìng页从当前活动页被切换出去的消息,用于数据验证
OnQueryCancel 响应属xìng表的“取消”按钮被单击前发出的消息
OnReset 响应属xìng表的“重置”按钮被单击的消息
OnSetActive 响应该属xìng页切换为当前活动页的消息
OnWizardBack 响应属xìng表的“上一步”按钮被单击的消息,仅在向导对话框中有效
OnWizardFinish 响应属xìng表的“完成”按钮被单击的消息,仅在向导对话框中有效
OnWizardNext 响应属xìng表的“下一步”按钮被单击的消息,仅在向导对话框中有效
2.CPropertySheet 类
CPropertySheet 类负责对属xìng表进行控制。该类完成的功能有装入或删除属xìng页、打开
属xìng页对话框,以及属xìng页对话框运行时切换属xìng页等功能。CPropertySheet 类是CWnd 的
派生类,但也有类似于对话框的两种运行方式,即模态和非模态。下面介绍CPropertySheet
类中与属xìng表cāo作相关的函数。
(1)构造函数
构造一个新的属xìng表类的对象,原型如下:
CPropertySheet( );
CPropertySheet(
UINT nIDCaption,
CWnd* pParentWnd = NULL,
UINT iSelectPage = 0
);
枫叶文学网www.fywxw.com
Visual C++ 6.0 程序设计从入门到精通
·80·
CPropertySheet(
LPCTSTR pszCaption,
CWnd* pParentWnd = NULL,
UINT iSelectPage = 0
);
? nIDCaption 参数:给出标题的字符串的ID。
? pParentWnd 参数:给出对话框的父窗口,为NULL 时,父窗口默认为程序主窗口。
? iSelectPage 参数:给出对话框打开时初始属xìng页的序号。
? pszCaption 参数:给出标题的字符串。
(2)GetActiveIndex()函数
该函数返回当前活动的属xìng页的序号,原型如下:
int GetActiveIndex( ) const;
返回值就是当前活动的属xìng页的序号。
(3)GetActivePage()函数
该函数返回当前活动的属xìng页对象,原型如下:
CPropertyPage* GetActivePage( ) const;
返回值为当前活动的属xìng页对象的指针。可以通过强制类型转换,将指针类型由
CPropertyPage 变为程序中自定义的属xìng页类。
(4)GetPage()函数
该函数返回某个属xìng页对象,原型如下:
CPropertyPage* GetPage(
int nPage
) const;
? nPage 参数:表示所要获取的属xìng页的序号,从零开始。
? 返回值:属xìng页对象的指针。
(5)GetPageCount()函数
该函数返回属xìng页的总数,原型如下:
int GetPageCount( ) const;
返回值为属xìng页的总数。
(6)GetPageIndex()函数
该函数获取属xìng页在对话框中的序号,原型如下:
int GetPageIndex(
CPropertyPage* pPage
);
? pPage 参数:要获取序号的属xìng页对象的指针。
? 返回值:属xìng页对象对应的序号。
(7)SetActivePage()函数
该函数设置某个属xìng页为当前活动的属xìng页,原型如下:
枫叶文学网www.fywxw.com
第4 章 对话框
·81·
BOOL SetActivePage(
int nPage
);
BOOL SetActivePage(
CPropertyPage* pPage
);
? nPage 参数:要设置为活动的属xìng页的序号。
? pPage 参数:要设置为活动的属xìng页的对象指针。
? 返回值:表示cāo作是否成功。
(8)SetTitle()函数
该函数设置属xìng表的标题,原型如下:
void SetTitle(
LPCTSTR lpszText,
UINT nStyle = 0
);
? lpszText 参数:新的标题字符串指针。
? nStyle 参数:设置标题的属xìng,只能为0 或者PSH_PROPTITLE。取值为0 时没有附
加属xìng;取值为PSH_PROPTITLE 会在新的标题后面添加“属xìng”两个字,比如lpszText
为“Text”,则当nStyle 为PSH_PROPTITLE 时,真正的标题显示为“Text 属xìng”。
(9)AddPage()函数
该函数为属xìng表添加新的属xìng页,原型如下:
void AddPage(
CPropertyPage *pPage
);
pPage 参数为要添加的属xìng页对象的指针标题字符串。
(10)PressButton()函数
该函数模拟单击属xìng表的某个按钮,原型如下:
void PressButton(
int nButton
);
nButton 参数给出要模拟单击的按钮,可以取下列值中的一个。
? PSBTN_BACK:选择“上一步”按钮。
? PSBTN_NEXT:选择“下一步”按钮。
? PSBTN_FINISH:选择“完成”按钮。
? PSBTN_OK:选择“确认”按钮。
? PSBTN_APPLYNOW:选择“应用”按钮。
? PSBTN_CANCEL:选择“取消”按钮。
? PSBTN_HELP:选择“帮助”按钮。
枫叶文学网www.fywxw.com
Visual C++ 6.0 程序设计从入门到精通
·82·
(11)RemovePage()函数
该函数为属xìng表删除已有的属xìng页,原型如下:
void RemovePage(
CPropertyPage *pPage
);
void RemovePage(
int nPage
);
? pPage 参数:要删除的属xìng页的对象指针。
? nPage 参数:要删除的属xìng页的序号。
(12)SetWizardButtons()函数
该函数进行设置向导对话框的典型按钮(比如前进、后退、完成等)。注意该函数必须
在调用DoModal()时才能使用,因此一般在属xìng页中的CPropertySheet::OnSetActive()函数中
调用。函数其原型为:
void SetWizardButtons(
DWORD dwFlags
);
dwFlags 参数设置向导按钮的属xìng,可以为以下值的组合:
? PSWIZB_BACK:显示“上一步”按钮,如果没有包含该值,“上一步”按钮被禁用。
? PSWIZB_NEXT:显示“下一步”按钮,如果没有包含该值,“下一步”按钮被禁用。
? PSWIZB _FINISH:显示“完成”按钮。
? PSWIZB _DISABLEFINISH:显示被禁用的“完成”按钮。
(13)SetWizardMode ()函数
该函数设置属xìng页对话框为向导对话框模式,应当在调用DoModal()函数之前调用该函
数。其原型为:
void SetWizardMode( );
(14)DoModal ()函数
该函数显示一个模态属xìng页对话框,其原型为:
virtual INT_PTR DoModal( );
返回值:返回对话框关闭的状态,对于一般属xìng页,返回值一般为IDOK、IDCANCEL
或者0;对于向导对话框返回值为ID_WIZFINISH 或IDCANCEL。
4.4.2 向导对话框的创建步骤
向导对话框用于完成一系列设置步骤,每一步通过“上一步”和“下一步”按钮进行切
换。本节将在实例Sample4_1 的基础上创建一个有3 个步骤(包含3 个属xìng页)的向导对话
框。
实例4-4:创建向导对话框实例。源代码在光盘中“\04\实例4-4\Sample4_1”目录下。
枫叶文学网www.fywxw.com
第4 章 对话框
·83·
1.创建属xìng页模板
创建向导对话框首先要创建属xìng页模板,步骤如下:
(1)打开实例Sample4_1 的工程后,在IDE 中依次选择菜单“Insert|Resource”,打开“Insert
Resource”对话框。在“Resource type”属xìng列表框中选择Dialog 选项,单击“New”按钮,
创建一个默认ID 为IDD_DIALOG1 的新的对话框资源。
(2)在IDE 左侧工作区中单击“ResourceView”选项卡,展开“Sample4_1 resources|Dialog”,
找到IDD_DIALOG1,在其上单击鼠标右键,选择菜单“Properties”,打开对话框资源属xìng设
置对话框。在“ ID 输入框” 中输入IDD_TESTPAGE1 , 即设置对话框资源ID 为
IDD_TESTDPAGE1,回车关闭属xìng设置对话框并确认修改。
(3)在IDE 左侧“ResourceView”选项卡中,双击刚刚修改过的IDD_TESTPAGE1,打
开IDD_TESTPAGE1 的对话框资源编辑器,在IDE 右侧客户区的对话框上单击鼠标右键,选
择菜单项“Properties”,打开该对话框的属xìng设置对话框。
(4)在对话框的属xìng设置对话框中设置对话框的标题。单击“General”选项卡,在“Caption”
输入框中输入“测试页1”。
(5)仍在步骤4 中对话框的属xìng设置对话框中,设置对话框的样式为属xìng页对话框的样
式。单击“Styles”选项卡,如图4-22 所示。在“Style”下拉列表框中选择Child,在“Border”
下拉列表框中选择“Thin”,选中“Title bar”复选框,清除其他复选框的选项,如图4-22 所
示。回车确认设置并关闭此对话框。
(6)按照4.1.2 节第3 部分的讲解,删除IDD_TESTPAGE1 中的“确认”(OK)按钮和
“取消”(Cancel)按钮,并为IDD_TESTPAGE1 添加合适的控件。完成控件的添加后,
IDD_TESTPAGE1 就是要创建的属xìng页对话框的第一个属xìng页模板。
图4-22 属xìng页模板的风格设置
2.为属xìng页添加属xìng页类
创建完属xìng页模板后,需要用ClassWizard 为每个属xìng页添加CPropertyPage 的派生类,
并添加相应的控件变量和消息处理函数,以及添加属xìng表按钮被单击的消息处理函数。其步
骤如下:
(1)在IDE 主菜单栏中依次选择菜
松语文学免费小说阅读_www.16sy.com
话框的标题。
枫叶文学网www.fywxw.com
第4 章 对话框
·79·
? lpszTemplate 参数:给出属xìng页对话框资源的名称字符串。
(3)CancelToClose()函数
在模态对话框中,当一个不可恢复的过程完毕后,调用该函数将“确定”(OK)按钮改
变为“关闭”(Close)按钮,同时禁用“取消”(Cancel)按钮。其原型如下:
void CancelToClose( );
(4)SetModified()函数
该函数允许或禁用“应用”(Apply)按钮。其原型如下:
void SetModified(
BOOL bChanged = TRUE
);
? bChanged 参数:值为TRUE 时“应用”按钮可用,为FALSE 时禁用该按钮。
(5)可重载的消息处理函数
为了响应属xìng页对话框的按钮消息和页面切换消息,CPropertyPage 类中增加了一系列消
息处理函数。重载这些函数就可以对属xìng页对话框中用户的cāo作进行处理。这些消息处理函
数如表4-1 所示。
表4-1 属xìng页类的消息处理函数说明
消息处理函数 函数说明
OnApply 响应属xìng表的“应用”按钮被单击的消息
OnCancel 响应属xìng表的“取消”按钮被单击的消息
OnKillActive 响应该属xìng页从当前活动页被切换出去的消息,用于数据验证
OnQueryCancel 响应属xìng表的“取消”按钮被单击前发出的消息
OnReset 响应属xìng表的“重置”按钮被单击的消息
OnSetActive 响应该属xìng页切换为当前活动页的消息
OnWizardBack 响应属xìng表的“上一步”按钮被单击的消息,仅在向导对话框中有效
OnWizardFinish 响应属xìng表的“完成”按钮被单击的消息,仅在向导对话框中有效
OnWizardNext 响应属xìng表的“下一步”按钮被单击的消息,仅在向导对话框中有效
2.CPropertySheet 类
CPropertySheet 类负责对属xìng表进行控制。该类完成的功能有装入或删除属xìng页、打开
属xìng页对话框,以及属xìng页对话框运行时切换属xìng页等功能。CPropertySheet 类是CWnd 的
派生类,但也有类似于对话框的两种运行方式,即模态和非模态。下面介绍CPropertySheet
类中与属xìng表cāo作相关的函数。
(1)构造函数
构造一个新的属xìng表类的对象,原型如下:
CPropertySheet( );
CPropertySheet(
UINT nIDCaption,
CWnd* pParentWnd = NULL,
UINT iSelectPage = 0
);
枫叶文学网www.fywxw.com
Visual C++ 6.0 程序设计从入门到精通
·80·
CPropertySheet(
LPCTSTR pszCaption,
CWnd* pParentWnd = NULL,
UINT iSelectPage = 0
);
? nIDCaption 参数:给出标题的字符串的ID。
? pParentWnd 参数:给出对话框的父窗口,为NULL 时,父窗口默认为程序主窗口。
? iSelectPage 参数:给出对话框打开时初始属xìng页的序号。
? pszCaption 参数:给出标题的字符串。
(2)GetActiveIndex()函数
该函数返回当前活动的属xìng页的序号,原型如下:
int GetActiveIndex( ) const;
返回值就是当前活动的属xìng页的序号。
(3)GetActivePage()函数
该函数返回当前活动的属xìng页对象,原型如下:
CPropertyPage* GetActivePage( ) const;
返回值为当前活动的属xìng页对象的指针。可以通过强制类型转换,将指针类型由
CPropertyPage 变为程序中自定义的属xìng页类。
(4)GetPage()函数
该函数返回某个属xìng页对象,原型如下:
CPropertyPage* GetPage(
int nPage
) const;
? nPage 参数:表示所要获取的属xìng页的序号,从零开始。
? 返回值:属xìng页对象的指针。
(5)GetPageCount()函数
该函数返回属xìng页的总数,原型如下:
int GetPageCount( ) const;
返回值为属xìng页的总数。
(6)GetPageIndex()函数
该函数获取属xìng页在对话框中的序号,原型如下:
int GetPageIndex(
CPropertyPage* pPage
);
? pPage 参数:要获取序号的属xìng页对象的指针。
? 返回值:属xìng页对象对应的序号。
(7)SetActivePage()函数
该函数设置某个属xìng页为当前活动的属xìng页,原型如下:
枫叶文学网www.fywxw.com
第4 章 对话框
·81·
BOOL SetActivePage(
int nPage
);
BOOL SetActivePage(
CPropertyPage* pPage
);
? nPage 参数:要设置为活动的属xìng页的序号。
? pPage 参数:要设置为活动的属xìng页的对象指针。
? 返回值:表示cāo作是否成功。
(8)SetTitle()函数
该函数设置属xìng表的标题,原型如下:
void SetTitle(
LPCTSTR lpszText,
UINT nStyle = 0
);
? lpszText 参数:新的标题字符串指针。
? nStyle 参数:设置标题的属xìng,只能为0 或者PSH_PROPTITLE。取值为0 时没有附
加属xìng;取值为PSH_PROPTITLE 会在新的标题后面添加“属xìng”两个字,比如lpszText
为“Text”,则当nStyle 为PSH_PROPTITLE 时,真正的标题显示为“Text 属xìng”。
(9)AddPage()函数
该函数为属xìng表添加新的属xìng页,原型如下:
void AddPage(
CPropertyPage *pPage
);
pPage 参数为要添加的属xìng页对象的指针标题字符串。
(10)PressButton()函数
该函数模拟单击属xìng表的某个按钮,原型如下:
void PressButton(
int nButton
);
nButton 参数给出要模拟单击的按钮,可以取下列值中的一个。
? PSBTN_BACK:选择“上一步”按钮。
? PSBTN_NEXT:选择“下一步”按钮。
? PSBTN_FINISH:选择“完成”按钮。
? PSBTN_OK:选择“确认”按钮。
? PSBTN_APPLYNOW:选择“应用”按钮。
? PSBTN_CANCEL:选择“取消”按钮。
? PSBTN_HELP:选择“帮助”按钮。
枫叶文学网www.fywxw.com
Visual C++ 6.0 程序设计从入门到精通
·82·
(11)RemovePage()函数
该函数为属xìng表删除已有的属xìng页,原型如下:
void RemovePage(
CPropertyPage *pPage
);
void RemovePage(
int nPage
);
? pPage 参数:要删除的属xìng页的对象指针。
? nPage 参数:要删除的属xìng页的序号。
(12)SetWizardButtons()函数
该函数进行设置向导对话框的典型按钮(比如前进、后退、完成等)。注意该函数必须
在调用DoModal()时才能使用,因此一般在属xìng页中的CPropertySheet::OnSetActive()函数中
调用。函数其原型为:
void SetWizardButtons(
DWORD dwFlags
);
dwFlags 参数设置向导按钮的属xìng,可以为以下值的组合:
? PSWIZB_BACK:显示“上一步”按钮,如果没有包含该值,“上一步”按钮被禁用。
? PSWIZB_NEXT:显示“下一步”按钮,如果没有包含该值,“下一步”按钮被禁用。
? PSWIZB _FINISH:显示“完成”按钮。
? PSWIZB _DISABLEFINISH:显示被禁用的“完成”按钮。
(13)SetWizardMode ()函数
该函数设置属xìng页对话框为向导对话框模式,应当在调用DoModal()函数之前调用该函
数。其原型为:
void SetWizardMode( );
(14)DoModal ()函数
该函数显示一个模态属xìng页对话框,其原型为:
virtual INT_PTR DoModal( );
返回值:返回对话框关闭的状态,对于一般属xìng页,返回值一般为IDOK、IDCANCEL
或者0;对于向导对话框返回值为ID_WIZFINISH 或IDCANCEL。
4.4.2 向导对话框的创建步骤
向导对话框用于完成一系列设置步骤,每一步通过“上一步”和“下一步”按钮进行切
换。本节将在实例Sample4_1 的基础上创建一个有3 个步骤(包含3 个属xìng页)的向导对话
框。
实例4-4:创建向导对话框实例。源代码在光盘中“\04\实例4-4\Sample4_1”目录下。
枫叶文学网www.fywxw.com
第4 章 对话框
·83·
1.创建属xìng页模板
创建向导对话框首先要创建属xìng页模板,步骤如下:
(1)打开实例Sample4_1 的工程后,在IDE 中依次选择菜单“Insert|Resource”,打开“Insert
Resource”对话框。在“Resource type”属xìng列表框中选择Dialog 选项,单击“New”按钮,
创建一个默认ID 为IDD_DIALOG1 的新的对话框资源。
(2)在IDE 左侧工作区中单击“ResourceView”选项卡,展开“Sample4_1 resources|Dialog”,
找到IDD_DIALOG1,在其上单击鼠标右键,选择菜单“Properties”,打开对话框资源属xìng设
置对话框。在“ ID 输入框” 中输入IDD_TESTPAGE1 , 即设置对话框资源ID 为
IDD_TESTDPAGE1,回车关闭属xìng设置对话框并确认修改。
(3)在IDE 左侧“ResourceView”选项卡中,双击刚刚修改过的IDD_TESTPAGE1,打
开IDD_TESTPAGE1 的对话框资源编辑器,在IDE 右侧客户区的对话框上单击鼠标右键,选
择菜单项“Properties”,打开该对话框的属xìng设置对话框。
(4)在对话框的属xìng设置对话框中设置对话框的标题。单击“General”选项卡,在“Caption”
输入框中输入“测试页1”。
(5)仍在步骤4 中对话框的属xìng设置对话框中,设置对话框的样式为属xìng页对话框的样
式。单击“Styles”选项卡,如图4-22 所示。在“Style”下拉列表框中选择Child,在“Border”
下拉列表框中选择“Thin”,选中“Title bar”复选框,清除其他复选框的选项,如图4-22 所
示。回车确认设置并关闭此对话框。
(6)按照4.1.2 节第3 部分的讲解,删除IDD_TESTPAGE1 中的“确认”(OK)按钮和
“取消”(Cancel)按钮,并为IDD_TESTPAGE1 添加合适的控件。完成控件的添加后,
IDD_TESTPAGE1 就是要创建的属xìng页对话框的第一个属xìng页模板。
图4-22 属xìng页模板的风格设置
2.为属xìng页添加属xìng页类
创建完属xìng页模板后,需要用ClassWizard 为每个属xìng页添加CPropertyPage 的派生类,
并添加相应的控件变量和消息处理函数,以及添加属xìng表按钮被单击的消息处理函数。其步
骤如下:
(1)在IDE 主菜单栏中依次选择菜
松语文学免费小说阅读_www.16sy.com