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类型的时就会出错。

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西笑生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值