使用CMFCPropertyGridCtrl及CMFCPropertyGridProperty控件的心得体会

本文记录了在MFC编程中使用CMFCPropertyGridCtrl和CMFCPropertyGridProperty控件时的挑战与解决方案。主要讨论了控件内容变化如何触发PropertyChanged事件,以及CMFCPropertyGridCtrl在OnPropertyChanged函数中处理AFX_WM_PROPERTY_CHANGED消息的过程。

最近在MFC编程时使用到了CMFCPropertyGridCtrl及CMFCPropertyGridProperty这俩控件,记录下使用时遇到的问题及解决方法

1、当CMFCPropertyGridProperty控件内的内容改变时,会触发CMFCPropertyGridCtrl的PropertyChanged事件,根据CMFCPropertyGridCtrl类的源代码所述,事件发生后,CMFCPropertyGridCtrl会在OnPropertyChanged函数中做处理,且会发送AFX_WM_PROPERTY_CHANGED消息,(OnPropertyChanged(CMFCPropertyGridProperty *pProp)且发送消息的代码为

GetOwner()->SendMessage(AFX_WM_PROPERTY_CHANGED,GetDlgCtrlID(),LPARAM(pProp));
这说明wparam为CMFCPropertyGridCtrl控件的ID,lparam为CMFCPropertyGridProperty控件指针,在消息处理函数中可通过pProp指针来获取改变的值。

2、我想在CMFCPropertyGridProperty控件内容改变后将焦点set到SDI文档的VIEW视图上,采用的方法是在OnPropertyChanged函数SendMessage的消息处理函数中发送消息到VIEW,让VIEW类自己SetFocus(),而一开始我用的是SendMessage(.....),但无论如何焦点都无法set到VIEW处,而是一直在CMFCPropertyGridCtrl控件处。后来无意中发现当CMFCPropertyGridCtrl控件处于浮动窗口时,重复上一过程时发现CMFCPropertyGridCtrl控件出现短暂的焦点消失现象,但处于停靠窗口时则没有此现象。于是我猜上述编程过程中VIEW获得了焦点,只是后来焦点又回到CMFCPropertyGridCtrl控件了。再接着想到CMFCPropertyGridCtrl的PropertyChanged事件处理函数发送消息时用的是Send
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值