孙鑫C++第八堂课要点

1、实现两个对象交换,只需将地址值交换就可以

2、添加属性页资源,添加3个IDD_PROPPAGE_LARGE,然后分别给每个IDD_PROPPAGE_LARGE的Caption和ID重新命名,

3、在每个IDD_PROPPAGE_LARGE添加控件,组框(Group Box)可以起到标记和分组的作用;组合框(Combo Box)应该放置时拖动应该大点

 

4、为Page1添加类为CProp1,基类为CPropertyPage;为Page2添加类为CProp2,基类为CPropertyPage;为Page3添加类为CProp3,基类为CPropertyPage;

5、在CView类中定义3个CProp1、CProp2、CProp3的public成员变量,分别为m_prop1、m_prop2、m_prop3;在资源视图中的IDR_MAINFRAME增添菜单(“属性表单”),并添加在CView类单击响应函数。

 1 // Cmfctest15View 消息处理程序
 2 void Cmfctest15View::OnPropsheet()
 3 {
 4     // TODO: 在此添加命令处理程序代码
 5     CPropertySheet prosheet("属性表单集");//CPropertySheet类由CWnd派生而来的
 6     prosheet.AddPage(&m_prop1);
 7     prosheet.AddPage(&m_prop2);
 8     prosheet.AddPage(&m_prop3);
 9     prosheet.SetWizardMode();   //支持向导模式,意思是包括上一步、下一步
10     prosheet.DoModal();
11 }

6、修改属性表单向导的按钮

 1 //第一页有下一步按钮
 2 BOOL CProp1::OnSetActive()
 3 {
 4     // TODO: 在此添加专用代码和/或调用基类
 5     ((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_NEXT);
 6     return CPropertyPage::OnSetActive();
 7 }
 8 
 9 
10 //第二页有下一步和上一步按钮
11 BOOL CProp2::OnSetActive()
12 {
13     // TODO: 在此添加专用代码和/或调用基类
14     ((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_NEXT|PSWIZB_BACK);
15     return CPropertyPage::OnSetActive();
16 }
17 
18 //第三页有上一步和完成按钮
19 BOOL CProp3::OnSetActive()
20 {
21     // TODO: 在此添加专用代码和/或调用基类
22     ((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACK|PSWIZB_FINISH);
23     return CPropertyPage::OnSetActive();
24 }

7、单选按钮中“组”的含义:

将“程序员”单选按钮的属性中Group由“false”改为“true”,其意义在于,与这个按钮相关联的变量值为0,而系统工程师、项目经理的按钮相关联的变量值依次为1,2;直到遇到下一个组才结束。

8、CPropertyPage::OnWizardNext函数中,-1表示阻止向导进下一页,0表示允许向导进入下一页;在向导中判断用户是否选上单选按钮

 1 LRESULT CProp1::OnWizardNext()  //为虚函数
 2 {
 3     // TODO: 在此添加专用代码和/或调用基类
 4     UpdateData();
 5     if (-1==m_radio1)    //m_radio1是与第一个按钮(程序员)相关联的int变量
 6     {
 7         MessageBox("请选择职业!","Error",MB_ICONERROR|MB_OK);
 8         return -1;
 9     }
10     return CPropertyPage::OnWizardNext();
11 }

9、给ListBox中添加字符串

 1 BOOL CProp1::OnInitDialog()
 2 {
 3     CPropertyPage::OnInitDialog();
 4     // TODO:  在此添加额外的初始化
 5     ((CListBox*)GetDlgItem(IDC_LIST2))->AddString("北京");
 6     ((CListBox*)GetDlgItem(IDC_LIST2))->AddString("天津");
 7     ((CListBox*)GetDlgItem(IDC_LIST2))->AddString("上海");
 8     return TRUE;  // return TRUE unless you set the focus to a control
 9     // 异常: OCX 属性页应返回 FALSE
10 }

10、在给控件增添相关联的变量时,一定要注意合理使用UpdateData函数

11、保存用户的选择:

1 BOOL CProp3::OnWizardFinish()  //当到达第3个页面,点击完成按钮,将用用户的选择保存下来
2 {
3     // TODO: 在此添加专用代码和/或调用基类
4     int a=((CComboBox*)GetDlgItem(IDC_COMBO1))->GetCurSel();  //获取用户选择字符串的索引值
5     ((CComboBox*)GetDlgItem(IDC_COMBO1))->GetLBText(a,m_strSalary);//将指定索引的字符串保存在成员变量m_strSalary
6     return CPropertyPage::OnWizardFinish();
7 }

12、关于字体、画刷、画笔的设置,改变其颜色,以及窗口的重绘要在CView类的OnDraw函数中

 

posted @ 2014-10-07 12:08  龙泽一狼  阅读(359)  评论(0编辑  收藏  举报