MFC属性页示例
来源:互联网 发布:淘宝消保工具是什么 编辑:程序博客网 时间:2024/05/22 06:43
1、制作属性页面
属性页面CPropertyPage继承自CDialog。因此,设计属性页面同设计对话框是一致的,通过资源视图,添加属性页面的资源设计。注意:由于属性页面的是同一个框体,因此,需要将它的style属性设置为child。如果这些页面大小不一致,由最大的页面作为框体大小。
设置Group为true表示一组,直到下一个Group为true,这两个控件的Tab order之间的所有控件为一组。(基于Group标记,和Tab Order来分组)
2 、添加菜单设计
3、添加属性页的类
为每个属性页添加类,CPage1,CPage2,CPage3,确保这些类继承自CPropertyPage,并对应好自己的ID资源号
4、为每个控件添加相应的成员变量
添加变量的时候,注意选择变量的类型,变量的名称,这会自动生成DDX_Text(pDX, IDC_EDIT_NAME, m_name);之类的成员变量和控件的映射。通常,需要用手工的方式进行调整和修改。
CPage1::CPage1(): CPropertyPage(CPage1::IDD), m_name(_T("")), m_age(_T("")), m_sex(0){}CPage1::~CPage1(){}void CPage1::DoDataExchange(CDataExchange* pDX){CPropertyPage::DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT_NAME, m_name);DDX_Text(pDX, IDC_EDIT_AGE, m_age);DDX_CBIndex(pDX, IDC_COMBO_SEX, m_sex);DDV_MinMaxInt(pDX, m_sex, 0, 1);}
CPage2::CPage2(): CPropertyPage(CPage2::IDD){}CPage2::~CPage2(){}void CPage2::DoDataExchange(CDataExchange* pDX){CPropertyPage::DoDataExchange(pDX);DDX_Check(pDX, IDC_CHK_TBLTENNIS, m_tbltennis);DDX_Check(pDX, IDC_CHK_BSKBALL, m_bskball);DDX_Check(pDX, IDC_CHK_SWIM, m_swim);DDX_Check(pDX, IDC_CHK_TENNIS, m_tennis);}
CPage3::CPage3(): CPropertyPage(CPage3::IDD), m_job(0), m_city(_T("")){}CPage3::~CPage3(){}void CPage3::DoDataExchange(CDataExchange* pDX){CPropertyPage::DoDataExchange(pDX);DDX_Radio(pDX, IDC_RAD_PRO, m_job);DDX_LBString(pDX, IDC_LIST_CITY, m_city);}
5、重载每个CPage页的OnInitDialog方法以对控件数据进行初始化
OnInitDialog重载函数无法通过类向导对话框和事件处理向导完成,需要手动在头文件中添加,然后通过VassistX创建Implementation
BOOL CPage1::OnInitDialog(){CPropertyPage::OnInitDialog();((CComboBox*)GetDlgItem(IDC_COMBO_SEX))->SetCurSel(1);return TRUE;}
//************************************// Method: OnInitDialog// FullName: CPage2::OnInitDialog// Access: protected // Returns: BOOL// Qualifier://************************************BOOL CPage2::OnInitDialog(){return TRUE;}
//************************************// Method: OnInitDialog// FullName: CPage3::OnInitDialog// Access: protected // Returns: BOOL// Qualifier://************************************BOOL CPage3::OnInitDialog(){CPropertyPage::OnInitDialog();//将城市信息添加到列表框CString strArr[]={_T("杭州"),_T("北京"),_T("天津"),_T("南京"),_T("上海")};for (int i=0;i<5;i++){((CListBox *)GetDlgItem(IDC_LIST_CITY))->AddString(strArr[i]);}//高亮显示第一条信息((CListBox*)GetDlgItem(IDC_LIST_CITY))->SetCurSel(0);((CButton*)GetDlgItem(IDC_RAD_PRO))->SetCheck(1);return TRUE;}
6、在View中收集向导数据,并显示在View上
首先,在View中定义相应需要收集的成员变量,通常与页面变量保持一致。
然后,在View中添加菜单命令的事件响应处理,代码如下所示
void CDialog2View::OnProp(){// TODO: 在此添加命令处理程序代码CPropertySheet propertySheet;CPage1 page1;CPage2 page2;CPage3 page3;propertySheet.AddPage(&page1);propertySheet.AddPage(&page2);propertySheet.AddPage(&page3);if (propertySheet.DoModal()==IDOK){CClientDC dc(this);CString output;//获取第一页中数据并显示m_age = page1.m_age;m_name = page1.m_name;page1.m_sex==0?m_sex = "男":m_sex = "女";if (m_name.IsEmpty()){AfxMessageBox(_T("您没有输入姓名,不能显示"));return ;}output.Format(_T("您的姓名是:%s,年龄是:%s,性别是:%s"),m_name,m_age,m_sex);dc.TextOutW(0,0,output);//获取第二页中数据并显示output=_T("您的爱好是:");if (page2.m_tbltennis)output.Append(_T("乒乓球"));if (page2.m_swim)output.Append(_T("游泳"));if (page2.m_tennis)output.Append(_T("网球"));if (page2.m_bskball)output.Append(_T("篮球"));TEXTMETRIC tm;dc.GetTextMetrics(&tm);dc.TextOutW(0,tm.tmHeight,output);//获取第三页中数据并显示output=_T("职务:");switch (page3.m_job){case 0:output.Append(_T("程序员"));break;case 1:output.Append(_T("软件设计师"));break;case 2:output.Append(_T("系统分析师"));break;default:"";}m_city=page3.m_city;output.Append(_T("工作地点:"));output.Append(m_city);dc.TextOutW(0,2*tm.tmHeight,output);}}
- MFC属性页示例
- MFC 属性页 总结
- MFC属性页对话框
- mfc属性页
- MFC中属性表单与属性页
- MFC ActiveX 控件:属性页
- 对话框属性页(MFC)
- MFC - 使用属性页表单
- MFC之添加属性页
- MFC-CtabCtrl(属性页控件)
- MFC添加属性页杂记
- VC++ MFC多属性页的实现
- MFC中多属性页的实现
- 如何创建属性页 -vc mfc
- MFC编写属性页对话框方法
- MFC中的属性页如何改变大小?
- MFC ActiveX 控件:属性页【转】
- MFC的属性页去掉帮助按钮
- 段错误bug的调试
- LayoutInflater
- vc 网络编程(socket)
- 2011 程序员薪资调查报告
- 学习STL 做个简单的笔记
- MFC属性页示例
- 2011-10-24 会话与状态管理 cookie
- OPENGL 点击与选取的基础---坐标变换
- VC CListControl 右键菜单
- 字符串基础 ASCII MBCS UNICODE DBCS
- TestComplete自动化测试实战训练(广州)
- getChildAt与getChildByName效率比较
- JavaScript MD5 与 Java MessageDigest 加密后的值相同
- 乔布斯传记概览:乔布斯18个让人着迷的地方