我正在使用 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_RIGHT
和WXK_LEFT
自己,并在此处做任何您想做的事情。您可以查看wxGrid::DoGridProcessTab()
以获取可能要做的示例,例如注意辅助MoveCursor{Left,Right}()
和GoToCell()
使用的方法。