0

我有两个 MFC 应用程序。其中一个只是一个对话框,带有一些支持它的功能,另一个是控制台应用程序。如何使控制台应用程序能够打开位于其他应用程序中的对话框?

我尝试将对话框应用程序构建为 dll 并导入它。此外,将现有项目添加到控制台项目并以这种方式链接它们。虽然我相信我已经关闭了链接,但我永远无法让控制台实例化对话框。我也有可能以错误的方式处理这部分。

有没有一种简单的方法可以导出我创建的对话框并将其导入另一个程序?如果我创建了一个名为“input”的项目并且它生成了 inputDlg.h/inputDlg.cpp,为什么我不能将它们移到另一个项目中并从它们那里调用?或者在它的初始项目之外使用对话框是不可能的?

4

2 回答 2

0

对话框(或任何其他 GUI 窗口)需要消息泵,但控制台应用程序通常没有消息泵。如果您希望控制台应用程序等到对话框关闭,最简单的方法是使用 Win32 API 而不是 MFC。只需通过调用 DialogBox 创建一个对话框。该 API 提供了自己的消息循环。

否则,您将采用多线程方法,控制台在主线程中运行。启动一个带有消息泵的辅助线程,并在该线程中创建基于 CDialog 的对话框。

于 2013-07-09T03:00:04.707 回答
0

做我需要的:

  1. 我在 Visual Studio 中打开了两个项目的资源文件,并简单地复制/粘贴了我想在资源视图中传输的对话框。
  2. 然后我关闭了所有内容并打开了控制台项目。它包含我传输的对话框。我在资源视图中双击它,它打开了。
  3. 它仍然没有与之关联的类,所以我双击框架并打开了类向导。我将其命名为与第一个对话框项目中的名称相同(WhateverDlg.h/WhateverDlg.cpp)。
  4. 然后我可以将我的代码从对话框项目复制并粘贴到控制台项目中。我只需要删除引用包装器(Whatever.h)的几行就完成了。

这使我能够在我的控制台程序中包含 WhatDlg.h 并使用 DoModal()。成功!

于 2013-07-10T10:39:31.337 回答