用VisualC 创建自定义的应用程序向导
2008-04-09 04:10:13来源:互联网 阅读 ()
应用程序向导是一种用来简化用户操作的程序,在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()函数中需要添加如下代码:
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、添加代码,编译运行程序。
//////////////////////////////////////////////////////////////// Wizard.h : header file
#if !defined(AFX_WIZARD_H__1778A141_2519_11D6_9DF5_70D757C10000__INCLUDED_)
#define AFX_WIZARD_H__1778A141_2519_11D6_9DF5_70D757C10000__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "Step1.h"
#include "Step2.h"
#include "Step3.h"
class CWizard : public CDialog
{
// Construction
public:
void SetWizButton(UINT uFlag);
void ShowPage(UINT nPos);
void AddPage(UINT nID);
CWizard(CWnd* pParent = NULL); // standard constructor
CRect rectPage; //每页显示的框
UINT nPageCount;//页的总数
UINT nCurrentPage; //显示的当前页
// Dialog Data
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash