1

我已经使用 wxWidgets 将一个 c++ 控制台应用程序转录到 GUI。我的大部分函数都是为命令行流程编写的。我正在创建句柄和附加代码以将 GUI 与功能接口。我为输出流模拟了一个控制台,效果很好(使用 wxStreamToTextRedirector)。但是,我找不到一个简单的解决方案来从文本控件获取用户输入并在以下代码的情况下替换 std::cin 命令。我的框架的事件处理程序和 GUI 控件在 MainFrame.cpp 中,而对象数据和函数在另一个 Data.cpp 中

我在 Data.cpp 中有一个函数,它将在 MainFrame.cpp 的按钮按下事件中调用:

bool Data::run_yn_prompt()
{   //Run Y or N input prompt
    do {
            std::string input = "";
            std::cout << "\n Input Y/y to proceed, N/n to cancel:"; **//OUTPUT TO DISPLAY CONSOLE**
            std::getline(std::cin, input);          **//Need to fetch wxTextCtrl input at this point only**
            std::cout << input;
            if ( (input=="Y") || (input=="y") ) return true;
            if ( (input=="N") || (input=="n") ) return false;
        } while(1==1);
}

问题是我只需要在以下情况下获取输入:

  1. 前一个 std::cout 运行并且
  2. 用户输入输入并按下 ENTER(由wxEVT_TEXT_ENTER事件处理程序发出信号)

我想我能做到的唯一方法是添加许多条件和布尔标志来监视用户输入并输入新闻。有什么简单的策略可以使这项工作有效吗?我的目标不是发布这个应用程序,而是学习让 wxWidgets 元素根据我的需要工作。我的代码中间有很多 std::cin 像这样。这个问题阻止了我继续使用 wxWidgets。而且我想将所有内容都保存在一个框架中,而无需额外的对话框。

在此处输入图像描述

4

1 回答 1

0

保留std::cin在 GUI 程序中使用的代码的唯一方法是使用模式对话框来进行文本输入(例如wxGetTextFromUser())。对于用户来说,这不会像在主程序窗口中使用文本控件那样方便,但它是保留现有控制流的唯一方法。

于 2020-12-14T14:31:42.007 回答