VS08SP1中CMFCPropertyGridCtrl的基本用法

转载 2013年12月04日 16:28:19


在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的指针可以这样

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

比如

0

-0

--0

--1

-1

1

-0

--0

-1

2


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

2013-08-20

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

  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. };  

  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的形式 ,也就是构造的时候只有一个参数

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

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

2013-09-15

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


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

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

  1. _variant_t((UINT)0)   

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

CMFCPropertyGridCtrl 首列最小问题

如何改变CMFCPropertyGridCtrl的列宽?CMFCPropertyGridProperty m_pgc;...  HDITEM item;  item.cxy=100;  item.ma...
  • Augusdi
  • Augusdi
  • 2010年12月13日 09:29
  • 1481

CMFCPropertyGridCtrl相关;属性改变事件代码

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://serious.blog.51cto.com/242085/956984 我写...
  • h_h_w
  • h_h_w
  • 2013年07月12日 09:58
  • 2054

CMFCPropertyGridCtrl响应消息

CMFCPropertyGridCtrl响应消息   2013-5-5 flyfish www.boboding.com   一 类的继承关系 class CMFCPro...
  • yongzhen150
  • yongzhen150
  • 2015年04月29日 23:24
  • 791

CMFCPropertyGridCtrl的使用

1、概述        CMFCPropertyGridCtrl显示一个Property Grid Ctrl控件,该控件内部可以包含从CMFCPropertyGridProperty类派生的可编辑属性...
  • xiaoxiaoyusheng2012
  • xiaoxiaoyusheng2012
  • 2015年01月31日 21:23
  • 2462

CMFCPropertyGridCtrl的简单教程

用vs2010建立一个基于对话框的MFC工程,拖一个CMFCPropertyGridCtrl进去,大小调整好。(注:首先采用的是静态创建的办法,大部分需要的属性在对话框编辑界面就可以编辑。)然后为该控...
  • nodeman
  • nodeman
  • 2014年10月25日 09:56
  • 659

CMFCPropertyGridCtrl 的简单教程

我写博客从一开始还是日经一文,到后来是周经一文,现在都直接变成月经一文了。。 闲话少说,最近的一个需求是把一些文字跟下拉框集合、对应在一起,如果就那样堆几个static、comboBox平铺在对话框上...
  • leixiaohua1020
  • leixiaohua1020
  • 2013年10月15日 20:15
  • 11577

CMFCPropertyGridCtrl

用vs2010建立一个基于对话框的MFC工程,拖一个CMFCPropertyGridCtrl进去,大小调整好。(注:首先采用的是静态创建的办法,大部分需要的属性在对话框编辑界面就可以编辑。)然后为该控...
  • yujiefei0309
  • yujiefei0309
  • 2013年09月09日 13:49
  • 1412

C++的一些基本用法

这篇博客可能不是像通常的编程书籍一样,从“hello world”进行一个可视化的一个例程,主要就是对一些C++的特性,包括关键字的一些理解,也是用到一个整理一个,所以逻辑性和连贯性可能不是很好,纯粹...
  • Felaim
  • Felaim
  • 2017年08月10日 12:51
  • 216

曲线解决CMFCPropertyGridCtrl掩码的bug2009年12月30日 星期三 下午 01:24CMFCPropertyGridCtrl这个控件当用到掩码时,会有问题.解决办法用其他掩码替代.下面是一个IP掩码处理方法.代码如下

2009年12月30日 星期三 下午 01:24CMFCPropertyGridCtrl这个控件当用到掩码时,会有问题.解决办法用其他掩码替代.下面是一个IP掩码处理方法.代码如下class CMyM...
  • Augusdi
  • Augusdi
  • 2010年12月13日 13:30
  • 2447

jQuery基本用法

screen.css:/**********************************Use: Reset Styles for all browsers********************...
  • heyuanjia520
  • heyuanjia520
  • 2009年12月08日 12:51
  • 11090
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VS08SP1中CMFCPropertyGridCtrl的基本用法
举报原因:
原因补充:

(最多只允许输入30个字)