【问题标题】:C++ MFC dialog not closing when parent closed父关闭时C ++ MFC对话框未关闭
【发布时间】:2019-04-06 01:12:22
【问题描述】:

我是新手,我想学习,但我找不到任何相关信息。 我向父级附加了一个对话框。但是,当我关闭父级时,对话框保持打开状态。 父级是加载对话框(DLL)并打开它(如插件)的 exe 文件。 如何检查父级是否关闭,然后对话框也会关闭?

【问题讨论】:

  • 如果您是新手,请不要从 MFC 开始。在深入研究复杂的框架之前,您需要先了解基本规则。换句话说:在使用 any 本机模式框架之前,先学习 Windows API 和 C。有关详细信息和理由,请参阅this Q&A

标签: c++ mfc dialog


【解决方案1】:

当一个窗口即将被销毁时,WM_DESTROY 被发送到该窗口,您可以在父对话框的 WM_DESTORY 事件中添加一个事件,然后在该函数上手动关闭子对话框。

【讨论】:

  • 这不是必需的。当其所有者被销毁时,owned window 会自动销毁。同样,child window 在其父对象被销毁之前会自动销毁。无论 OP 为 “将对话框附加到父级” 所做的一切都是错误的,需要修复。
  • 你说得对,但他把“父”称为 exe 文件而不是真正的 CDialog 类,子对话框在 dll 中,你不确定(他没有解释) 这个“子”窗口是如何创建的,反正他会根据自己的代码来决定如何修复它。
  • 它是一个作为插件运行的dll和CWnd parent; parent.Attach(((HWND)handle)); MyDialog dialog(&parent); dialog.qParentWidget = qParentWidget; dialog.linker = linker; AfxEnableControlContainer(); dialog.DoModal(); parent.Detach();创建的对话框
  • @RicardoFuMa - 我尝试了 OnDestroy 但没有成功(如果我关闭父级,对话框仍然打开)
  • @bos:您对所使用的框架缺乏基本的了解,在这种特殊情况下,这是 MFC 的 C++ 包装器与本机窗口的关系。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-15
  • 1970-01-01
  • 1970-01-01
  • 2012-02-09
相关资源
最近更新 更多