【问题标题】:how to add in Visual Studio 2010 WinForm Object to a C++ Console Application Project如何将 Visual Studio 2010 WinForm 对象添加到 C++ 控制台应用程序项目
【发布时间】:2012-01-04 08:54:29
【问题描述】:

我正在构建一个 C++ 控制台应用程序,它可以进行一些 OpenGL 打印。
整个事情是由 glut 和 gl 库完成的。我的新目标是在项目中添加一些 Windows 窗体,以便在控制台应用程序开始之前使用 VS 提供的一些文本框和其他控件“配置”“游戏”。
我知道当前问题的最佳解决方案是添加 Win32 API,但我不知道如何将控制台应用程序项目与 win32 API 集成在一起。
我知道在 C# 中使用 .ShowDialog() 命令很容易完成。

【问题讨论】:

  • 请注意,在您的问题中包含一个实际问题(带有问号)总是一个好主意。
  • MikeNakis:对不起,我不够清楚。我试图了解如何在 C++ 控制台应用程序代码中初始化新的 Win32(Windows 窗体)窗口。
  • 您需要加载并初始化 CLR。有一些捷径可以做到这一点,但不会这样做,当您使用对话框时,您将拥有相当丰富的互操作性。让 C++/CLI Winforms 项目创建控制台窗口并调用本机代码比其他方式更容易。

标签: c++ windows winforms winapi console-application


【解决方案1】:

虽然从控制台应用程序启动一个窗口是完全可行的,但该窗口不会响应,因为您的控制台应用程序没有消息队列。 (或者更确切地说,它有一个消息队列,但它是由您无法控制的代码实现的。)因此,您可以打开一个窗口,在其中绘制并强制它手动更新,但您无法接收用户输入在里面。

我建议你忘记这样做,而是编写一个小窗口应用程序,它会提示配置,然后启动控制台应用程序,将配置作为命令行参数传递给它,或者填写一个供控制台应用程序读取的配置文件。

【讨论】:

  • MikeNakis:感谢您的回答。好吧,我喜欢第一部分,在这种情况下,我可以简单地创建执行控制台应用程序的 .NET 窗口。我的问题是控制台应用程序关闭时。我想打开另一个窗口。也许我可以从 C++ 部分执行另一个 .Net 窗口?我不知道这个解决方案是否“正确”
  • 当然,如果您愿意,您可以从控制台应用程序启动您的 Windows 应用程序。您还可以做的是保持 Windows 应用程序运行,只要控制台应用程序运行就隐藏窗口,并在它终止后重新显示它。这样您就不会将它们紧密耦合:Windows 应用程序知道控制台应用程序,但控制台应用程序对 Windows 应用程序一无所知。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-18
  • 2019-05-17
  • 1970-01-01
  • 2012-08-19
  • 2018-07-11
  • 1970-01-01
相关资源
最近更新 更多