|
| 1 | +#include <wx/wx.h> |
| 2 | +#include <wx/display.h> |
| 3 | + |
| 4 | +namespace Examples { |
| 5 | + class Frame : public wxFrame { |
| 6 | + public: |
| 7 | + Frame() : wxFrame(nullptr, wxID_ANY, "KeyEvents", wxDefaultPosition, {300, 300}) { |
| 8 | + logWindow->GetFrame()->SetPosition({wxDisplay(wxDisplay::GetFromWindow(this)).GetClientArea().GetLeft() + wxDisplay(wxDisplay::GetFromWindow(this)).GetClientArea().GetWidth() - wxDisplay(wxDisplay::GetFromWindow(this)).GetClientArea().GetWidth() / 4, wxDisplay(wxDisplay::GetFromWindow(this)).GetClientArea().GetTop()}); |
| 9 | + logWindow->GetFrame()->SetSize(wxDisplay(wxDisplay::GetFromWindow(this)).GetClientArea().GetWidth() / 4, wxDisplay(wxDisplay::GetFromWindow(this)).GetClientArea().GetHeight()); |
| 10 | + |
| 11 | + panel->Bind(wxEVT_KEY_DOWN, [&](wxKeyEvent& event) { |
| 12 | + logWindow->LogTextAtLevel(0, wxString::Format("KeyDown={KeyCode=0x%04x, Modifiers=[%s]}", event.GetKeyCode(), ModiiersToString(event.GetModifiers()))); |
| 13 | + event.Skip(); |
| 14 | + }); |
| 15 | + |
| 16 | + panel->Bind(wxEVT_CHAR, [&](wxKeyEvent& event) { |
| 17 | + logWindow->LogTextAtLevel(0, wxString::Format("Char={UnicodeKey=%s}", event.GetUnicodeKey()== WXK_NONE ? "[None]" : wxString::Format("'%c'", event.GetUnicodeKey()))); |
| 18 | + }); |
| 19 | + |
| 20 | + panel->Bind(wxEVT_KEY_UP, [&](wxKeyEvent& event) { |
| 21 | + logWindow->LogTextAtLevel(0, wxString::Format("KeyUp={KeyCode=0x%04x, Modifiers=[%s]}%s", event.GetKeyCode(), ModiiersToString(event.GetModifiers()), event.GetModifiers() == WXK_NONE ? "\n" : "")); |
| 22 | + }); |
| 23 | + } |
| 24 | + |
| 25 | + private: |
| 26 | + static std::string ModiiersToString(int modifiers) { |
| 27 | + std::string result; |
| 28 | + if ((modifiers & wxMOD_SHIFT) == wxMOD_SHIFT) result += "Shift, "; |
| 29 | + if ((modifiers & wxMOD_RAW_CONTROL) == wxMOD_RAW_CONTROL) result += "Control, "; |
| 30 | + if ((modifiers & wxMOD_ALT) == wxMOD_ALT) result += "Alt, "; |
| 31 | +#if defined(__WXOSX__) |
| 32 | + if ((modifiers & wxMOD_CONTROL) == wxMOD_CONTROL) result += "Command, "; |
| 33 | +#endif |
| 34 | + if ((modifiers & wxMOD_META) == wxMOD_META) result += "Meta, "; |
| 35 | + if (result.size() > 1) result.resize(result.size() - 2); |
| 36 | + return result; |
| 37 | + } |
| 38 | + |
| 39 | + wxPanel* panel = new wxPanel(this); |
| 40 | + wxLogWindow* logWindow = new wxLogWindow(this, "Debug"); |
| 41 | + }; |
| 42 | + |
| 43 | + class Application : public wxApp { |
| 44 | + bool OnInit() override { |
| 45 | + (new Frame())->Show(); |
| 46 | + return true; |
| 47 | + } |
| 48 | + }; |
| 49 | +} |
| 50 | + |
| 51 | +wxIMPLEMENT_APP(Examples::Application); |
0 commit comments