2014-02-21 36 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鍵事件。 –