windows – (MFC)如果控件是私有成员,父类如何接收控件的消息?
假设我的主类有一个私有成员,它是一个派生自CTreeView控件的类.如何在主类本身处理来自此树视图控件的消息?
这类似于Visual Studios为您构建的MDI基础应用程序,其中有两个可停靠的树视图控件,名为CClassView和CFileView,每个控件都有一个派生自CTreeView的私有成员. 我可以将消息从子成员控件CViewTree传递给我的CFileView类吗? void CViewTree::OnTvnSelchanged(NMHDR *pNMHDR,LRESULT *pResult) { GetParent()->SendMessage(WM_NOTIFY,(LPARAM)pNMHDR); } 此代码抛出异常,但如果这确实有效,我将如何处理父类中的TVN_SELCHANGED消息? 编辑: //First try,in the parent .h file: afx_msg BOOL OnSelChange(NMHDR *pNMHDR,LRESULT *pResult); //In the .cpp file: ON_NOTIFY_REFLECT_EX(TVN_SELCHANGED,OnSelChange) //and BOOL ParentClass::OnSelChange(NMHDR *pNMHDR,LRESULT *pResult) { AfxMessageBox(L"in handler"); Return TRUE; } 第二次尝试: //in the parent .h file: afx_msg void OnSelChange(NMHDR *pNMHDR,LRESULT *pResult); //In the .cpp file: ON_NOTIFY(TVN_SELCHANGED,AFX_IDW_PANE_FIRST,OnSelChange) //and void ParentClass::OnSelChange(NMHDR *pNMHDR,LRESULT *pResult) { AfxMessageBox(L"in handler"); } 解决方法
不确定为什么要这样做,因为视图和父视图之间存在紧密耦合,所以代码重用性较低.如果要重用选择逻辑,可以将其提取到与
DRAWCLI sample类似的单独类中.
TVN_SELCHANGED已发送给父母.但是,当孩子中存在ON_NOTIFY_REFLECT时,MFC的message reflection将通知路由到子窗口的消息映射. 如果您希望父级在消息处理中也有发言权,则可以将ON_NOTIFY_REFLECT更改为ON_NOTIFY_REFLECT_EX并在反射的消息处理程序中返回FALSE. 您将在父级获得WM_NOTIFY,因此您处理通知的方式是将a ON_NOTIFY macro添加到树视图的父级,就像通常对对话框中的树控件一样.如果您没有指定,则视图的ID可能是AFX_IDW_PANE_FIRST. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- [squirrel使用]--Windows安装详解
- 无法访问本地Windows计算机上的nginx容器
- windows-server-2008-r2 – 如何在不破坏RDP的情况下禁用TL
- win10安装mysql5.7完整教程
- 无法从Windows Mono C#Project访问Linux gcc编译的.so共享库
- windows-server-2003 – 如果无法在Windows域中的DC之间进行
- xaml – 在Bing Maps上为Metro应用程序设置标记引脚的动画
- win10企业2016和2019长期服务版本激活密钥和下载地址
- wix – 忽略不允许的属性IISMAJORVERSION和’EnableUserCon
- .net – WinRT中是否有“IsInDesignMode”属性?
- wix – “添加/删除程序”中的Bootstrapper和Set
- compact-framework – Windows Ce 6.0上的Compac
- Windows Server 2008安装期间奇怪的“缺失”CD /
- windows 下 MongoDB 的安装与启动
- 在Windows中调试Go(golang)代码
- 新的统一Windows开发人员中心 – 如何取消发布/隐
- Windows 2008 RenderFarm服务:CreateProcessAsU
- windows – sqlite3-ruby gem:无法构建gem本机扩
- uint8_t可以是非字符类型吗?
- windows下vmware和Hyper-v共存方法