接上一节所讲,这一节咱们重点讲一下CMFCPropertyGridCtrl 所支持的数据表格的建立过程
在上一节中,咱们已经了解到了 CMFCPropertyGridCtrl 是要用到实例函数:AddProperty()。现在 咱们来具体分析一下过程
要想建立一个属性一般来讲我们先建立一个项目:如上一节中提到的 “概述”项目属性。这个属于的一个大的特点,就是这个属性并没有一个对应的值,也就是说 这个也是一个属性,但是却不是用来表达一个具体的属性值,而仅是为了表示一个“组Group”的。
所以,对于属性的创建,有两种构造函数:一种是构造一个组属性,一种是构造一个值属性。先来看 构造一个组属性
CMFCPropertyGridProperty(const CString& strGroupName, DWORD_PTR dwData = 0, BOOL bIsValueList = FALSE);
在这个参数列表中 第一个参数是一个 字符串值,这是用于指定组的名称,也就是组名。用于显示用的。
所以一般情况下,我们来构造一个组的时候,只需要指定第一个参数就可以了,因为第二、三个参数有默认值,具体的参数说明,可以参考下面的 网址:
举个例子,如下面这句话
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吧
有了上面这个介绍,你的程序,应该就可以运行起来了。
今天,就先说到这里,明天介绍,如果读取这里面的值。