需將文字標籤與下拉框、顏色選擇器、檔案路徑、字體選擇等異構控件整齊對齊呈現,傳統 Static + ComboBox 排版繁瑣。MFC Feature Pack 提供的 CMFCPropertyGridCtrl 即 Visual Studio「屬性視窗」同款控件,原生支援分組、描述區、標題列、修改標記,開箱即用。
IDC_MFCPROPERTYGRID_TESTm_propertyGrid預設首欄極窄,需在 OnInitDialog 中調整 Header Control:
HDITEM item;
item.cxy = 120; // 目標寬度
item.mask = HDI_WIDTH;
m_propertyGrid.GetHeaderCtrl().SetItem(0, &item);
| 類別 | 用途 | 關鍵代碼 |
|---|---|---|
CMFCPropertyGridProperty | 一般字串/數值/下拉選項 | AddOption() + AllowEdit(FALSE) |
CMFCPropertyGridColorProperty | 顏色選擇器 | 建構式傳 RGB(0,111,200) |
CMFCPropertyGridFileProperty | 檔案/目錄選擇對話框 | 建構式指定預設路徑與過濾器 |
CMFCPropertyGridFontProperty | 字體選擇對話框 | 建構式傳 LOGFONT |
CMFCPropertyGridProperty* group1 = new CMFCPropertyGridProperty(_T("外觀"));
CMFCPropertyGridProperty* group2 = new CMFCPropertyGridProperty(_T("行為"));
group1->AddSubItem(pPropColor);
group1->AddSubItem(pPropFont);
group2->AddSubItem(pPropFile);
group2->AddSubItem(pPropCombo);
m_propertyGrid.AddProperty(group1);
m_propertyGrid.AddProperty(group2);
CMFCPropertyGridCtrl* pGrid = new CMFCPropertyGridCtrl;
pGrid->Create(WS_CHILD | WS_BORDER | WS_VISIBLE, CRect(400,100,600,200), this, WM_USER+100);
pGrid->EnableHeaderCtrl(TRUE);
pGrid->SetVSDotNetLook(); // VS 風格外觀
pGrid->MarkModifiedProperties(); // 高亮修改項
動態建立適合執行期依配置生成屬性頁,靜態建立適合固定佈局,二者功能等價。