打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
VC中属性页(向导)的实现

VC中属性页(向导)的实现  

2008-11-27 09:52:08|  分类: VC++ |举报 |字号 订阅

孙鑫老师关于属性页的创建过程:

1.      

     首先添加三个Dialog资源,选择IDD_PROPRAGE_LARGE分别命名为P1,P2,P3。再往3个属性页中添加控件,P1中添加组合框,组合框中添加三个RadioButton命名为职业,和一个List Box;P2中添加组合框,组合框中为四个Check Box,命名为兴趣爱好;P3中添加Combo Box,为工资水平。

2.    

     创建3个类,基类为CPropertyPage,分别为CPro1,CPro2,CPro3.

3.      

     通过查MSDN知要实现属性页要有一个CPropetySheet类,于是创建一个类CProsheet,基类为CPropetySheet,另外再CProsheet中增加3个分别为CPro1,CPro2,CPro3的变量,在它的构造函数中利用AddPage()函数把3个属性页对象添加进取(详细见MSDN,注意文件的包含)。

4.     

     再就要实现菜单的功能实现,在创建的单文档工程中添加一个名为“属性”的菜单。在View类中增加其消息处理函数,一要构造属性表对象CProsheet Prosheet;二要调用Prosheet.DoModal()函数显示。(注意改变属性页的语言和字体,否则显示的是乱码,另外注意文件的包含)

5.      

     上面构成生成的是属性表,而大部分时候我们需要向导类型的属性填写,向导生成的基本构成和上一样,只不过之后要在DoModal()之前要用CPropertySheet中的SetWizardMode()函数使它成为向导类型。完成后运行会发现在第一页不应该有上一步这个按钮,最后一页不应该有下一步这个按钮,应该为完成按钮,要解决这个问题该怎么办呢?

6.      

     要解决上面的问题要利用属性表单成员函数SetWizardBttons()这个函数,但MSDN中知这个函数是通过OnSetActive()这个函数来实现的。所以要在属性页CPro1,CPro2,CPro3类中添加虚函数OnSetActive(),再在此函数中调用SetWizardBttons()函数来实现这个功能。(注意SetWizardBttons()是属性表CPropetySheet类的成员函数,所以要调用它应((CPropertySheet*)GetParent( ))->SetWizardButtons(PSWIZB_NEXT);)

7.      

     完成上述功能后,就要对各属性页进行判断了,只有满足条件才能进行下一步。对第一个属性页CPro1,要增加虚函数OnWizardNext()函数进行判断。(注意对Radio Button控件要点Croup,具体参见组的具体操作,另外,控件的数据传递要用UpdateData()函数),而对于List Box控件,它是一个CListBox类的实例,要初始化要添加消息处理WM_INITDIALOG接着在它生成的函数中用CListBox类中的AddString()函数来实现。

8.     

      对于第二个属性页同上,第三个属性页CPro3,基本操作过程同上,它是CComboBox类的一个实例,添加的虚函数应是OnWizardFinish();要利用GetCurSel( )和GetLBText()函数对其先得到索引值,再得到具体字符串,具体为

    int index;

     i ndex=((CComboBox*)GetDlgItem(IDC_COMBO1))->GetCurSel( );

       ((CComboBox*)GetDlgItem(IDC_COMBO1))->GetLBText(index,m_m);

   (它的初始化和一一样添加WM_INITDIALOG再用CComboBox类中AddString()函数,另外要注意控件中把Sort取消,这样文本的显示就按输入的顺序显示)

9.      

      最后要将各属性页的选择显示在视图中,先在视图类中定义相应的变量并初始化,(注意数组的初始化有些时候可以用memset()函数来实现)再视图类中的prosheet.DoModal()进行判断if(prosheet.DoModal()==ID_WIZFINISH )就将属性页中的信息传递到各变量中。最后要用Invalidate();使视图重画。

10.  

       再将各信息显示在视图中,在OnDraw(CDC* pDC)函数中实现。(对获取文本的大小位置可用TEXTMETRIC tm; pDC->GetTextMetrics(&tm);来实现)

阅读(1901)| 评论(1)
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
在vs2008 vc++ 中添加mfc中消息处理函数
ActiveX(一)
【mfc】用对话框的切换实现重新登录
VC6.0 自动识别可用串口 添加至combox
积累的VC编程小技巧之组合框
利用 CCombobox 实现百度,google自动匹配(转)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服