VS2008下使用 CMFCPropertyGridCtrl 转载
http://blog.csdn.net/sunnyloves/article/details/5655575
在DLG中的基本应用 。
首先在Cxxdlg.h文件中加入
public:
CMFCPropertyGridCtrl m_MFCPGCtrl;
CMFCPropertyGridProperty* pGroup1;
CMFCPropertyGridProperty* pGroup2;
然后Cxxdlg.cpp中的OnInitDialog()中
CRect rc;
GetClientRect(rc);
rc.bottom -= 50;
rc.left += 50;
rc.right -= 50;
m_MFCPGCtrl.Create(WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER,rc,this,IDC_CMFCPGCTRL);
m_MFCPGCtrl.EnableHeaderCtrl(true,_T("参数"),_T("值"));
m_MFCPGCtrl.EnableDescriptionArea();
m_MFCPGCtrl.SetVSDotNetLook();
m_MFCPGCtrl.MarkModifiedProperties();
m_MFCPGCtrl.SetAlphabeticMode(false);
m_MFCPGCtrl.SetShowDragContext();
pGroup1 = new CMFCPropertyGridProperty(_T("参数组1"));
pGroup2 = new CMFCPropertyGridProperty(_T("参数组2"));
pGroup3 = new CMFCPropertyGridProperty(_T("参数组3"));
pGroup1->AddSubItem(new CMFCPropertyGridProperty(_T("参数1"),_T("2.5"),_T("这是参数1的说明")));
pGroup1->AddSubItem(new CMFCPropertyGridProperty(_T("参数2"),_T("3.5"),_T("这是参数2的说明")));
pGroup2->AddSubItem(new CMFCPropertyGridProperty(_T("参数3"),_T("4.5"),_T("这是参数3的说明")));
pGroup2->AddSubItem(new CMFCPropertyGridProperty(_T("参数4"),_T("5.5"),_T("这是参数4的说明")));
pGroup3->AddSubItem(new CMFCPropertyGridFileProperty(_T("选择文件"), TRUE, _T("D://defaule.csv"), _T("csv"), NULL, _T("csv Files(*.csv)|*.csv|All Files(*.*)|*.*||"), _T("选择csv文件")));//选择文件按钮
m_MFCPGCtrl.AddProperty(pGroup1);
m_MFCPGCtrl.AddProperty(pGroup2);
m_MFCPGCtrl.AddProperty(pGroup3);
m_MFCPGCtrl.ExpandAll();
就ok了
下面说下 通过消息活动输入值和输入的位置
.h中加入
afx_msg LRESULT OnPropertyChanged(WPARAM,LPARAM);
.cpp中加入红色
BEGIN_MESSAGE_MAP(CCMFCPGCtrlDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_REGISTERED_MESSAGE(AFX_WM_PROPERTY_CHANGED, OnPropertyChanged)
END_MESSAGE_MAP()
然后添加函数
LRESULT CCMFCPGCtrlDlg::OnPropertyChanged (WPARAM,LPARAM lParam)
{
CMFCPropertyGridProperty* pProp = (CMFCPropertyGridProperty*) lParam;
int i = (int) pProp->GetData ();
CString s = pProp->GetName(); //被改变的参数名
COleVariant t = pProp->GetValue(); //改变之后的值
t = pProp->GetOriginalValue(); //改变之前的值
CString d;
d = t.bstrVal; //从COleVariant到CString
return 0;
}
选项里添加ComboBox 也很方便
CMFCPropertyGridProperty* pProp = new CMFCPropertyGridProperty(_T("边框"), _T("Dialog Frame"), _T("其中之一: 无(None)、细(Thin)、可调整大小(Resizable)、对话框外框(Dialog Frame)"));
pProp->AddOption(_T("None"));
pProp->AddOption(_T("Thin"));
pProp->AddOption(_T("Resizable"));
pProp->AddOption(_T("Dialog Frame"));
pProp->AllowEdit(FALSE);
pGroup1->AddSubItem(pProp);
就可以有combox出来了