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);来实现)
联系客服