2014-02-21 26 views
0

上输入我最初与wx2.8工作,至今已移植到wx3.0的应用程序。此应用程序的框架有一个“连接”按钮,在创建按钮时SetDefault()被调用。在wx2.8下,这个按钮会在输入键被识别时产生一个点击事件。在wx3.0下,这似乎不再起作用。我一直在试图用热键解决这个问题,但是当回车键被定义为热键时,他们会用模态对话来提出自己的问题。即使被忽略,热键事件显然也不会传递关键事件。有没有人有任何建议或解决?wxButton与SetDefault()不再响应帧

上周五,我认为这可能是与与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) 

回答

0

我发现围绕指定wxID_OK的ID到默认按钮的工作。

1

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

+0

这个问题似乎是指定wxWANTS_CHARS作为帧样式的一部分的结果。由于这不是(或不再是)文件化的风格,因此我认为这是一种无效的风格。 –

+0

它是有效的风格,但它并告诉具有窗口是兴趣获得*所有*的重要事件,甚至通常用于导航的人,并处理它们自身,所以它并不完全令人吃惊的是它禁用默认输入处理。 –

+0

我发现,通过进一步的实验,也没有使用wxID_OK作为默认按钮将阻止按钮处理enter键事件。 –