怎样使用CPropertyPage类和CPropertySheet类创建属性表

CPropertyPage类是属性页类,相当于每一个类就是一个对话框.它继承自CDialog类.

CPropertySheet类是属性表类,它有多个属性页.它继承自CWnd类

创建属性表步骤如下:
这里简单的以只有两个属性页的属性表为例子.

1.创建一个主对话框.
如图:

2.在资源中创建一个菜单
如图:

3.给菜单添加事件处理程序
如图:

4.在主对话框属性中添加菜单
如图:

5.添加两个对话框作为属性页
如图:

需要注意的是,对话框外框最好设置为thin(MSDN说的),不过我测试的时候感觉看不出什么问题…
还有对话框标题就是属性页的标题,下面会有截图,继续往下看就行.

6.分别给两个对话框(属性页)添加类
需要特别注意! 基类的选择必须是CPropertyPage.
如图:

7.添加一个自己的属性表类
特别注意的是,这个类要继承自CPropertySheet
这里添加的类不是简单的C++类,而是MFC类!
如图:

8.在CMyPropertySheet头文件中添加两个属性页变量
如图:

9.在CMyPropertySheet两个构造函数中向属性表中添加两个属性页
如图:

10.到了这一步,属性表已经创建出来了,让我们去打开看看效果如何.
我们是通过菜单方式打开一个属性表.所以要在菜单事件处理那里填写代码.

代码如下:

void CMFCCPropertySheetDlg::OnProperty()
{

    //第一个参数是属性表的标题
    CMyPropertySheet mypsheet(TEXT("属性表"));
    //打开模态对话框,就是属性表
    mypsheet.DoModal();
}

效果如图:

上面的”确定” “取消” “应用” “帮助”按钮都是自动生成的,基类都已经实现好了它们的代码.但是”应用”按钮需要自己编写相应的事件处理,下面会有讲到方法.

11.接下就是在各自的属性页中实现控件的功能.
点击属性页1按钮就弹出一个消息框.

如图:

12.使应用按钮有效.
可以在改变了属性页里面的内容的时候使其有效.
方法如下:
添加单选按钮事件处理
代码如下:

void CPage1::OnBnClickedRadio1()
{
    SetModified(TRUE);
    //其它代码
    //......
}

为了方便,多个按钮响应同一个消息

ON_BN_CLICKED(IDC_RADIO1, &CPage1::OnBnClickedRadio1)
    ON_BN_CLICKED(IDC_RADIO2, &CPage1::OnBnClickedRadio1)
    ON_BN_CLICKED(IDC_RADIO3, &CPage1::OnBnClickedRadio1)

13.响应应用按钮消息
CPropertyPage类中有一个OnApply函数.它的ID是ID_APPLY_NOW,消息映射的时候,这个ID不能变,函数名可以自己再起一个.

首先先进行消息映射

ON_BN_CLICKED(ID_APPLY_NOW, CMyPropertySheet::OnApply)

然后在头文件中声明

afx_msg void OnApply();

最后写函数体实现

void CMyPropertySheet::OnApply()
{
    AfxMessageBox(TEXT("点击了应用按钮"));
    m_Page1.SetModified(FALSE); //使应用按钮无效
    m_Page2.SetModified(FALSE);
    //按下应用的时候更新页面的数据
    GetActivePage()->UpdateData(TRUE);
    //接下来可以SendMessage给其它函数来执行更新后的操作
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值