将GUI集成到控制台应用程序中

时间:2009-07-23 10:49:24

标签: user-interface visual-c++ console integration

我有两个用C ++开发的独立控制台应用程序。我被要求为它们开发GUI。在此GUI中,我收集了启动任何这些应用程序所需的一些参数。任何人都可以在将控制台应用程序与此GUI集成时给出一些指导?是否可以从GUI启动应用程序而不是看到控制台?应用程序在控制台中写入的内容是否可以重定向到日志文件?

提前致谢。

5 个答案:

答案 0 :(得分:2)

从GUI开始:

1)尝试提取控制台应用程序的纯逻辑部分,与屏幕上的显示无关。丢弃在控制台内显示数据的部分。

您可以使用GUI工具包,例如Qt,它非常易于设置和使用。


然后

2)如果您希望应用程序将内容写入日志文件,那么您可以执行以下两项操作:

a)使用将STDOUT重定向到文件的参数启动程序,例如:

./MyProgram > logfile.txt

b)只需打开一个文件,然后通过修改打印代码从应用程序中写入文件。

我希望这会有所帮助。

答案 1 :(得分:2)

要将GUI与命令行工具分离,您可以让GUI调用提供正确参数的现有程序。

您可以使用CreateProcess() API函数redirecting its output to a filehandle。该调用接收STARTUPINFO结构,您可以在其中指定是否显示命令的窗口。

查看链接以获取示例,可以找到完整的创建流程示例here

这是纯粹的Windows API处理方式。

如果您正在通过System.Diagnostics.Process进行C ++ / .NET开发,那么事情会更容易。

如果你可以选择任何语言来实现它,我当然会采用.NET方式(甚至将语言改为C#),这几乎是微不足道的(因为它管理所有的API调用本身,你有一个理智的界面它)

你也可以通过shell重定向输出,但这是相当不灵活且容易出错的,IMO。

答案 2 :(得分:1)

我说你有两个明确的选择:

  1. 扩展您的应用程序并将它们链接到GUI,从GUI进行函数调用。
  2. 创建一个独立应用程序的GUI(由它自己编译而没有来自控制台应用程序的任何代码依赖),在运行时调用(执行)控制台应用程序,传递从表单收集的参数或它提供的任何交互机制
  3. 第二个选项通常更简单,更清晰,但如果控制台应用程序参数语法发生更改,则可能会“不同步”。

答案 3 :(得分:0)

看看Expect。可以使用不同的实现,并链接到GUI库。

Expect旨在与CLI进行交互并与它们进行交互(提供inoput,读取输出)。根据所选的实现(Perl / Java / Python以及原始Tcl),您可以使用相应的GUI工具包(例如Swing to Java)。

答案 4 :(得分:0)

看看Tcl/Tk.它专门用于为命令行C程序改进脚本编写,并且有一个C API,可以非常简单地执行此操作。 作为奖励,您还可以获得程序的脚本功能。有几种方法可以支持这种类型的集成:

  • 将Tcl解释器链接到程序中。有一个简单的API可以将Tcl数据结构转换为argv类型char **结构。这使您可以调用程序并使用命令行参数。

  • 将管道生成到C / C ++程序并通过管道与它进行交互。

  • 使用Tcl脚本中的命令参数生成程序。

  • 其他更精细的RPC构造(但您可能不需要这些)。

Tcl非常便携,可以在许多平台上运行,包括Windows。 Tcl还附带了一个易于编程的GUI工具包,称为Tk。现代版本支持主题引擎,使其具有原生外观,因此您可以使Tk应用看起来非常接近本机窗口。

This posting讨论了如何使用Tcl / Tk进行深入了解的事情。