X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d7b3992a5f92ab87a26aeb77cbee2184f0e5432c..33d8353fa58dbc66fc9d22fcd510ded6b26ce719:/samples/keyboard/keyboard.cpp diff --git a/samples/keyboard/keyboard.cpp b/samples/keyboard/keyboard.cpp index 25907b5a4c..d90b035fdf 100644 --- a/samples/keyboard/keyboard.cpp +++ b/samples/keyboard/keyboard.cpp @@ -18,7 +18,7 @@ #include "wx/wx.h" #endif -#ifndef __WXMSW__ +#ifndef wxHAS_IMAGES_IN_RESOURCES #include "../sample.xpm" #endif @@ -41,18 +41,32 @@ private: { m_logText->AppendText("Test accelerator \"Esc\" used.\n"); } void OnClear(wxCommandEvent& WXUNUSED(event)) { m_logText->Clear(); } - void OnSkip(wxCommandEvent& event) { m_skip = event.IsChecked(); } + void OnSkipDown(wxCommandEvent& event) { m_skipDown = event.IsChecked(); } + void OnSkipHook(wxCommandEvent& event) { m_skipHook = event.IsChecked(); } - void OnKeyDown(wxKeyEvent& event) { LogEvent("KeyDown", event); } + void OnKeyDown(wxKeyEvent& event) + { + LogEvent("KeyDown", event); + if ( m_skipDown ) + event.Skip(); + } void OnKeyUp(wxKeyEvent& event) { LogEvent("KeyUp", event); } void OnChar(wxKeyEvent& event) { LogEvent("Char", event); } + void OnCharHook(wxKeyEvent& event) + { + LogEvent("Hook", event); + if ( m_skipHook ) + event.Skip(); + } + void OnPaintInputWin(wxPaintEvent& event); void LogEvent(const wxString& name, wxKeyEvent& event); wxTextCtrl *m_logText; wxWindow *m_inputWin; - bool m_skip; + bool m_skipHook, + m_skipDown; }; @@ -87,7 +101,8 @@ IMPLEMENT_APP(MyApp) MyFrame::MyFrame(const wxString& title) : wxFrame(NULL, wxID_ANY, title), m_inputWin(NULL), - m_skip(true) + m_skipHook(true), + m_skipDown(true) { SetIcon(wxICON(sample)); @@ -96,7 +111,8 @@ MyFrame::MyFrame(const wxString& title) { QuitID = wxID_EXIT, ClearID = wxID_CLEAR, - SkipID = 100, + SkipHook = 100, + SkipDown, TestAccelA, TestAccelCtrlA, TestAccelEsc @@ -113,15 +129,21 @@ MyFrame::MyFrame(const wxString& title) menuFile->Append(TestAccelEsc, "Test accelerator &3\tEsc"); menuFile->AppendSeparator(); - menuFile->AppendCheckItem(SkipID, "Call event.&Skip()\tCtrl-S"); - menuFile->Check(SkipID, true); + menuFile->AppendCheckItem(SkipHook, "Skip CHAR_HOOK event", + "Not skipping this event disables both KEY_DOWN and CHAR events" + ); + menuFile->Check(SkipHook, true); + menuFile->AppendCheckItem(SkipDown, "Skip KEY_DOWN event", + "Not skipping this event disables CHAR event generation" + ); + menuFile->Check(SkipDown, true); menuFile->AppendSeparator(); menuFile->Append(QuitID, "E&xit\tAlt-X", "Quit this program"); // the "About" item should be in the help menu wxMenu *menuHelp = new wxMenu; - menuHelp->Append(wxID_ABOUT, "&About...\tF1", "Show about dialog"); + menuHelp->Append(wxID_ABOUT, "&About\tF1", "Show about dialog"); // now append the freshly created menu to the menu bar... wxMenuBar *menuBar = new wxMenuBar(); @@ -175,8 +197,10 @@ MyFrame::MyFrame(const wxString& title) Connect(ClearID, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MyFrame::OnClear)); - Connect(SkipID, wxEVT_COMMAND_MENU_SELECTED, - wxCommandEventHandler(MyFrame::OnSkip)); + Connect(SkipHook, wxEVT_COMMAND_MENU_SELECTED, + wxCommandEventHandler(MyFrame::OnSkipHook)); + Connect(SkipDown, wxEVT_COMMAND_MENU_SELECTED, + wxCommandEventHandler(MyFrame::OnSkipDown)); Connect(TestAccelA, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MyFrame::OnTestAccelA)); @@ -198,6 +222,13 @@ MyFrame::MyFrame(const wxString& title) wxPaintEventHandler(MyFrame::OnPaintInputWin), NULL, this); + // notice that we don't connect OnCharHook() to the input window, unlike + // the usual key events this one is propagated upwards + Connect(wxEVT_CHAR_HOOK, wxKeyEventHandler(MyFrame::OnCharHook)); + + // status bar is useful for showing the menu items help strings + CreateStatusBar(); + // and show itself (the frames, unlike simple controls, are not shown when // created initially) Show(true); @@ -404,9 +435,6 @@ void MyFrame::LogEvent(const wxString& name, wxKeyEvent& event) ); m_logText->AppendText(msg); - - if ( m_skip ) - event.Skip(); }