c++ - 带有 SetDefault() 的 wxButton 不再响应框架上的输入

标签 c++ windows wxwidgets

我有一个最初使用 wx2.8 的应用程序,后来移植到 wx3.0。该应用程序的框架有一个“连接”按钮,创建按钮时会在该按钮上调用 SetDefault()。在 wx2.8 下,这个按钮会在识别回车键时产生一个点击事件。在 wx3.0 下,这似乎不再起作用。我一直在尝试使用热键来解决这个问题,但是当回车键被定义为热键时,它们会在模式对话中出现一系列问题。热键事件显然不会传递关键事件,即使它被跳过。有人有任何建议或解决方法吗?

上周五,我认为这可能与使用 wxWANTS_CHARS 样式初始化框架有关,确实如此。我还发现,如果按钮未使用 wxID_OK ID 初始化,则会出现问题。以下代码演示了该问题:

#include "wx/wx.h"


class MyFrame: public wxFrame
{
private:
   wxTextCtrl *text_status;
   int click_count;

public:
   MyFrame():
      wxFrame(
         0,
         wxID_ANY,
         "SetDefault",
         wxDefaultPosition,
         wxDefaultSize,
         wxDEFAULT_FRAME_STYLE | wxCLIP_CHILDREN),
      click_count(0)
   {
      wxPanel *panel(new wxPanel(this));
      wxSizer *sizer(new wxBoxSizer(wxVERTICAL));
      wxButton *button;


      text_status = new wxTextCtrl(panel, wxID_ANY);
      sizer->Add(text_status, 0, wxALL, 10);
      button = new wxButton(panel, wxID_HIGHEST + 1, "Increment");
      sizer->Add(button, 0, wxALL, 10);
      button->SetDefault();
      panel->SetSizerAndFit(sizer);
   }

   void on_increment(wxCommandEvent &event)
   {
      wxString content;
      ++click_count;
      content.Printf("%d", click_count);
      text_status->SetValue(content);
   }

   DECLARE_EVENT_TABLE()
};


BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_BUTTON(wxID_OK, MyFrame::on_increment)
END_EVENT_TABLE()


class MyApp: public wxApp
{
   virtual bool OnInit()
   {
      MyFrame *frame(new MyFrame);
      frame->Show(true);
      SetExitOnFrameDelete(true);
      return true;
   }
};


IMPLEMENT_APP(MyApp)

最佳答案

如果默认按钮对 Enter 键按下没有反应,这看起来像是 wxWidgets 中的错误,您应该 report it in the usual way .如果您这样做,请尝试提供一个重现问题的简单示例,最好是示例的补丁,因为这在正常/大多数情况下确实有效。

关于c++ - 带有 SetDefault() 的 wxButton 不再响应框架上的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21943010/

相关文章:

C++ 非 C 和通过网络发送 std::string 的清晰方法

c++ - 将工程应用程序从独立移动到内部 CAD

python - 获取 Windows 目录中的每个文件

c++ - 是否有任何 API 可以在 Windows 中获取路径 "C:\Documents and Settings"?

c++ - wxWidgets 创建一个驻留在桌面上的应用程序?

c++ - wxGrid 的自动调整大小

c++ - 在文本文件中搜索字段名称并将所有后续行返回到控制台 - C++

c++ - 更好的 std::find 指针集合并将取消引用的值与 const 引用值进行比较

python - 在python中将unix纪元时间转换为windows纪元时间

c++ - wxDC 在打字时在屏幕上打印文本