您的位置:首页 > 运维架构

VS08SP1中CMFCPropertyGridCtrl的基本用法

2013-12-04 16:28 330 查看




在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;

}

 

 

 ==============================================================================

2010.07.01更新

今天发现vs2008sp1里 用向导生成的SDI  vs主题框架里  就有很多CMFCPropertyGridProperty的应用 可以参考

===============================================================================

2010.08.02

选项里添加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出来了

=================================================================================

2012-01-20

程序里想获得prop的指针可以这样

[cpp] view
plaincopy

CMFCPropertyGridProperty* pProp = m_PGCtrl.GetProperty(i)->GetSubItem(j)//i,j分别是大类和小类的序号  

比如

0

-0

--0

--1

-1

1

-0

--0

-1

2

=================================================================================

2013-08-20

想要在它的按钮里弹出自己的对话框可以这样派生一个类

[cpp] view
plaincopy

class CBTinValueProperty :public CMFCPropertyGridProperty  

{  

public:  

    CBTinValueProperty(const CString& strName,const COleVariant& varValue,LPCTSTR lpszDescr = NULL):  

      CMFCPropertyGridProperty(strName,varValue,lpszDescr)  

      {}  

  

      virtual ~CBTinValueProperty()  

      {}  

  

      virtual BOOL HasButton() const;  

  

      virtual void OnClickButton(CPoint point);  

protected:  

private:  

      

};  

[cpp] view
plaincopy

BOOL CBTinValueProperty::HasButton() const  

{  

    return TRUE;  

}  

  

  

void CBTinValueProperty::OnClickButton(CPoint point)  

{  

    AfxMessageBox(_T("ok"));  

      

}  

=================================================================================

2013-08-29

注意如果有很多个层次 比如

1

-2

--3

---4

其中的2 3 都要设置成Group的形式 ,也就是构造的时候只有一个参数

[cpp] view
plaincopy

CMFCPropertyGridProperty* pProp1 = new CMFCPropertyGridProperty(_T("啊"));  

=============================================================================

2013-09-15

关于所有new出来的内存 都不用人工的delete释放,控件类会自动释放

===========================================================================

new对象的时候第2个参数最好不要用这样

[cpp] view
plaincopy

_variant_t((UINT)0)   

因为这样就相当于设置了_variant_t参数的格式是UINT 后面再SetValue时可能会触发断言,提示不匹配
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: