接上一节所讲,这一节咱们重点讲一下CMFCPropertyGridCtrl 所支持的数据表格的建立过程

在上一节中,咱们已经了解到了 CMFCPropertyGridCtrl  是要用到实例函数:AddProperty()。现在 咱们来具体分析一下过程

要想建立一个属性一般来讲我们先建立一个项目:如上一节中提到的 “概述”项目属性。这个属于的一个大的特点,就是这个属性并没有一个对应的值,也就是说 这个也是一个属性,但是却不是用来表达一个具体的属性值,而仅是为了表示一个“组Group”的。

所以,对于属性的创建,有两种构造函数:一种是构造一个组属性,一种是构造一个值属性。先来看 构造一个组属性

CMFCPropertyGridProperty(const CString& strGroupName, DWORD_PTR dwData = 0, BOOL bIsValueList = FALSE);

在这个参数列表中 第一个参数是一个 字符串值,这是用于指定组的名称,也就是组名。用于显示用的。

所以一般情况下,我们来构造一个组的时候,只需要指定第一个参数就可以了,因为第二、三个参数有默认值,具体的参数说明,可以参考下面的 网址:

https://msdn.microsoft.com/query/dev12.query?appId=Dev12IDEF1&l=ZH-CN&k=k(afxpropertygridctrl%2FCMFCPropertyGridProperty%3A%3ACMFCPropertyGridProperty);k(CMFCPropertyGridProperty%3A%3ACMFCPropertyGridProperty);k(CMFCPropertyGridProperty);k(DevLang-C%2B%2B);k(TargetOS-Windows)&rd=true

举个例子,如下面这句话

CMFCPropertyGridProperty* pGroup1 = new CMFCPropertyGridProperty(_T("概述"));

有了这个组属性后,那们就需要在组属性里面添加一个值属性:值属性的构造函数如下

CMFCPropertyGridProperty(const CString& strName, const COleVariant& varValue, LPCTSTR lpszDescr = NULL, DWORD_PTR dwData = 0,
LPCTSTR lpszEditMask = NULL, LPCTSTR lpszEditTemplate = NULL, LPCTSTR lpszValidChars = NULL);

在这里也有很多的参数,我们最关心的是前面几个属性

strName :表示属性的名称

varValue:表示属性的值

lpszDescr :此属性的描述内容,用于在下方的描述框内显示的描述内容。

一般这三个属性就足够了。

举个例子:

pGroup1->AddSubItem(new CMFCPropertyGridProperty(_T("标题"), (_variant_t)_T("标题1"), _T("用于在视图中显示的标题内容")));

上面这句话解释一下:后面的New语句就是生成一个值属性。在这个构造函数中,指定了 名称 、值还有描述内容。

然后利用 属性的一个实例函数 AddSubItem 将New 生成的值属性添加到 组属性中。这样 在 组属性“概述”中,就有了一个“标题”属性,他的值是 字符“标题1”,描述的内容 为“用于在视图中显示的标题内容”。是不是突然发现 好神奇呀!

同理,我们也可以再造一个属性

pGroup1->AddSubItem(new CMFCPropertyGridProperty(_T("级别"), var0, _T("当前显示计划的级别")));

好了,我们现在有一个组属性,并且组属性里面还有两个值属性。这个组,我感觉已经做好了。现在要将做好的这个大馒头放在锅里面。一句话搞定:

m_wndPropList.AddProperty(pGroup1);

可能有些 学将我写的代码写到自己的程序中不能用,因为里面在var0是个鸟东西呀!这个东西,需要单独拿出来说一下。

因为 CMFCPropertyGridCtrl  控件,他的参数用了一个特殊的类型 COleVariant 。这是个那门子类型,搞不懂,查了一下资料,好像还很先进,管它妈怎么先进,关键得会用呀。百度一下吧,找到了一些用法,这东西可以代表任意类型的数据,可以是字符串也可以是 数字。就是用的时候,必须要指定一下才行,要不然,他工作起来会出错的。当然,如果类型非常明确也可不指定,它会自己判断一下。这种类型好像与 _variant_t类型是亲戚,所以很多情况下,这两个类型可以互用。但是构造函数上只用了COleVariant  ,我觉得用 COleVariant  可能更靠谱一些。这东西怎么用呢。

第一步:定义一个变量   第二步:直接赋值  第三步:转换类型 。三步就可以了:举个例子

COleVariant var0;
var0.intVal = 0;
var0.ChangeType(VT_I4);

由于我想要用var0 保存一个 int 类型的数据,所以,我要将值 保存至 intVal  变量中,如果你是其它变量,就要保存至正确的变量位置。

然后,将此变量 转换成 VT_I4 这个类型,就是一个整数型。
具体的说明,就请查一下 MSDN吧

有了上面这个介绍,你的程序,应该就可以运行起来了。

今天,就先说到这里,明天介绍,如果读取这里面的值。

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

  1. .NET 扩展方法 (二)

    上一篇随笔 .NET 扩展方法 (一) 已经对 扩展方法有了大致的介绍,这篇算是一个补充,让我们来看一下扩展方法的几个细节: 一.扩展方法具有继承性 当使用扩展方法扩展一个类型的时候,其也扩展了派生类 ...

  2. 编写高质量JS代码的68个有效方法(二)

    [20141011]编写高质量JS代码的68个有效方法(二) *:first-child { margin-top: 0 !important; } body>*:last-child { ma ...

  3. Eclipse中如何开启断言(Assert),方法有二

    Eclipse中如何开启断言(Assert),方法有二:1.Run -> Run Configurations -> Arguments页签 -> VM arguments文本框中加 ...

  4. WPF文字描边的解决方法(二)——支持文字竖排和字符间距调整

    原文:WPF文字描边的解决方法(二)--支持文字竖排和字符间距调整 自前天格式化文本效果出来后,今天又添加文本竖排和调整字符间距的功能.另外,由于上次仓促,没来得及做有些功能的设计时支持,这次也调整好 ...

  5. selenium定位方法(二)

    selenium定位方法(二)  1.xpath定位:xpath是在XML中查找节点所在的路径的表达式 1)绝对路径的Xpath表达式 例:/html/body/div/div[1]/ul//li[3 ...

  6. Python 数据类型常用的内置方法(二)

    目录 Python 数据类型常用的内置方法(二) 1.字符串类型常用内置方法 1.upper.lower.isupper.islower 2.startswith.endswith 3.format ...

  7. 《手把手教你》系列基础篇(九十七)-java+ selenium自动化测试-框架设计篇-Selenium方法的二次封装和页面基类(详解教程)

    1.简介 上一篇宏哥介绍了如何设计支持不同浏览器测试,宏哥的方法就是通过来切换配置文件设置的浏览器名称的值,来确定启动什么浏览器进行脚本测试.宏哥将这个叫做浏览器引擎类.这个类负责获取浏览器类型和启动 ...

  8. Jquery自定义扩展方法(二)--HTML日历控件

    一.概述 研究了上节的Jquery自定义扩展方法,自己一直想做用jquery写一个小的插件,工作中也用到了用JQuery的日历插件,自己琢磨着去造个轮子--HTML5手机网页日历控件,废话不多说,先看 ...

  9. sqlite:多线程操作数据库“database is locked”解决方法(二)

    上一篇博客<sqlite:多线程操作数据库“database is locked”解决方法>通过注册延时函数的方法来处理数据库被锁的问题.此方法固然能解决问题,但是在多个线程向数据库写入大 ...

随机推荐

  1. 本地IP,掩码,网关,DNS设置

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. 基于HAProxy+Keepalived高可用负载均衡web服务的搭建

    一 原理简介 1.HAProxyHAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web ...

  3. DB通用类:Sqlite通用类库

    Sqlite通用类库 using System; using System.Collections; using System.Collections.Generic; using System.IO ...

  4. 机器学习简要笔记(三)-KNN算法

    #coding:utf-8 import numpy as np import operator def classify(intX,dataSet,labels,k): ''' KNN算法 ''' ...

  5. linux5.6以下版本的不兼容问题

    之前一直用的都是mysql5.6版本,最近突然使用到了mysql5.1版本,于是在导入数据的时候便出现了很多由于版本不兼容的问题. 1.mysql5.1没有datetime类型,所以对于时间类型,只能 ...

  6. day20re模块 正则表达式

    re模块,正则1 re是什么 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法. 就是用来描述一类事物的规则.就是一些带有特殊含义的符号或者符号的组合.    作 ...

  7. inno setup 软件打包

    2017-05-26 软件开发完毕以后,要进行打包发布,有几款打包用的软件很常见:innosetup,nullsoft,installshield.本人今天终于把自己独立开发的呈现软件打了包.第一个版 ...

  8. MySQL----ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes

    1.问题描述 在导入同事提供的一个sql文件时候,出现了一个1071错误,总结学习一下: 2.分析问题 错误的字面意思是说mysql字段设置的值太长了,不能大于767个字节,在网上找了一些资料后才知道 ...

  9. tomcat -web.xml里的内容

    <?xml version="1.0" encoding="UTF-8"?> <Server port="8005" sh ...

  10. python中logging模块的一些简单用法

    用Python写代码的时候,在想看的地方写个print xx 就能在控制台上显示打印信息,这样子就能知道它是什么了,但是当我需要看大量的地方或者在一个文件中查看的时候,这时候print就不大方便了,所 ...