如何在单独的mfc控制台应用程序中使用mfc应用程序的对话框?

时间:2013-07-08 18:39:31

标签: visual-studio-2008 mfc modal-dialog

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

做我需要的事情:

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