题外话:

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

但查了好几本大部门的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. DB通用类:SQL Server 通用类库

    SQLServer通用类A using System; using System.Data; using System.Data.SqlClient; using System.Collections ...

  2. 【Unix网络编程】chapter5TCP回射服务器程序

    chapter5  5.1 概述 5.2 TCP回射服务器程序:main函数 int main(int argc, char **argv) { int listenfd,connfd; pid_t ...

  3. jquery选择器筛选器

    jQuery对象 Query 对象就是通过jQuery包装DOM对象后产生的对象.jQuery 对象是 jQuery 独有的. 如果一个对象是 jQuery 对象, 那么它就可以使用 jQuery 里 ...

  4. 通过git将本地文件上传到码云的方法

    1. 在码云上创建项目 在码云首页顶部,下图所示,右上角头像旁边的加号,鼠标移上去会显示下拉的,点击“新建项目”. 2. 安装Git 下载完成后安装即可,安装过程中没有注意事项,全部默认一直next直 ...

  5. Centos7基于容器安装运行Docker私有仓库及添加认证

    一.前言 官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去.但是,有时候,我们的使用场景需要我们拥有一个私有的镜像仓库用于管理 ...

  6. 查看Selinux和关闭Selinux

    查看Selinux和关闭Selinux   注:本文非原创文章,转自以下: 链接:https://www.jianshu.com/p/a7900dbf893c 查看SELinux状态: /usr/sb ...

  7. python学习之----收集整个网站

    如果只是从一个页面跳到另一个页面,那么网络爬虫是非常无聊的.为了有效地使 用它们,在用爬虫的时候我们需要在页面上做些事情.让我们看看如何创建一个爬虫来收 集页面标题.正文的第一个段落,以及编辑页面的链 ...

  8. SOA, EDA, 和 ESB

    SOA----面向服务架构,实际上强调的是软件的一种架构,一种支撑软件运行的相对稳定的结构,表面含义如此,其实SOA是一种通过服务整合来解决系统集成的一种思想.不是具体的技术,本质上是一种策略.思想. ...

  9. MySQL数据库相关开发入门

    使用apt-get来进行MYSQL数据库的安装,安装好以后就可以使用数据库了. 命令行键入mysql即可进入(因为数据库初始化的没有密码的):当然为了安全,你最好还是创建一个用户和密码. 当你创建过用 ...

  10. django---单表操作之增删改

    首先找到操作的首页面‘ 代码如下 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...