程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> CMFCPropertyGridCtrl的簡單教程

CMFCPropertyGridCtrl的簡單教程

編輯:關於C語言

我寫博客從一開始還是日經一文,到後來是周經一文,現在都直接變成月經一文了。。

閒話少說,最近的一個需求是把一些文字跟下拉框集合、對應在一起,如果就那樣堆幾個static、comboBox平鋪在對話框上,不免顯得有些單調,而且文字對齊啥的也麻煩,還要排版。找來找去發現了CMFCPropertyGridCtrl這個控件。找了點教程,發現這個控件使用起來還是蠻簡單的,關鍵一點就是要搞清楚層次關系,才不至於混亂,誰是誰的子項,誰是誰的組員等等。

老慣例,上例子。

用vs2010建立一個基於對話框的MFC工程,拖一個CMFCPropertyGridCtrl進去,大小調整好。注:首先采用的是靜態創建的辦法,大部分需要的屬性在對話框編輯界面就可以編輯。)然後為該控件更改ID為IDC_MFCPROPERTYGRID_TEST,並且使用ClassWizard為控件添加一個變量m_propertyGrid。

接下來更改控件的一些屬性。

其實這不就是個CMFCPropertyGridCtrl控件麼。Border神馬的基礎東西就不說了。

"Description Rows Count"指的是下面的描述部分有幾行。

"Enable Description Area"表示是否啟動下面的描述功能

"Enable Header"表示是否啟動表頭

"Mark Modified Properties"表示是否著重顯示更改項

可以按照需求來進行設置。這裡先使用默認的設置。先編譯運行一下,比較簡陋。

好,接下來該添加東西進去了。

在OnInitDialog中添加如下代碼,我會一行一行解釋。

  1. CMFCPropertyGridProperty * pProp1 = new CMFCPropertyGridProperty( 
  2.         _T("天朝適合生存嗎?"),  
  3.         _T("BKJIA不談政治"),  
  4.         _T("這是描述部分"));   
  5.  
  6. m_propertyGrid.AddProperty(pProp1); 

第一行是建立一個新的項目,也是最普通的項目,CMFCPropertyGridProperty。與這種項目同級的還有CMFCPropertyGridColorProperty、CMFCPropertyGridFontProperty以及CMFCPropertyGridFileProperty,等會都可以試一下。調用構造函數時傳入的三個參數分別是條目名稱、默認選項及描述文字。運行一下就知分曉。

餓滴神啊,腫麼這個樣子。不過該有的全有,只需要設置一下就行。這裡得提一筆,微軟似乎非常喜歡把第一列的寬度設置為“只能容得下一個普通的5號小宋體的寬度”,不光是CMFCPropertyGrid,連CListCtrl也是如此,需要動點特殊的手段才能調整過來。在這段代碼的前面加這麼幾句:

  1. HDITEM item; 
  2. item.cxy=120; 
  3. item.mask=HDI_WIDTH; 
  4. m_propertyGrid.GetHeaderCtrl().SetItem(0, new HDITEM(item)); 

如此再運行,就會比較好看了。

好,接下來我們看一下右邊的value部分還能換成神馬東西。

如同vs2010裡提供的“屬性”欄一樣,這CMFCPropertyGridCtrl應該也支持下拉菜單,好,就來添加下拉菜單看看。修改剛才的代碼:

  1. CMFCPropertyGridProperty* pProp2 = new CMFCPropertyGridProperty(
  2. _T("我是不是帥哥?"),  
  3.     _T("看選項"), 
  4. _T("")); 
  5. pProp2->AddOption(_T("是")); 
  6. pProp2->AddOption(_T("肯定是")); 
  7. pProp2->AddOption(_T("絕對是")); 
  8. pProp2->AllowEdit(FALSE);  //不允許對選項進行編輯
  9.  
  10. m_propertyGrid.AddProperty(pProp2); 

然後運行,就會如願以償地出現下拉框了。

接下來是另外三個同級的項目:

  1. CMFCPropertyGridColorProperty * pProp3 = new CMFCPropertyGridColorProperty( 
  2.     _T("顏色"), RGB(0, 111, 200)); 
  3. m_propertyGrid.AddProperty(pProp3); 
  4.  
  5. CMFCPropertyGridFileProperty * pProp4 = new CMFCPropertyGridFileProperty(
  6. _T("打開文件"), TRUE, _T("D:\\test.txt")); 
  7. m_propertyGrid.AddProperty(pProp4); 
  8.  
  9. LOGFONT font = {NULL}; 
  10. CMFCPropertyGridFontProperty * pProp5 = new CMFCPropertyGridFontProperty(
  11. _T("選擇字體"), font); 
  12. m_propertyGrid.AddProperty(pProp5); 

注:每一種類型的項目都有2個或3個重載函數,可以自己根據需求慢慢挖掘,在這裡就不贅述了。

運行效果如下:

這麼些不同種類的東西亂七八糟堆在一起,是不是有點不科學?那麼就引入下一個概念:分組。回到第一張圖,vs2010的“屬性”欄分了三個組,分別是Apperance、Behavior和Misc,看起來就清晰多了,我們也可以。

好,來重新構建一下我們的代碼:

  1. CMFCPropertyGridProperty * group1 = new CMFCPropertyGridProperty(_T("分組1")); 
  2. CMFCPropertyGridProperty * group2 = new CMFCPropertyGridProperty(_T("分組2")); 
  3.  
  4. group1->AddSubItem(pProp1); 
  5. group1->AddSubItem(pProp2); 
  6. group2->AddSubItem(pProp3); 
  7. group2->AddSubItem(pProp4); 
  8. group2->AddSubItem(pProp5); 
  9.  
  10. m_propertyGrid.AddProperty(group1); 
  11. m_propertyGrid.AddProperty(group2); 

編譯運行效果如下:

至此,靜態創建CMFCPropertyGridCtrl的方法就結束了。

還有一種方法是動態創建,與CStatic、CEdit等控件無二,在創建之後也可以利用自帶的函數修改控件的屬性,如:

  1. CMFCPropertyGridCtrl * propertyGrid = new CMFCPropertyGridCtrl; 
  2. propertyGrid->Create(WS_CHILD | WS_BORDER | WS_VISIBLE, CRect(400, 100, 600, 200), this, WM_USER + 100); 
  3. propertyGrid->EnableHeaderCtrl(TRUE);  //使用表頭 
  4. propertyGrid->SetVSDotNetLook();  //使用樣式 
  5. propertyGrid->MarkModifiedProperties(); //著重顯示更改過的部分 

更多屬性留待各位發掘一下啦。

本文出自 “正面旺得福反面泰瑞寶” 博客,請務必保留此出處http://serious.blog.51cto.com/242085/956984

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved