用Visual C++创建自定义的应用程序向导
下载本文源代码 应用程序向导是一种用来简化用户操作的程序,在Microsoft 的所有软件产品中都存在应用程序向导,例如Office2000 中的Web 页向导就是一个十分典型的应用程序向导,Visual C++提供的"App Wizard"也是一个应用程序向导。本实例给出了实现自己的
下载本文源代码
应用程序向导是一种用来简化用户操作的程序,在Microsoft 的所有软件产品中都存在应用程序向导,例如Office2000 中的
Web 页向导就是一个十分典型的应用程序向导,Visual
C++提供的"App Wizard"也是一个应用程序向导。本实例给出了实现自己的应用程序向导的方法,程序编译运行后的界面效果如图一所示:
图一、自定义向导程序界效果图 |
一、编程方法 在Visual C++编程中,可以使用MFC提供的类CPropertySheet和类CPropertyPage方便地编写一个向导程序。首先我们来介绍一下类CPropertySheet 和类CPropertyPage。属性页类CPropertyPage 是从类CDialog中派生出来的,具有Diaglog的基本性质,不过需要注意的是在将一个对话框
模板关联到CpropertyPage类时对话框
模板的样式必须设置为"Child"。类CPropertySheet 是一个属性表,它也代表一个窗体,相当一个容器,用来存放所有的属性页CpropertyPage,CpropertySheet类不是从Cdialog类派生出来的,但是该类对象可以进行普通对话框似的操作,如使用DoModal()函数显示属性表后,它就包含了"取消"、"上一步"、"下一步" 等基本按钮。为了将各个属性页添加到属性表中,可以调用CpropertySheet::AddPage( CPropertyPage *pPage )。需要读者朋友注意的一点是,一般情况下不直接使用CpropertySheet、CpropertyPage类,而是分别使用它们的子类,具体参见程序代码部分。
将属性页添加到属性表中之后,就需要协调它们的显示,也就是要决定某个属性页具体显示"取消、上一步、下一步、完成、帮助"等几个基本按钮中的哪些按钮。在属性表中的某一属性页为当前页时,会触发OnSetActive事件,所以只需要对每一个属性页重载该函数来处理相应的工作。例如,当显示第一页时,由于不存在"上一步",故在该属性页的OnSetActive()函数中需要添加如下代码:
clearcase/" target="_blank" >cccccc width="90%" align=center bgColor=#e3e3e3 border=1>
CPropertySheet* pParent=(CPropertySheet*)GetParent(); // 获得属性表的指针 pParent->SetWizardButtons(PSWIZB_NEXT); // 设置属性表的显示按钮只为下一步 SetDlgItemText(IDC_TEXT1,"这是向导的第一步"); |
同样在显示中间页时应该设置成即有"上一步",也有"下一步",代码为:
CPropertySheet* pParent=(CPropertySheet*)GetParent(); pParent->SetWizardButtons(PSWIZB_NEXT|PSWIZB_BACK); SetDlgItemText(IDC_TEXT2,"这是向导的第二步"); |
最后在显示最后一页时只显示"完成"和"上一步",代码为:
CPropertySheet* pParent=(CPropertySheet*)GetParent(); pParent->SetWizardButtons(PSWIZB_FINISH|PSWIZB_BACK); SetDlgItemText(IDC_TEXT3,"这是向导的第三步"); |
从上面的代码可以看出,决定当前属性页使用哪个按钮关键是使用了CPropertySheet ::SetWizardButtons()函数,该函数的原型为:
void SetWizardButtons( DWORD dwFlags ); |
参数dwFlags定义了属性页上具体显示那些导航按钮,该值是下列标志的组合:PSWIZB_BACK (Back button)、PSWIZB_NEXT( Next button)、PSWIZB_FINISH(Finish button)、PSWIZB_DISABLEDFINISH(Disabled Finish button)。
因为CpropertySheet、CPropertyPage类不是一个可修改的资源,所以在程序中会发现改变向导按钮的样式会很困难,例如不能在"上一步"、"下一步就"等按钮上添加图标等;也不能修改向导按钮的位置。为了实现一个性化向导的目的,我们可以不使用CPropertySheet类和CPropertyPage类,而自行设计一个向导程序。设计的基本思路是:采用标准的向导的工作方式,每一步就是一个对话框,向导本身也是一个对话框,用来容纳每步对话框;当点击"下一步"或"上一步"时,将相应的对话框定位到要显示的位置;因为向导一般都包含很多步,每一步对应一个页,为了管理这些页,我们可以创建一个链表来管理每一步的对话框。具体实现参见代码部分。
二、编程步骤 1、启动Visual C++6.0,生成一个基于对话框的应用程序,将该程序命名为"CustomWizard"
2、在程序的对话框模板中加入一个按钮用来启动向导,其ID设置为IDC_BENGINWIZ。另外加入一个集合框用来容纳向导中的每个对话框,并根据该模板定义类"Cwizard";
3、依次创建向导的每页的对话框资源,命名为IDD_STEP1、IDD_STEP2、IDD_STEP3,然后根据资源模板生成新的类;
4、添加代码,编译运行程序。