关于属性页或向导的使用(CPropertySheet,CPropertyPage)
来源:互联网 发布:广州数据分析 编辑:程序博客网 时间:2024/04/28 06:19
属性对话框不同于普通对话框的是它能同时提供多个选项页,而每页都可以由资源编辑器以编辑对话框的方式进行编辑,这样给界面开发带来了方便。同时使用上也遵守普通对话框的规则,所以学习起来很方便。属性对话框由两部分构成:多个属性页(CPropertyPage)和属性对话框(CPropertySheet)。
首先需要编辑属性页,在资源编辑器中选择插入,并且选择属性对话框后就可以插入一个属性页,或者选择插入一个对话框,然后将其属性中的Style设置为Child,Border设置为Thin也可以.然后根据这个对话框资源生成一个新类,在选择基类时选择CPropertyPage,ClassWizard会自动生成相关的代码。
而对于CPropertySheet也需要生成新类(如果不用新类很难进行一些事件的响应进行处理),并且将所有需要加入的属性页对象都作为成员变量。属性对话框也分为有模式和无模式两种,有模式属性对话框使用DoModal()创建,无模式属性对话框使用Create()创建。下面的代码演示了如何创建属性对话框并添加属性页:
//修改CPropertySheet派生类的构造函数为如下形式
CSheet::CSheet()
:CPropertySheet("test sheet", NULL, 0)
...{
m_page1.Construct(IDD_PAGE_1);
m_page2.Construct(IDD_PAGE_2);
AddPage(&m_page1);
AddPage(&m_page2);
}
//创建有模式属性对话框
void CMy56_s1Dlg::OnMod()
...{
CSheet sheet;
sheet.DoModal();
}
//创建无模式属性对话框
void CMy56_s1Dlg::OnUnm()
...{
CSheet *sheet=new CSheet;
sheet->Create();
}
对于属性对话框可以使用下面的一些成员函数:
- CPropertyPage* CPropertySheet::GetActivePage( )得到当前活动页的指针。
- BOOL CPropertySheet::SetActivePage( int nPage )用于设置当前活动页。
- int CPropertySheet::GetPageCount()用于得到当前页总数。
- void CPropertySheet::RemovePage( int nPage )用于删除一页。
- void CPropertyPage::OnOK() 在属性对话框上按下“确定”按钮后被调用
- void CPropertyPage::OnCancel() 在属性对话框上按下“取消”按钮后被调用
- void CPropertyPage::OnApply() 在属性对话框上按下“应用”按钮后被调用
- void CPropertyPage::SetModified( BOOL bChanged = TRUE ) 设置当前页面上的数据被修改标记,这个调用可以使“应用”按钮为允许状态。
- PSWIZB_BACK 显示“上一步”按钮
- PSWIZB_NEXT 显示“下一步”按钮
- PSWIZB_FINISH 显示“完成”按钮
- PSWIZB_DISABLEDFINISH 显示禁止的“完成”按钮
在使用向导对话框时可以通过重载一些函数来达到控制的目的:
- void CPropertyPage::OnWizardBack() 按下了“上一步”按钮。返回0表示有系统决定需要显示的页面,-1表示禁止页面转换,如果希望显示一个特定的页面需要返回该页面的ID号。
- void CPropertyPage::OnOnWizardNext() 按下了“下一步”按钮。返回值含义与void CPropertyPage::OnWizardBack()相同。
- void CPropertyPage::OnWizardFinish() 按下了“完成”按钮。返回FALSE表示不允许继续,否则返回TRUE向导对话框将被结束。
//创建有模式向导对话框
void CMy56_s1Dlg::OnWiz()
...{
CSheet sheet;
sheet.SetWizardMode();
int iRet=sheet.DoModal();//返回ID_WIZFINISH或IDCANCEL
}
//重载BOOL CPropertyPage::OnSetActive( )来控制显示的按钮
BOOL CPage1::OnSetActive()
...{
((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACK|PSWIZB_NEXT);
return CPropertyPage::OnSetActive();
}
BOOL CPage2::OnSetActive()
...{
((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACK|PSWIZB_FINISH);
return CPropertyPage::OnSetActive();
}
- 关于属性页或向导的使用(CPropertySheet,CPropertyPage)
- CPropertySheet 与CPropertyPage 的基本使用
- 怎样使用CPropertyPage类和CPropertySheet类创建属性表
- 关于MFC:CPropertyPage 与CPropertySheet
- 属性页对话框和相关的两个类CPropertyPage类和CPropertySheet类
- 属性页CPropertySheet向导条字体更改
- CPropertySheet标签页 实现各个CPropertyPage页面之间的切换
- 创建属性页(CpropertyPage)对话框和向导对话框!
- 更改CPropertySheet中CPropertyPage的文本
- CPropertySheet 与CPropertyPage
- CPropertySheet和CPropertyPage
- CPropertySheet和CPropertyPage
- CPropertySheet和CPropertyPage介绍
- CPropertySheet 和 CPropertyPage (帮助文档的调用问题)
- 属性单(CPropertySheet)使用
- 属性单(CPropertySheet)使用
- 属性单(CPropertySheet)使用
- CPropertySheet属性页的一些使用方法
- 不要忽略c#中的using和as操作符
- 韦小宝这家伙『转载』
- Hibernate学习笔记(一)--Hibernate的引入
- 用timer做在窗口中自动隐藏面板
- Asp.net常用代码
- 关于属性页或向导的使用(CPropertySheet,CPropertyPage)
- 小处见大问题
- 一个让人郁闷的存储过程
- 解决重装系统后不识别光驱和第二块硬盘并且频繁重启的问题
- 【基础】函数运行栈与调用栈的理解
- 如何按照HashTable动态设定类的属性和字段
- 经常口出鸟语,于是记录一下
- 【随想】关于【编译期确定与运行期确定】和【静态内存与动态内存】
- C#窗体运行的唯一性问题