CMFCPropertyGridCtrl响应消息

 CMFCPropertyGridCtrl响应消息

 

2013-5-5 flyfish www.boboding.com

 

一 类的继承关系

class CMFCPropertyGridCtrl : publicCWnd

class CMFCPropertyGridProperty : public CObject

 

 

查看CMFCPropertyGridCtrl的源码

//Overrides

         virtualvoidOnPropertyChanged(CMFCPropertyGridProperty* pProp) const;

 

 

voidCMFCPropertyGridCtrl::OnPropertyChanged(CMFCPropertyGridProperty* pProp) const

{

         ASSERT_VALID(this);

         ASSERT_VALID(pProp);

 

         pProp->SetModifiedFlag();

 

         GetOwner()->SendMessage(AFX_WM_PROPERTY_CHANGED,GetDlgCtrlID(), LPARAM(pProp));

}

 

这里我们可以重写OnPropertyChanged

 

二新建一个基于对话框的项目,对话框类是CDlgXXX

头文件增加

afx_msg LRESULTOnPropertyChanged(__in WPARAM wparam, __in LPARAM lparam );

 

消息映射的地方增加

ON_REGISTERED_MESSAGE(AFX_WM_PROPERTY_CHANGED, &CDlgXXX:OnPropertyChanged )

 

实现文件增加

LRESULT CDlgXXX::OnPropertyChanged(__in WPARAM wparam, __in  LPARAM lparam )

{

        

         return0;

}

 

三区分操作PropertyGrid某个Item的方法

一个ProtertyGrid可以多个Property,一个Property可以有多个Item,一个Item可以是Edit,可以是ComboBox,因为没有ID,要人为的区分。

 

方法如下

在对话框的头文件中定义

         CMFCPropertyGridCtrl  m_PropertyGrid_ctlMain;

         CMFCPropertyGridProperty*   m_pProperty;

 

CMFCPropertyGridProperty的构造函数

                  CMFCPropertyGridProperty(const CString& strName, constCOleVariant& varValue, LPCTSTR lpszDescr = NULL, DWORD_PTR dwData = 0,

                   LPCTSTR lpszEditMask = NULL,LPCTSTR lpszEditTemplate = NULL, LPCTSTR lpszValidChars = NULL);

 

 

第四个参数DWORD_PTRdwData,使用这个参数作为区分操作了哪个控件

 

m_pProperty1=new CMFCPropertyGridProperty(_T("标题"));

m_pProperty1->AddSubItem(new CMFCPropertyGridProperty(_T("属性"), (COleVariant) _T(""), _T(""),1));

最后一个参数值为1,这个1就相当于一个控件的ID。

 

 

LRESULT CDlgXXX::OnPropertyChanged(__in WPARAM wparam, __in  LPARAM lparam )

{

         CMFCPropertyGridProperty* pProp = reinterpret_cast<CMFCPropertyGridProperty*>(lparam);

         intnID=pProp->GetData();

         if (1==nID)

         {

//自定义的操作

}

return 0;

 

}

 

注意

如果使用的字符集非UnicodeMFC的使用不是在静态库中使用MFC库,如果要使用AfxMessageBox提示内容,之前要加SetFocus(),如果不加,当CMFCPropertyGridProperty中的某个Item是一个ComboBox类型的时就会出错。

 

 

你可能感兴趣的:(mfc)