题外话:

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

但查了好几本大部门的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. Spring MVC与注解相关的一些配置的方法

    在spring mvc中,注解是需要通过配置文件去开启的,一般简单的项目可分为两个配置文件,这里姑且叫做spring-mvc.xml与spring-context.xml.其中spring-mvc.x ...

  2. python-requests模块的讲解和应用

    在WINDOWS上可以通过命令行窗口(运行cmd命令), 利用pip进行自动地安装--------pip install requests 1.向网站发送请求:requests.get(url) 2. ...

  3. WPF 我的初学必备技能

    0.控件 0.1.内容控件(Content Controls) 0.2.条目控件(Items Controls) 0.3.文本控件(Text Controls) 0.4.范围控件(Range Cont ...

  4. java中六个时间类的使用和区别

    java.util.Date java.sql.Date   java.sql.Time   java.sql.Timestamp java.text.SimpleDateFormat java.ut ...

  5. 运行vbs脚本

    VBS是基于Visual Basic的脚本语言. VBS的全称是:Microsoft Visual Basic Script Edition.(微软公司可视化BASIC脚本版). 其语言类似Visua ...

  6. 【Git使用】sourcetree跳过注册的方法(转)

    当前只有Win的版本,Mac自行百度(笑) 很多人用git命令行不熟练,那么可以尝试使用sourcetree进行操作. 然鹅~~sourcetree又一个比较严肃的问题就是,很多人不会跳过注册或者操作 ...

  7. StanFord ML 笔记 第九部分

    第九部分: 1.高斯混合模型 2.EM算法的认知 1.高斯混合模型 之前博文已经说明:http://www.cnblogs.com/wjy-lulu/p/7009038.html 2.EM算法的认知 ...

  8. 关于 build tools

    1.build tools是什么 Build Tools 即构建工具是一个把源代码生成可执行应用程序的过程自动化的程序(例如Android app生成apk).构建包括编译.连接跟把代码打包成可用的或 ...

  9. [Writeup]奇怪的单点音

    [Writeup]奇怪的单点音 单点音韵律,感觉法继续 看题 一个wav文件,没啥好说的 听了一下,类似鸟叫的电子音,后面插了不规律的三次嘟嘟声 先排除摩斯电码吧(唯一知道的东西(σ゚∀゚)σ) 解法 ...

  10. python中复数的几件事儿

    第8题相当于1.23e+4 + 0即9.87e+6j.real的实部其实是0,9.87e+6全是虚部 第15题相当于1.23e+4 + 9.87e+6,即加了9.87e+6j.imag的虚部的数值9. ...