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给其它函数来执行更新后的操作
}

怎样使用CPropertyPage类和CPropertySheet类创建属性表相关推荐

  1. ARCGIS为栅格数据创建属性表

    有时候一个栅格数据有属性值,但是"打开属性表"不可用,此时候可以通过ARCGIS中的"创建属性表"工具解决.需要注意的是此栅格数据集必须只有单一波段.不能为具有 ...

  2. MFC创建属性表单“所需资源不存在”错误解决方法

    看一下这篇文章的第六步: MFC创建属性页详细步骤与注意事项 总的来说,问题在于:创建的时候选错了基类,应该选择下面这种,具体的看上面那一篇吧.

  3. MFC创建属性页详细步骤与注意事项

    MFC创建属性页 第一步,右击插入(我有三个): 第二步,修改名称(左单击一下刚刚创建的可以改名字,双击就是打开了,就到内部属性了,我的是下面三个为属性表单): 第三步,修改属性,我是这么改的,暂时和 ...

  4. 创建栅格图层的属性表

    /// <summary>/// 根据栅格图层获取栅格数据集/// </summary>/// <param name="pRasterLayer"& ...

  5. 6.6.1 CPropertySheet类

    6.6.1 CPropertySheet类 http://book.51cto.com  2007-08-31 13:21  李建华 王占全  电子工业出版社博文视点  我要评论(0) 摘要:< ...

  6. 【Groovy】MOP 元对象协议与元编程 ( Expando 动态类 | 创建动态类 | 为动态类增加字段和方法 )

    文章目录 一.Expando 动态类简介 二.动态类创建 三.为动态类增加字段和方法 四.完整代码示例 一.Expando 动态类简介 Groovy 运行时 , 可以动态地创建一个类 , 该类称为 & ...

  7. 1.4 File类(文件操作类)获取文件属性,创建和删除文件\目录,遍历目录

    在 Java 中,File 类是 java.io 包中唯一代表磁盘文件本身的对象,也就是说,如果希望在程序中操作文件和目录,则都可以通过 File 类来完成.File 类定义了一些方法来操作文件,如新 ...

  8. Spring Data Jpa 实体类自动创建数据库表失败解决

    先说一下我遇到的这个问题,首先我是通过maven创建了一个spring boot的工程,引入了Spring data jpa,结果实体类创建好之后,运行工程却没有在数据库中自动创建数据表. 找了半天发 ...

  9. Java黑皮书课后题第9章:*9.3(使用Date类)编写程序创建一个Date对象,设置它的流逝时间分别为...,然后使用toString()方法分别显示上述日期

    Java黑皮书课后题第9章:*9.3(使用Date类)编写程序创建一个Date对象,设置它的流逝时间分别为...,然后使用toString方法分别显示上述日期 题目 代码 思路 代码 题目 代码 思路 ...

最新文章

  1. 澳大利亚铁路网络漏洞多多 极易遭攻击
  2. CentOS6.X 系统安装图文教程,超详细
  3. 海量java等互联网相关电子图书分享
  4. 基于servletjspmysql的表格增删改查操作
  5. 二级Python 第三方库
  6. 【干货】单日10亿GMV的.NET5电商平台,是如何设计的?
  7. [html] 写一个滚动吸顶的布局
  8. 【LeetCode笔记】312. 戳气球(Java、动态规划)
  9. 教授坦言:只要不退休,就始终会面临考核压力;如何帮助学生迈过毕业论文这道槛,已成为职业负荷之一...
  10. 使用Html5+C#+微信 开发移动端游戏详细教程 :(三)使用html5引擎搭建游戏框架...
  11. 轻轨与地铁有什么区别吗?
  12. 比较器matlab,用于比较 MATLAB 对象的公共属性的比较器 - MATLAB - MathWorks 中国
  13. THINK PHP 学习笔记20171115
  14. 计算机无法打印图片,电脑中打印机可以打印文档却无法打印图片如何解决
  15. 二维码设备巡检解决方案
  16. Android UpdateApk 增量更新
  17. 渗透工具-fscan内网安全漏洞扫描
  18. 有道云笔记客户端收起左侧目录边栏方法
  19. 好用的wordpress企业主题,Benevolent
  20. 浏览器的浏览模式——兼容模式

热门文章

  1. android培训那里好!万字长文轻松彻底入门Flutter,含泪整理面经
  2. visio2007小技巧
  3. H5是HTML5的缩写吗?
  4. 制作Mac的U盘启动系统
  5. mysql存储emoji表情_MySQL中支持emoji表情的存储
  6. Stratifyd:了解数据串联五步骤,解锁数据孤岛难题
  7. 20230210组会总结
  8. 基于51单片机超声波的停车场车位管理系统proteus仿真原理图PCB
  9. 【有趣的Python小程序】Python多个简单上手的库制作WalkLattice 走格子游戏 (思路篇)上
  10. Docker学习之镜像操作