VS08SP1中CMFCPropertyGridCtrl的基本用法


在DLG中的基本应用 。

首先在Cxxdlg.h文件中加入

[cpp]  view plain copy
  1. public:  
  2.  CMFCPropertyGridCtrl  m_MFCPGCtrl;  
  3.  CMFCPropertyGridProperty* pGroup1;  
  4.  CMFCPropertyGridProperty* pGroup2;  

然后Cxxdlg.cpp中的OnInitDialog()中

[cpp]  view plain copy
  1. CRect rc;  
  2.  GetClientRect(rc);  
  3.  rc.bottom -= 50;  
  4.  rc.left += 50;  
  5.  rc.right -= 50;  
  6.  m_MFCPGCtrl.Create(WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER,rc,this,IDC_CMFCPGCTRL);  
  7.  m_MFCPGCtrl.EnableHeaderCtrl(true,_T("参数"),_T("值"));  
  8.  m_MFCPGCtrl.EnableDescriptionArea();  
  9.  m_MFCPGCtrl.SetVSDotNetLook();  
  10.  m_MFCPGCtrl.MarkModifiedProperties();  
  11.  m_MFCPGCtrl.SetAlphabeticMode(false);  
  12.    
  13.  m_MFCPGCtrl.SetShowDragContext();  
  14. pGroup1 = new CMFCPropertyGridProperty(_T("参数组1"));  
  15.  pGroup2 = new CMFCPropertyGridProperty(_T("参数组2"));  
  16.  pGroup3 = new CMFCPropertyGridProperty(_T("参数组3"));  
  17.  pGroup1->AddSubItem(new CMFCPropertyGridProperty(_T("参数1"),_T("2.5"),_T("这是参数1的说明")));  
  18.  pGroup1->AddSubItem(new CMFCPropertyGridProperty(_T("参数2"),_T("3.5"),_T("这是参数2的说明")));  
  19.  pGroup2->AddSubItem(new CMFCPropertyGridProperty(_T("参数3"),_T("4.5"),_T("这是参数3的说明")));  
  20.  pGroup2->AddSubItem(new CMFCPropertyGridProperty(_T("参数4"),_T("5.5"),_T("这是参数4的说明")));  
  21.  pGroup3->AddSubItem(new CMFCPropertyGridFileProperty(_T("选择文件"), TRUE, _T("D://defaule.csv"), _T("csv"), NULL, _T("csv Files(*.csv)|*.csv|All Files(*.*)|*.*||"), _T("选择csv文件")));//选择文件按钮  
  22.  m_MFCPGCtrl.AddProperty(pGroup1);  
  23.  m_MFCPGCtrl.AddProperty(pGroup2);  
  24.  m_MFCPGCtrl.AddProperty(pGroup3);  
  25.   
  26.  m_MFCPGCtrl.ExpandAll();  

就ok了 

下面说下 通过消息活动输入值和输入的位置

 

.h中加入

[cpp]  view plain copy
  1. afx_msg LRESULT OnPropertyChanged(WPARAM,LPARAM);  

.cpp中加入红色

[cpp]  view plain copy
  1. BEGIN_MESSAGE_MAP(CCMFCPGCtrlDlg, CDialog)  
  2.  ON_WM_SYSCOMMAND()  
  3.  ON_WM_PAINT()  
  4.  ON_WM_QUERYDRAGICON()  
  5.  //}}AFX_MSG_MAP  
  6.  ON_REGISTERED_MESSAGE(AFX_WM_PROPERTY_CHANGED, OnPropertyChanged)  
  7. END_MESSAGE_MAP()  

 

然后添加函数

[cpp]  view plain copy
  1. LRESULT CCMFCPGCtrlDlg::OnPropertyChanged (WPARAM,LPARAM lParam)  
  2. {  
  3.  CMFCPropertyGridProperty* pProp = (CMFCPropertyGridProperty*) lParam;  
  4.    
  5.  int i = (int) pProp->GetData ();  
  6.    
  7.  CString s = pProp->GetName();  //被改变的参数名  
  8.  COleVariant t = pProp->GetValue(); //改变之后的值  
  9.  t = pProp->GetOriginalValue();  //改变之前的值  
  10.  CString d;  
  11.    
  12.  d = t.bstrVal;      //从COleVariant到CString  
  13.  return 0;  
  14. }  


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

2010.07.01更新

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

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

2010.08.02

选项里添加ComboBox 也很方便

[cpp]  view plain copy
  1. CMFCPropertyGridProperty* pProp = new CMFCPropertyGridProperty(_T("边框"), _T("Dialog Frame"), _T("其中之一: 无(None)、细(Thin)、可调整大小(Resizable)、对话框外框(Dialog Frame)"));  
  2.  pProp->AddOption(_T("None"));  
  3.  pProp->AddOption(_T("Thin"));  
  4.  pProp->AddOption(_T("Resizable"));  
  5.  pProp->AddOption(_T("Dialog Frame"));  
  6.  pProp->AllowEdit(FALSE);  
  7.  pGroup1->AddSubItem(pProp);  

 

就可以有combox出来了

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

2012-01-20

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

[cpp]  view plain copy
  1. 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 plain copy
  1. class CBTinValueProperty :public CMFCPropertyGridProperty  
  2. {  
  3. public:  
  4.     CBTinValueProperty(const CString& strName,const COleVariant& varValue,LPCTSTR lpszDescr = NULL):  
  5.       CMFCPropertyGridProperty(strName,varValue,lpszDescr)  
  6.       {}  
  7.   
  8.       virtual ~CBTinValueProperty()  
  9.       {}  
  10.   
  11.       virtual BOOL HasButton() const;  
  12.   
  13.       virtual void OnClickButton(CPoint point);  
  14. protected:  
  15. private:  
  16.       
  17. };  

[cpp]  view plain copy
  1. BOOL CBTinValueProperty::HasButton() const  
  2. {  
  3.     return TRUE;  
  4. }  
  5.   
  6.   
  7. void CBTinValueProperty::OnClickButton(CPoint point)  
  8. {  
  9.     AfxMessageBox(_T("ok"));  
  10.       
  11. }  



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

2013-08-29

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

1

-2

--3

---4

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

[cpp]  view plain copy
  1. CMFCPropertyGridProperty* pProp1 = new CMFCPropertyGridProperty(_T("啊"));  

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

2013-09-15

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


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

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

[cpp]  view plain copy
  1. _variant_t((UINT)0)   

因为这样就相当于设置了_variant_t参数的格式是UINT 后面再SetValue时可能会触发断言,提示不匹配
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值