WXGRIDSIZER/WXPANEL:使左/右导航键的行为像Shift-Tab/Tab一样



我正在使用 wxWidget。我有带有4个按钮的panel,并使用wxGridSizer将它们放入网格中。当我转到行的最右键并按Right key时,焦点保留在同一小部件上。我可以设置一些属性,其中 Right/Left键在角落工作,用作tab和shift-tab。

我想要的是,仅按左键和右键,用户应该能够通过4个按钮circle。我想用于其他目的的上/下键。

如果有帮助,这是代码:

#include <wx/wx.h>
#include <wx/grid.h>
#include <wx/sizer.h>
#include <wx/string.h>
#include <iostream>
#include <cassert>
class ReachItFrame : public wxFrame
{
public:
  ReachItFrame(const wxString& title) : wxFrame()
  {
    Create(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(250, 150));
  }
};
class MyApp : public wxApp
{
public:
  bool OnInit()
  {
    ReachItFrame *reachIt = new ReachItFrame(wxT("ReachIt"));
    reachIt->Show(true);
    assert(reachIt->SetTransparent(150));
    assert(reachIt->ShowFullScreen(true, wxFULLSCREEN_ALL));
    wxPanel *panel = new wxPanel(reachIt);
    wxGridSizer *sizer = new wxGridSizer(2, 2, 0, 0);
    wxButton *button1 = new wxButton(panel, wxID_ANY, wxString::FromAscii("1"));
    sizer->Add(button1, wxSizerFlags().Expand());
    wxButton *button2 = new wxButton(panel, wxID_ANY, wxString::FromAscii("2"));
    sizer->Add(button2, wxSizerFlags().Expand());
    wxButton *button3 = new wxButton(panel, wxID_ANY, wxString::FromAscii("3"));
    sizer->Add(button3, wxSizerFlags().Expand());
    wxButton *button4 = new wxButton(panel, wxID_ANY, wxString::FromAscii("4"));
    button4->MoveBeforeInTabOrder(button3);
    sizer->Add(button4, wxSizerFlags().Expand());
    panel->SetSizerAndFit(sizer);
    return true;
  }
};
wxIMPLEMENT_APP(MyApp);

对此没有内置的支持,但是您可以在wxEVT_CHAR处理程序中捕获WXK_RIGHTWXK_LEFT自己,并在此处做任何您想做的事情。您可以查看wxGrid::DoGridProcessTab()以获取可能要做的示例,例如注意辅助MoveCursor{Left,Right}()GoToCell()使用的方法。

最新更新