正文

第十课:对话框之属性单2007-09-24 12:18:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/lym51/29632.html

分享到:

第十课:对话框之属性单

一、属性单

1.  属性单就是在属性对话框中常见的标签对话框,包括一个CpropertySheet和几个CpropertyPageClassWizard就是一个属性单,其中ClassWizard是一个CpropertySheet,而“Message Maps”,“Member Variables”,“ Automation”,“ ActiveX Event”和“Class Info”每一项是一个CpropertyPage

2.  生成属性单:

a.       在资源面板里新建三个对话框,Caption属性改为容易区分的名字。每一个对话框对应于属性单中的一个CpropertyPage,对于CpropertyPage来说,它的样式有特殊的要求:StyleChild BoderThin,确保TilteBarDisable被选择。这些要求可以在MSDN中查“CPropertyPage, styles”得到。

b.       为每个对话框新建一个类Cpage1Cpage2Cpage3,基类选择CpropertyPage

c.       将新建类的头文件加到 CxxxViewcpp

    #include "Page1.h"

#include "Page2.h"

#include "Page3.h"

d.       在资源面板里新建一个菜单,在CxxxView中添加它的处理函数,加入代码:

       CPropertySheet ps;

       Cpage1 pg1;

       Cpage2 pg2;

       Cpage3 pg3;

       ps.AddPage(&pg1);

       ps.AddPage(&pg2);

       ps.AddPage(&pg3);

       ps.SetWizardMode();

       ps.DoModal();         

3.  数据交换:

    pg1.m_nList1=m_nList1;            

              if(IDOK== ps.DoModal())

              {

                     m_nList1=pg1.m_nList1;

             

说明:以上代码是对话框和调用对话框的窗口交换数据的固定步骤。其中m_nList1是在对话框中定义的一个成员变量,想把它里面的数据保存出来,应该在调用对话框的类中也定义一个成员变量(最好名字相同,以便于记忆),在用户按OK键退出时,进行赋值。而在显示对话框之前,用保存的数据对对话框中的成员变量初始化。

4.  其它:

i.         单选按钮:

a.       单选按钮(Radio Button)复选按钮(Check Box)都是按钮,可以响应鼠标单击和双击的消息。

b.       对于单选按钮应设置组(Group,第一个单选按钮的Group设为有效,直到下一个设置Group的控件之前的单选按钮为一组,同一时间只能选一个。其中“下一个”是指Table Order的顺序,而不是物理位置上的顺序。

c.       一组单选按钮只能捆绑一个int,表示该组中选中的单选按钮的序号。

 

ii.列表框:

a.       在列表框的属性页中不能添加数据,要想向列表框中添加数据,应该用CListBox的成员函数AddStringInsertString

b.       OnInitDialog()中为列表框添加数据“北京”,

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

c.       为列表框捆绑一个变量

    Cstring m_strList;

   在属性单显示之前用保存的数据对m_nList1赋值,

    pg1.m_nList1=m_nList1;// m_nList1的值为“北京”

此时“北京”应该被选中但没有选中,因为是CPropertyPage::OnInitDialog()调用的UpdateData(false) 而那时列表框中还没有“北京”这个数据,需要手工调用UpdateData(false)

 

iii.组合框:

a.       组合框由一个文本框和一个列表框组成。当前选定的项将显示在组合框的文本框中。

b.       在组合框的属性页中有Data选项,可以直接加入数据。

c.       组合有三种样式,

DropDown:用户可在文本框中输入数据,点击下拉箭头时列表框部分才被显示。只能捆绑Cstring类型的变量。

DropList: 用户不能在文本框中输入数据,点击下拉箭头时列表框部分才被显示。相当于一个列表框,只能捆绑int 类型的变量。

Simple:  用户可在文本框中输入数据,列表框部分直接显示。只能捆绑Cstring类型的变量。

 

二、向导页

1.  在属性单DoModal()之前,

    ps.SetWizardMode();

  属性单即变为向导页。

2.  在显示每一个属性页时,向导页应该显示不同的按钮,如第一页应只有“下一步”,没有“上一步”。最后一页应该没有“下一步”,而有“完成”。可在属性页类中添加虚函数OnSetActive(),添加相应代码:

         ((CPropertySheet *)GetParent())->SetWizardButtons(PSWIZB_NEXT);

3.  在最后一页中设置“完成”按钮后,点击它时,它的处理函数并没有调用 UpdateData(),可加入虚函数OnWizardFinish(),在其中调用。

4.  在最后一页中设置“完成”按钮后,它的IDID_WIZFINISH(可在MSDN中查SetWizardMode()得到“上一步”,“下一步”,“完成”对应的ID),不能再用

         if(ps.DoModal()==ID_OK )来判断,应改为:

             if(ps.DoModal()==ID_WIZFINISH )

阅读(5911) | 评论(2)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册