標籤:
接上一節所講,這一節咱們重點講一下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 的使用方法 之二 (原創)