将 UI 插入另一个 MFC 对话框

Posted

技术标签:

【中文标题】将 UI 插入另一个 MFC 对话框【英文标题】:Insert an UI into another MFC Dialog 【发布时间】:2011-05-26 18:53:22 【问题描述】:

我有一个 MFC 应用程序 (exe),在其主 UI 中包含两个窗格。此应用程序加载另一个也包含一个对话框的 DLL。如何以编程方式将定义的 Dialog 放入 DLL 中,并将其放入(内)MFC 应用程序的窗格中?问题不是如何以编程方式从 DLL 中检索对话框,而是如何将此对话框放在属于应用程序的一个 UI 窗格的“顶部”(内部、内部)?

我的目标是使用从 dll 中检索到的对话框自定义应用程序的 UI,并让用户感觉这些对话框都属于一个应用程序 UI。感谢您的任何提示。

【问题讨论】:

【参考方案1】:

我有一些具有此功能的应用程序,通常带有用于在窗口之间切换的选项卡控件。

首先,我在容器窗口中设置了一个对用户不可见的框架。框架只是对话框窗口所在位置的占位符。

然后我将对话窗口的实例作为容器类中的全局变量,我将对话窗口创建为无模式窗口(使用Create(),而不是DoModal()),将窗口移动到相同的@987654323框架控件的@,并调用ShowWindow()显示窗口。

【讨论】:

【参考方案2】:

我是否正确理解您不希望对话框显示为对话框,而是显示为另一个窗口的内容或窗格?

也就是说,你想去掉对话框的标题栏,把对话框的内容嵌入到另一个窗口中,对吗?

这是可能的。您需要创建没有标题栏的对话框(更改窗口样式),并确保将对话框的窗口创建为您希望内容所在窗口的子窗口。我可以进一步解释这一点,但我首先想知道我是否正确理解了你。

【讨论】:

谢谢。是的,这就是我想做的。我猜使用 SetParent 设置父/子? WS_CHILDWINDOW 是关键。我认为 SetParent 不足以解决问题。您需要使用 CreateWindowEx() 创建窗口并确保将第三个参数设置为包含 WS_CHILDWINDOW。参数4和5可用于窗口的位置,参数6设置父级。

以上是关于将 UI 插入另一个 MFC 对话框的主要内容,如果未能解决你的问题,请参考以下文章

在另一个对话框将数据插入 DB 后刷新 DataGridView

如何在不将焦点转移到另一个窗口的情况下显示 MFC 对话框

从另一个 DLL 加载 MFC 应用程序对话框

MFC - 获取特定窗口的设备上下文

UG二次开发中MFC对话框怎样调用UF_UI_select_with_class_dialog

在 MFC 中切换到另一个模式对话框