玩转C科技.NET

从学会做人开始认识这个世界!http://volnet.github.io

导航

属性表单——向导的创建

Controler

1、 通过设计一个向导来学会灵活运用类

首先这个程序需要建的类如类视图:(红色框类由用户自行添加)

通过3次“添加资源”,“+Dialog”中选择“IDD_PROPPAGE_LARGE”来添加(“新建”)属性页资源。构建新类:

CProp1:CPropertyPage针对第一个属性页;

CProp2:CPropertyPage针对第二个属性页;

CProp3:CPropertyPage针对第三个属性页;

为了将三个属性页组织起来需要建设新类

CPropSheet:CPropertySheet 针对属性表单。

其中通过在构造函数中添加AddPage()的方法,添加CPropertyPage类的资源:

     AddPage(&m_Prop1);

     AddPage(&m_Prop2);

     AddPage(&m_Prop3);

SetWizardMode方法可以将属性页式改为向导式

m_sheet.SetWizardMode();

DoModal方法可以将其显示

DoModal()

 

由于向导式有“上一步”“下一步”“完成”等类型特殊的按钮。因此需要分别在代表3个属性页的类中为其修改相应的值,以保证在第一页不出现上一步,最后一页以完成告终。

重写OnSetActive()函数,

virtual BOOL OnSetActive( ); //This member function is called by the framework when the page is chosen by the user and becomes the active page.

但上一步下一步等其实是其父类的方法(:CPropertySheet)因此用((CPropertySheet*)GetParent())提取其父类指针,利用其SetWizardButtonsdwFlags)方法来设置。

dwFlags

A set of flags that customize the function and appearance of the wizard buttons. This parameter can be a combination of the following values:

·   PSWIZB_BACK   Back button

·   PSWIZB_NEXT   Next button

·   PSWIZB_FINISH   Finish button

·   PSWIZB_DISABLEDFINISH   Disabled Finish button

BOOL CProp1::OnSetActive()

{

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

  return CPropertyPage::OnSetActive();

}

BOOL CProp2::OnSetActive()

{

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

  return CPropertyPage::OnSetActive();

}

BOOL CProp3::OnSetActive()

{

  ((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACK|PSWIZB_FINISH);

  return CPropertyPage::OnSetActive();

}

 

每个属性表单的响应/检查,是通过LRESULT CProp1::OnWizardNext()来检查的[在该类的重写 ]

LRESULT CProp1::OnWizardNext()

{

     // TODO: 在此添加专用代码和/或调用基类

     UpdateData(); //获取控件值

     if(m_occupation==-1)

     {

         MessageBox("请选择职业!");

         return -1;

     }

     if(m_workAddr=="")

     {

         MessageBox("请选择工作地点!");

         return -1;

     }

     return CPropertyPage::OnWizardNext();

}

2、 ListBox,ComboBox添加项

在相关类的OnInitDialog()方法中添加

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

     ((CListBox*)GetDlgItem(IDC_LIST1))->AddString ("上海");

     ((CListBox*)GetDlgItem(IDC_LIST1))->AddString ("广州");

 

     ((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString("1000元以下");

     ((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString("1000-2000");

     ((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString("2000-3000");

     ((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString("3000元以上");

3、 利用打开属性表单的按钮,去调用Invalidate(); //引起窗体的重绘,这样会自动去调用OnDraw()

void CPropView::OnClick()

{

     // TODO: 在此添加命令处理程序代码

     //CPropSheet sheet("属性页测试");

     m_sheet.SetWizardMode();    //将属性页式改为向导式

     if(ID_WIZFINISH==m_sheet.DoModal ())

     {

         m_iOccupation=m_sheet.m_Prop1.m_occupation ;

         m_workAddr=m_sheet.m_Prop1.m_workAddr ;

         m_bLike[0]=m_sheet.m_Prop2.m_football ;

         m_bLike[1]=m_sheet.m_Prop2.m_basketball ;

         m_bLike[2]=m_sheet.m_Prop2.m_volleyball ;

         m_bLike[3]=m_sheet.m_Prop2.m_swim ;

         m_strSalary=m_sheet.m_Prop3.m_strSalary ;

 

         Invalidate(); //引起窗体的重绘,这样会自动去调用OnDraw()

     }

}

 

4、 OnDraw();输出到文档类的在其间完成。

void CPropView::OnDraw(CDC* pDC)

{

     CPropDoc* pDoc = GetDocument();

     ASSERT_VALID(pDoc);

     if (!pDoc)

         return;

 

     // TODO: 在此处为本机数据添加绘制代码

     if(m_sheet.m_Prop3.m_isFinish==true)

     {

         CFont font;

         font.CreatePointFont(160,"宋体");

         CFont* pOldFont;

         pOldFont=pDC->SelectObject(&font);

 

         CString strTemp;

         strTemp="您的职业:";

         switch(m_iOccupation)

         {

         case 0:

              strTemp+="程序员";

              break;

         case 1:

              strTemp+="系统工程师";

              break;

         case 2:

              strTemp+="系统分析师";

              break;

         default:

              break;

         }

         pDC->TextOut(0,0,strTemp);

 

         strTemp="您的工作地点是:";

         strTemp+=m_workAddr;

         TEXTMETRIC tm;

         pDC->GetTextMetrics(&tm);

<p class=MsoNormal style="

posted on 2008-07-18 20:11  volnet(可以叫我大V)  阅读(1340)  评论(0编辑  收藏  举报

使用Live Messenger联系我
关闭