gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 10:41:33 24 4
gpt4 key购买 nike

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

但是,当使用 CWnd::GetParent()(原始)GetAncestor(hwnd, GA_PARENT)(只是尝试,因为原始没有用,这段代码已有 20 多年历史了)甚至 GetWindow(hwnd, GW_OWNER) 只是为了查看它是否出于某种原因设置了窗口的所有者。在每种情况下,我都看不到与 CMDIFrameWnd 对象关联的句柄。相反,显示的父级是桌面,所有者为 NULL。

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

最佳答案

在MDI接口(interface)中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()

关于windows - 如何获得 Spy++ 提供的父结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53256240/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com