【问题标题】:Minimal solution to use wxWidgets: wxTextControl to emulate a C++ std::cin and std::cin(getline) stream使用 wxWidgets 的最小解决方案:wxTextControl 模拟 C++ std::cin 和 std::cin(getline) 流
【发布时间】:2021-03-24 22:51:42
【问题描述】:

我已经使用 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。而且我想将所有内容都保留在一个框架中,而不需要额外的对话框。

【问题讨论】:

    标签: c++ windows wxwidgets cin wxtextctrl


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2011-10-12
      • 2020-03-14
      • 2015-11-17
      • 2017-08-29
      • 1970-01-01
      • 2012-04-01
      • 2021-08-17
      • 2011-06-12
      相关资源
      最近更新 更多