VC++属性页的使用.docx

上传人:b****6 文档编号:2986891 上传时间:2022-11-16 格式:DOCX 页数:8 大小:18.78KB
下载 相关 举报
VC++属性页的使用.docx_第1页
第1页 / 共8页
VC++属性页的使用.docx_第2页
第2页 / 共8页
VC++属性页的使用.docx_第3页
第3页 / 共8页
VC++属性页的使用.docx_第4页
第4页 / 共8页
VC++属性页的使用.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

VC++属性页的使用.docx

《VC++属性页的使用.docx》由会员分享,可在线阅读,更多相关《VC++属性页的使用.docx(8页珍藏版)》请在冰豆网上搜索。

VC++属性页的使用.docx

VC++属性页的使用

VC++MFC属性页使用说明

2009-06-0817:

15

我们已经非常熟悉软件安装的步骤,一般都是由用户协议、安装位置、安装选项、安装这几个过程构成。

其中,Iagree、next、back、finish、cancel这几项是必不可少的。

那么这个安装程序(仅仅指这个安装过程的界面)是怎么做出来的呢?

MFC给我们提供了很方便的方法。

其实,我们看到的每一个步骤,都是一个属性页(CPropertyPage),而几个属性页构成一个属性表(CpropertySheet)。

这个属性表是一个整体,根据需要,它可以初始化为一个类似于安装向导的界面,也可以初始化为一个类似于标签页的界面。

本例子是一个类似于安装向导的界面。

这个程序开发的步骤如下:

1、我们首先新建一个MFC工程,工程名字为“PropertyPageDemo”,选择单文档模式,其它保持默认。

完成之后编译运行一下看是否有错误,没错进行第二步,否则检查错误,重新建立工程。

2、打开资源视图(ResourceView)的对话框目录(Dialog),在“Dialog”上右键、选择insert,在弹出的对话框中选择Dialog下的IDD_PROPPAGE_MEDIUM[English(U.S)]、点击new,这样我们就创建了一个新的属性页。

按照此方法我们再创建两个属性页。

3、在ResoureceView中右键新建的属性页,选择属性,在弹出的对话框中修改资源的ID为:

IDD_PROP1、IDD_PROP2、IDD_PROP3,语言调整为Chinese(P.R.C.)。

(在弹出的对话框上点左上角的图钉样子的图标可以保持当前对话框的可见性,使得在调整完一个资源属性之后不用关闭对话框,再点另外一个资源,对话框将自动切换成新资源的属性)。

4、设置属性页:

将属性页一、二、三的标题分别修改成第一步、第二步、第三步。

5、将属性页一中原来的提示删除,添加一个GroupBox控件,将GroupBox标题修改为“职位”;然后在GroupBox中添加三个RadioButton,将标题分别修改为“程序员”、“系统架构师”、“系统分析师”。

添加一个静态文本标记(statictext)和一个ListBox,将ListBox属性中style的sort取消(这样保证不对选项进行排序,从而得到与输入一致的结果)。

6、将属性页二中原来的提示删除,添加一个GroupBox,标题为“爱好”;然后添加四个复选框(CheckBox),分别为“足球”、“篮球”、“排球”、“游泳”。

7、将属性页三中原来的提示删除,添加一个静态文本,标题为“薪资水平”;然后添加一个下拉列表(ComboBox),将其属性中style的sort取消。

这样基本的界面已经做出来了。

8、在新建的界面上右键、选择classwizard,新建类“CProp1”、“CProp2”、“CProp3”,基类为“CPropertyPage”。

9、新建一个类,名字为“CPropSheet”,基类为CPropertySheet。

这个类相当于CPropertyPage的容器。

在CPropSheet的构造函数中添加CProp1、CProp2、CProp3的对象,使得CPropertyPage放入“容器”。

过程:

a)首先添加三个成员变量,CProp1m_prop1、CProp2m_prop2、CProp3m_prop3,public属性;

b)在构造函数中:

this->AddPage(&m_prop1);this->AddPage(&m_prop2);this->AddPage(&m_prop3);

需要注意的是,CPropSheet有两个构造函数,需要在每个构造函数中都添加属性页。

10、在资源视图中找到菜单(MENU),打开,新建一个子菜单,标题为程序,取消其popup属性,设置ID为:

ID_SHEET。

右键“程序”,选择classwizard,添加一个消息相应函数,对应“CPropertyPageDemoView类”,函数默认为“OnSheet()”

11、针对OnSheet(),编写代码

a)我们首先需要将sheet显示出来(这时候的sheet已经拥有了属性页)。

CPropSheetsheet("职业选择");//构造一个sheet

sheet.SetWizardMode();//设置成“下一步模式”否则是标签页形式

sheet.DoModal();//以模态形式显示sheet

12、此时我们发现已经每个属性页都有了“上一步”、“下一步”、“取消”这三个按钮。

但是在第一个属性页中显示“上一步”和在第三个属性页中显示“下一步”是错误的,接下来我们要处理这个问题

a)在”CProp1”这个类上面右键选择addVirtualFunction这项,选中里面的OnSetActive,编辑代码:

在里面:

这里面用到了SetWizardButtons这个函数,但是msdn上面的说明是这个函数只能用CPropertySheet来调用,所以我们使用GetParent()这个函数获取CPropertySheet的一个指针,适用指针来操作SetWizardButtons这个函数。

((CPropertySheet*)this->GetParent()/*该函数获得一个指定子窗口的父窗口句柄*/)->SetWizardButtons(PSWIZB_NEXT);

b)同样我们修改第二、三个属性页:

((CPropertySheet*)this->GetParent())->SetWizardButtons(PSWIZB_BACK|PSWIZB_NEXT);

((CPropertySheet*)this->GetParent())->SetWizardButtons(PSWIZB_FINISH);

13、设置第一个属性页“职位”项的数据和页面数据校验。

a)把RadioButton的“group”属性设置为true,然后右键选择classwizard选择MemberVariables

在看到的是IDC_RADIO1,点右边按钮“AddVariable”,依次设置为变量名m_occupation、类型value、变量类型int;

b)按照上面的办法设置ListBox,其中使用到的数据是:

IDC_LIST1,变量是m_workAddr,value、CString;

c)设置RadioButton组的校验:

i.当我们在点击“下一步”这个按钮的时候触发一个函数“OnWizardNext()”,这个函数的添加方法和12a)的方式一样;

ii接下来首先更新数据this->UpdateData();使得m_occpution获取值;

iii.判断接受到的值m_occupation,如果一组RadioButton有被选中的项的话,返回被选中的项的索引,这个索引从0开始计数;如果没有选择的话返回-1;

If(m_occupation==-1)

{

MessageBox(“请选择职位!

”);

return-1;//如果返回-1则不会执行“下一步”

}

14、设置第一个属性页“工作地点”项的数据和页面数据校验。

a)完善“工作地点项”的数据:

首先为“CProp1”这个类添加一个消息响应函数OnInitDialog(),保证在初始化属性页的时候进行数据的初始化,然后

((CListBox*)this->GetDlgItem(IDC_LIST1))->AddString("上海");

((CListBox*)this->GetDlgItem(IDC_LIST1))->AddString("北京");

((CListBox*)this->GetDlgItem(IDC_LIST1))->AddString("成都");

这样完成数据的初始化

b)在OnWizardNext()函数中判断时候选择“工作地点”中的值

If(m_workAddr==””)

{

MessageBox(“请选择工作地点!

”);

return-1;

}

c)完成之后14、15步的代码:

LRESULTCProp1:

:

OnWizardNext()

{

//TODO:

Addyourspecializedcodehereand/orcallthebaseclass

this->UpdateData();

if(m_occupation==-1)

{

MessageBox("请选择职位!

");

return-1;

}

if(m_workAddr=="")

{

MessageBox("请选择工作地点!

");

return-1;

}

returnCPropertyPage:

:

OnWizardNext();

}

15、设置第二个属性页的数据和数据校验

a)首先关联变量:

将各项均关联成BOOL型的m_basketball、m_football、m_swim、m_volleyball

b)在OnWizardNext()函数中先更新数据,再判断,若是四个成员变量之中有一个为真,则可以进行“下一步”,否则提示,并保持当前属性页

c)代码

LRESULTCProp2:

:

OnWizardNext()

{

//TODO:

Addyourspecializedcodehereand/orcallthebaseclass

this->UpdateData();

if(m_basketball||m_football||m_swim||m_volleyball)

{

returnCPropertyPage:

:

OnWizardNext();

}

else

{

MessageBox("请选择爱好!

");

return-1;

}

}

16、设置第三个属性页的数据和数据校验

a)将ComboBox关联CString类型变量m_salary

b)初始化数据:

BOOLCProp3:

:

OnInitDialog()

{

CPropertyPage:

:

OnInitDialog();

//TODO:

Addextrainitializationhere

((CComboBox*)this->GetDlgItem(IDC_COMBO1))->AddString("1000元以下");

((CComboBox*)this->GetDlgItem(IDC_COMBO1))->AddString("1000-3000元");

((CComboBox*)this->GetDlgItem(IDC_COMBO1))->AddString("3000元以上");

returnTRUE;//returnTRUEunlessyousetthefocustoacontrol

//EXCEPTION:

OCXPropertyPagesshouldreturnFALSE

}

c)校验数据

BOOLCProp3:

:

OnWizardFinish()

{

//TODO:

Addyourspecializedcodehereand/orcallthebaseclass

this->UpdateData();

if(m_salary=="")

{

MessageBox("请选择薪资水平!

");

returnFALSE;

}

returnCPropertyPage:

:

OnWizardFinish

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1