1、概述
CMFCPropertyGridCtrl显示一个Property Grid Ctrl控件,该控件内部可以包含从CMFCPropertyGridProperty类派生的可编辑属性,比如,CMFCPropertyGridProperty、CMFCPropertyGridColorProperty、CMFCPropertyGridFileProperty、CMFCPropertyGridFontProperty。 每种可编辑属性还可以包含子项;另外Property Grid Ctrl控件在底部还包含一个大小可变的区域,用来显示当前选择的Porperty的描述。
除了设置属性值,用户还可以选择对话框,比如Color对话框、File对话框、Font对话框。
2、设置Property Grid Ctrl表头
1*、通过成员方法 EnableHeaderCtrl(); 可以启用/禁用表头。
2*、通过HDITEM设置表头的列(注意:只应该是两列,多于两列貌似不能显示多于的部分)。
例子:
CRect r;
m_PropertyGridCtrl.GetHeaderCtrl().GetClientRect(&r);
HDITEM a;
a.cxy = r.Width()/3;
a.mask = HDI_WIDTH;
m_PropertyGridCtrl.GetHeaderCtrl().SetItem(0,&a);
a.pszText = _T("材质属性");
a.mask = HDI_TEXT;
m_PropertyGridCtrl.GetHeaderCtrl().SetItem(0,&a);
a.pszText = _T("值");
a.mask = HDI_TEXT;
m_PropertyGridCtrl.GetHeaderCtrl().SetItem(1,&a);
3、向Property Grid Ctrl控件中添加Property
例子:
CMFCPropertyGridProperty* pNewProp = NULL;
pNewProp = new CMFCPropertyGridProperty(_T("系数2"),(_variant_t)(int)1, _T(""));
pNewProp->EnableSpinControl(true, -10, 10);//设置滑动按钮
pNewProp->SetData(5);//设置标识,一般是枚举类型
pNewProp->SetValue((_variant_t)(int)10);
m_PropertyGridCtrl.AddProperty(pNewProp);
也可以向Property中添加子项sub1, 或者继续向sub1中添加子项sub11;添加的顺序是先将sub11添加到sub1中,然后再将sub1添加到Property中,最后再把Property添加到Property Grid Ctrl中;
例子:
CMFCPropertyGridProperty* pProp9 = NULL;
pProp9 = new CMFCPropertyGridProperty( _T("Property") );
CMFCPropertyGridProperty* pProp10 = NULL;
pProp10 = new CMFCPropertyGridProperty( _T("sub1"));
CMFCPropertyGridProperty* pProp11 = NULL;
pProp11 = new CMFCPropertyGridProperty( _T("sub11"), (_variant_t)(float)2.0, _T("") );
pProp11->SetData( 11000);
pProp11->SetValue( (_variant_t )(float)100.0);
pProp10->AddSubItem( pProp11);
pProp9->AddSubItem( pProp10 );
m_PropertyGridCtrl.AddProperty( pProp9 );
4、通过OnPropertyChanged消息响应函数使用设置的属性值
添加消息映射:
afx_msg LRESULT OnPropertyChanged (WPARAM wParam ,LPARAM lParam);
ON_REGISTERED_MESSAGE(AFX_WM_PROPERTY_CHANGED, OnPropertyChanged)
LRESULT MeshPropertyMaterialSet::OnPropertyChanged (WPARAM,LPARAM lParam)
{
...
}
在消息响应函数中拣选属性信息
参数:WPARAM :标识PropertyGridCtrl控件的ID,与GetDlgCtrlID(xxx)得到的相同;
LPARAM:标识PropertyGridCtrl控件的当前属性值改变的PropertyGridProperty。