首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得Spy++提供的父结构?

如何获得Spy++提供的父结构?
EN

Stack Overflow用户
提问于 2018-11-12 13:10:03
回答 1查看 196关注 0票数 2

在我们的代码中,实例化了一个从CMDIChildWnd派生的C++类,并调用了它的Create()函数,该函数实际上是CMDIChildWnd::Create()。正在将第5个参数pParentWnd设置为CMDIFrameWnd对象。这反过来(在MFC代码中)设置一个CREATESTRUCT对象,将它的hwndParent设置为该参数,然后使用该对象作为其中一个参数传递来调用PreCreateWindow()

然而,当使用CWnd::GetParent() (原始的) GetAncestor(hwnd, GA_PARENT) (只是尝试,因为原始的代码不工作,并且这段代码已经有20+年头了)甚至GetWindow(hwnd, GW_OWNER)进入父窗口列表时,只是想看看它是否出于某种原因设置了窗口的所有者。在每种情况下,我都看不到与CMDIFrameWnd对象关联的句柄。相反,显示的父对象是桌面,并且owner为空。

使用Spy++,它显示了我所期望的。如何以编程方式获得Spy++给出的布局?

EN

回答 1

Stack Overflow用户

发布于 2018-11-13 05:58:29

在MDI接口中,CMDIChildWnd通常被传递给CMultiDocTemplate,然后我们通过CDocManager::OnFileNew创建一个新窗口,然后调用CFrameWnd::LoadFrame,它为子窗口的父窗口传递NULL (至少在VS 2017中)

我们通常不会直接调用mdi_child->Create,除非我们手动初始化其他所有东西。也许您的意思是基类CMDIChildWnd::Create被调用,或者您能够覆盖它。

在子窗口中,

::GetAncestor(m_hWnd, GA_ROOT)::GetAncestor(m_hWnd, GA_ROOTOWNER)

应返回对主框架的引用,否则使用AfxGetMainWnd()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53256240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档