带有SetDefault()的wxButton不再响应进入帧

时间:2014-02-21 19:01:35

标签: 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)

2 个答案:

答案 0 :(得分:1)

如果默认按钮对Enter键没有反应,它看起来像是wxWidgets中的错误,你应该report it in the usual way。请尝试提供一个简单的例子来重现问题,理想情况下作为样本的补丁,如果你这样做,因为这肯定在正常/大多数情况下都有效。

答案 1 :(得分:0)

我找到了将wxID_OK的ID指定为默认按钮的工作。