吭啊,AFX_WM_PROPERTY_CHANGED消息

昨天搞了很久,当一个CMFCPropertyGridCtrl的属性改变时,如何得到这个改变。查MSDN有个OnPropertyChanged方法,由MFC框架调用,然后查源码,在afxpropertygridctrl.cpp中找到OnPropertyChanged方法,其中有一句GetOwner()->SendMessage(AFX_WM_PROPERTY_CHANGED, GetDlgCtrlID(), LPARAM(pProp));原来这个方法会发送个消息,然后由用户处理。于是疯狂的在CMFCPropertyGridCtrl中添加这个消息(然后必须是各种不行),完全接收不到。今天再过来静下心看,突然发现昨天漏个很重要的东西,GetOwner(),于是测GetOwner()返回的是什么,原来是CDockablePane,然后再CDockablePane中响应这个消息,果然就行了。

但是为什么呢?MFC为什么不让CMFCPropertyGridCtrl自己处理这个消息呢?万一我的Ctrl不在Pane上怎么办?再查MSDN。

MSDN上并没有说Ctrl一定要在Pane中。于是我理解为,Ctrl是个控件,他的父窗口,也就是GetOwner得到的窗口来处理他产生的消息(与其他的控件一样)。这样想就明白了。

另外AFX_WM_PROPERTY_CHANGED是注册消息,要ON_REGISTER_MESSAGE(AFX_WM_PROPERTY_CHANGED, function)来消息响应。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值