孙鑫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函数中