题外话:

最近在写一个重要的程序,想做的更灵活一些,于是想采用属于对话框的形式,如图所示

但查了好几本大部门的C++及MFC的书,还有很多的网上的资料,这方面的介绍实在是少之又少。不过,好在VS2013是半开源的。哈哈,里抽的代码看不到,但是函数声明还是都能看到的。这为我解决问题提供了一条好的方法 ,另外在线的 MSDN 也是一个很好的学习途径,不过,汉语翻译实在是不敢恭维,那叫一个烂,基本上看不懂,他说的是什么,只能啃英文。

所以说,学东西不容易,学会了,一定不要忘记总结,要不然,过段时间就忘记了,就很可惜了。

不说废话,言归正转

一、关于 CMFCPropertyGridCtrl  与 CMFCPropertyGridProperty 是一对好兄弟,他们叫是结合使用。不要看错了。

CMFCPropertyGridCtrl  是容器,他的里面包含若干 CMFCPropertyGridProperty 项目 。而 CMFCPropertyGridProperty  才是真正的项目内容。

而 CMFCPropertyGridProperty  神奇的地方是,他是可以嵌套的,一个属于套一个属性。

在我这个例子中,黑色的外框,可以认为是 CMFCPropertyGridCtrl  容器,在我这个图里面,我添加了 5个 顶级的属性。如“概述”就是第一个顶级的属性,可以使用 CMFCPropertyGridCtrl 的 AddProperty()方法:方法的声明如下

int AddProperty(CMFCPropertyGridProperty* pProp, BOOL bRedraw = TRUE, BOOL bAdjustLayout = TRUE);

在加入这个属于之前,需要构造一个属性。在这个属性里面,还有几个 二级的属于 如“概述”下面的 “标题”和“级别”两个属于,这两个属性属于 “概述”这个大属性里面的。

所以,我们声明好一个属性后,要在这个属性里面加入子属性。方法也挺简单,使用 CMFCPropertyGridProperty 的实例方法:

BOOL AddSubItem(CMFCPropertyGridProperty* pProp);

利用这个属于可以将其它的子属于加入到当前的属性之中。声明一个属于如何声明呢?看下面的声明函数,就一目了然了

// Group constructor 用于生成 组属性的 属性
CMFCPropertyGridProperty(const CString& strGroupName, DWORD_PTR dwData = , BOOL bIsValueList = FALSE); // Simple property 用于生成 子属性的 属性
CMFCPropertyGridProperty(const CString& strName, const COleVariant& varValue, LPCTSTR lpszDescr = NULL, DWORD_PTR dwData = ,
LPCTSTR lpszEditMask = NULL, LPCTSTR lpszEditTemplate = NULL, LPCTSTR lpszValidChars = NULL);

上面 有两个构造函数,用于构造一个新的属性。在这里这两个构造函数作用是不一样的

如果只是声明一个架构,如上面 图上顶级属性“概述”那样的属于。这种属于是没有属性值的,他只是一个标题。声明这种没有属性值的属性,用第一个构造函数。声明有具体值的属性使用 第2个构造函数。

然后就可能逐级构造出一个 CMFCPropertyGridCtrl  出来了。

贴一段代码,先来看一下构造一个属性的过程

CMFCPropertyGridCtrl m_wndPropList;
COleVariant var0;
var0.intVal = ;
var0.ChangeType(VT_I4);
CMFCPropertyGridProperty* pGroup1 = new CMFCPropertyGridProperty(_T("概述"));
pGroup1->AddSubItem(new CMFCPropertyGridProperty(_T("标题"), (_variant_t)_T("标题1"), _T("用于在视图中显示的标题内容")));
pGroup1->AddSubItem(new CMFCPropertyGridProperty(_T("级别"), var0, _T("当前显示计划的级别")));
m_wndPropList.AddProperty(pGroup1);

今天 就先简单的介绍一下 CMFCPropertyGridCtrl   控件。具体的细节,我们从第二节 慢慢讲起来。

补充点东西

CMFCPropertyGridCtrl 在真正使用之前,需要做一些设置,一般很简单

    m_wndPropList.EnableHeaderCtrl(FALSE);
m_wndPropList.EnableDescriptionArea();
m_wndPropList.SetVSDotNetLook();
m_wndPropList.MarkModifiedProperties();

在这里就是设置 是否显示 标题,是否显示描述区域,是否标志修改 等属性。我想聪明的你,一看就明白。

C++ 关于 CMFCPropertyGridCtrl 的使用方法 之一 (原创)的更多相关文章

  1. 蓝牙4.0BLE cc2540 usb-dongle的 SmartRF Packet Sniffer 抓取数据方法 【原创,多图】

    蓝牙4.0BLE cc2540 usb-dongle的 SmartRF Packet Sniffer 抓取数据方法 [原创,多图] spm=a1z10.1.w4004-5319414070.11.Zd ...

  2. C++ 关于 CMFCPropertyGridCtrl 的使用方法 之二 (原创)

    接上一节所讲,这一节咱们重点讲一下CMFCPropertyGridCtrl 所支持的数据表格的建立过程 在上一节中,咱们已经了解到了 CMFCPropertyGridCtrl  是要用到实例函数:Ad ...

  3. js自动轮播图片的两种循环方法(原创)

    用5个div,布局从左到右5张图片,从左到右5个div分别指定ID为img1,img2,img3,img4,img5.(背景是relative,5个div是相对于背景absolute定位) 显示如下: ...

  4. js嵌套对象相等比较的一种方法 (原创)

    做前端开发经常会遇到比较js对象是否相等的情况, 或者说其它问题往往会归结到这个问题上来:比如对象数组的去重复. 网上看到过很多例子, 但是基本上都是那种比较简单的对象结构, 而复杂的对象结构,比如对 ...

  5. word删除水平线(分割线)的方法(原创)

    在word里面,有时候我们会输入3个“-”或者“=”等符合,然后一个回车,生成了一条水平线(分割线). 研究了很久,今天终于发现删除它的方法了. 选中文本,点“格式”,选中“边框和底线”,点第一个子页 ...

  6. 关于ORALCE一个表空间的数据导入到另一个表空间的方法(原创)

    用户:   whnaproject     所属表空间: whnaproject 新用户   : wniec            所属新表空间: wniec 要求:将用户whnaproject中的数 ...

  7. Keepalived两节点出现双VIP情况及解决方法【原创】

    1.故障现象 俩台服务器keepalived的vip在俩台服务器同时出现 A:10.70.12.72 B:10.70.12.73 2.问题分析 1).先分析那台服务器在提供服务 A:10.70.12. ...

  8. Linux内核驱动--mmap设备方法【原创】

    mmap系统调用(功能) void *mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset) 内存映射函数mma ...

  9. 优化openfire服务器提升xmpp 效率的15个方法(原创)

    1.禁用原生xmpp搜索,使组织架构.人员数据本地化保存,并使客户端数据同步服务器,降低原生xmpp搜索的iq消耗,因为搜索是im应用的频繁操作: 2.禁用roster花名册.禁用presence包通 ...

随机推荐

  1. 反射中的BindingFlags

    不指定绑定标志  BindingFlags.Default 表示忽略 name 的大小写,不应考虑成员名的大小写   BindingFlags.IgnoreCase 只应考虑在所提供类型的层次结构级别 ...

  2. vs code编辑器使用教程指南

    1.安装插件: 这里可以搜索到插件并安装. 2.修改快捷键或查找快捷键: 这里可以进行快捷键的查找和修改 3.进入引用文件: 点击f12,或者右击快捷键可以看到进入引用文件的快捷方法. 4.查看目录:

  3. JSP:注册&登录

    数据库:Mysql 除了_id自动增长,其余全是varchar 注册:register.jsp <%@ page language="java" import="j ...

  4. jQuery实现点击控制左右两边元素挤压显示效果

    该功能实现的是:分左.右两边布局,左边div默认展开,左边div中有一个元素,点击实现左边div隐藏,右边div挤压过来:再点击实现左边显示,右边挤过去. 一.HTML代码: <div clas ...

  5. python初探 socket

    1.什么是socket? Socket中文译作:套接字,但是大家一般约定俗称的都用:socket.我想在解释socket是什么之前,先说它是用来干嘛的:socket是来建立‘通信’的基础,建立连接,传 ...

  6. (转)开放window是服务器端口——以8080为例

    本文记录两个内容: 1.win7下打开端口 2.服务器(2003或者其他老版的系统以2003为例) 测试端口时 可用telnet 命令 侦听端口:C:\Documents and Settings\a ...

  7. openStack queens 功能验证调试

    linux已经加载 的内核模块查看

  8. 关于lampp中的proftpd的一些使用

    这个是配置文件 ServerName "ProFTPD" ServerType standalone DefaultServer on Port 21 这个是端口 Umask Ma ...

  9. openx 添加新表和据库表和字段

    OpenX的版本是2.8.10.在数据表加完数据库之后,还不能读取和保存字段. OpenX使用scheme来 管理数据库表和字段, 修改数据库结构同时也要修改相关schema, 一个是etc/tabl ...

  10. nohup top & 问题: top: failed tty get

    执行 nohup top & nohup.out 显示 top: failed tty get +++++++++++++++++ top后台执行显示:top: failed tty get ...