【问题标题】:Adding GUI to c++ win32 console将 GUI 添加到 c++ win32 控制台
【发布时间】:2012-04-21 12:24:56
【问题描述】:

我有一个现有的 C++ win32 控制台应用程序。此应用程序包含一个主程序,该程序不断实时处理来自硬件的一些数据,并具有一个服务器组件(线程化)将数据流式传输到客户端。

我正在考虑是否可以创建一个 GUI,让用户在运行此控制台程序之前输入一些程序参数。 GUI 我打算只显示控制台程序的状态,例如。运行时,用户单击“开始”按钮后无需用户交互。

如果可以的话,有什么建议吗?谢谢!

【问题讨论】:

  • 有什么理由不考虑命令行参数吗?
  • @yasouser 我正在考虑给用户一个 GUI,这样控制台程序的输入参数就可以比要求用户输入一些他们可能输入错误的命令行参数更清晰?

标签: c++ user-interface console


【解决方案1】:

当然,只需使用window message loop 创建一个线程即可。这可能需要一个单独的线程来处理您所描述的内容,尽管您可以设想其他方式,具体取决于您现有代码的确切细节。

反之亦然:GUI 应用也可以创建控制台并向其输出。

【讨论】:

    【解决方案2】:

    通常使用文本文件配置控制台应用程序,这样它们就可以从批处理脚本运行而无需用户交互。配置文件可以用参数指定。

    一旦你有了这个,编写一个 GUI 配置编辑器和启动器就很简单了。监控程序可能最好做成一个通知区域图标,当进程终止或控制台输出中出现某些内容时会报告。

    【讨论】:

      【解决方案3】:

      快速而肮脏的方式 - 在您希望的任何工具包中创建 GUI(例如 Qt、Gtk、Windows API...)并使用标准的 system(const char *) 函数。

      Nmap 是一个很棒的话题,因为 many front ends 存在,所以您可能有兴趣深入研究源代码,看看它们是如何将前端变成控制台应用程序的。

      【讨论】:

        【解决方案4】:

        我实现 GUI 进程的方式(不幸的是,当我没有考虑包含 GUI 的设计时)是使用 posix 线程进程,一个运行应用程序的代码,一个运行 GUI,全局变量(hacky)由父进程(父进程运行两个子进程)以单向方式共享(以避免出现竞争条件),因此一个变量将被写入进程,读取 GUI,而另一个变量将为进程读取,为 GUI 写入。

        我不得不重新编写处理 coe 以使用忙等待(坏)来等待信息和状态更改以在每个忙等待循环之间跳跃。忙碌等待状态的改变并没有花太多时间来实现。

        这并不是真正的最佳方式(这很 hacky),应该从一开始就将 GUI 设计到代码中,而不是稍后“添加”。但这确实对我有用,而且 GUI 在最后一分钟的表现也出奇地好。

        【讨论】:

          猜你喜欢
          • 2012-08-22
          • 2013-06-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-11
          相关资源
          最近更新 更多