搜狐首页-新闻-体育-娱乐-财经-IT-汽车-房产-家居-女人-TV-ChinaRen-邮件-博客-BBS-搜狗 

数码天下 > 网狐学园-全中国人的电脑学习中心 > 程序开发-网狐学园 > 程序设计其他
如何用Visual C++创建自定义的应用程序向导
时间:2006年01月16日10:53 我来说两句(0)  

 


  应用程序向导是一种用来简化用户操作的程序,在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、添加代码,编译运行程序。

热门新闻排行
01 广州Vista盗版江湖调查 全部破解版本大曝光
02 Windows Vista不兼容的应用程序,还有谁?
03 中国海贼版Vista入侵日本 "番茄花园"打头阵
04 挑战视觉享受极限 五款流行多媒体播放器比拼
05 Vista SP1发布计划已定 Windows XP SP3不再来
热门教程排行
01 安装系统不求人 就算没有光驱和软驱也能行
02 让电脑运转如飞 Windows Vista九则加速技巧
03 逐一辩驳:破解Windows Vista的四个性能谣言
04 专家经验谈:Excel工作表的几点设计策略
05 整容大法!Photoshop简单教程之美女去斑篇
蜘蛛侠主题Mod美图赏

蜘蛛侠主题Mod美图赏
两款可爱的iPod音箱

两款可爱的iPod音箱
小心别丢了 全球最袖珍5款科技玩意

全球最袖珍5款科技玩意
最强的概念车设计:超级巴士

概念车设计:超级巴士
LLADRó瓷器诠释人性情感

LLADRó瓷器诠释人性
德国家具设计精选作品

德国家具设计精选
最具创意的多功能床(图)

最具创意的多功能床
2006离生活最近的创意

2006离生活最近的创意
欢迎访问:软件频道 下载频道 网狐学院 数字艺术 考试 病毒与安全 创意赏析

[1][2][下一页]

(责任编辑:luwei)



共找到 288 个相关新闻.


我来说两句 全部跟贴(0条) 精华区(0条) 辩论区(0条)

用户:  匿名发表:  隐藏地址:


设为辩论话题      


精彩图片新闻


激情四溢沙滩宝贝


数码公社专栏

相关链接





搜狐短信 小灵通 性感丽人 言语传情
三星图铃专区
[周杰伦] 千里之外
[誓 言] 求佛
[王力宏] 大城小爱
[王心凌] 花的嫁纱
精品专题推荐
短信企业通秀百变功能
浪漫情怀一起漫步音乐
同城约会今夜告别寂寞
敢来挑战你的球技吗?
 精彩生活 

星座运势 每日财运
花边新闻 魔鬼辞典
情感测试 生活笑话


今日运程如何?财运、事业运、桃花运,给你详细道来!!!





菊花台
迷迭香
青青河边草
丁香花
原来你也在这里
爱如空气
不要再来伤害我

公社热图


·北美惊现若干神秘UFO/图
·范冰冰真空写真露点[图]
·传说中国内第一美女车模


频道精彩推荐

·关注2006年铁路春运
·2006年北京两会
·德国世界杯
·李宇春发单曲张朝阳捧场
·猫扑网将收购DONEWS
·2005年经济回顾
·东风标致206正式下线
·春节晚会
·2006达喀尔拉力赛
·湖南人禽流感病患者病变






不怕不怕
吉祥三宝
桃花朵朵开
千里之外
大城小爱
梁祝
迷糊娃娃可爱粉红卡通
四季美眉给你最想要的

news
搜狐分类 ·搜狐招商


创意就是这么简单
女星豪乳尺码大曝光
·现场抓拍明星着透视装
·芙蓉二代横空出世
·央视女主持辞职拍艳照
·徐若瑄15岁全裸写真曝光
·拍摄:娱乐圈性交易过程
·抓拍模特海滩宽衣解带
·外国女生流行拍的艺术照
·台湾十大波霸照片大比拼
·网络美女全裸人体摄影
·范冰冰终于还是脱了

推荐企业
2006年世界电信展 诺基亚 瑞星 联想 摩托罗拉 三星 清华紫光 金山 索尼爱立信 索尼
给编辑写信



设置首页 - 搜狗输入法 - 支付中心 - 搜狐招聘 - 广告服务 - 客服中心 - 联系方式 - 保护隐私权 - About SOHU - 公司介绍 - 全部新闻 - 全部博文
Copyright © 2018 Sohu.com Inc. All Rights Reserved. 搜狐公司 版权所有
搜狐不良信息举报邮箱:jubao@contact.sohu.com