最近在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

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

被折叠的 条评论
为什么被折叠?



