gpt4 book ai didi

c++ - 使用 EVT_NAVIGATION_KEY 处理事件不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:19:40 24 4
gpt4 key购买 nike

一个头文件:

class ttFrame: public wxFrame
{
public:
ttFrame(wxFrame *frame, const wxString& title);
~ttFrame();
private:
enum
{
idMenuQuit = 1000,
idMenuAbout,
collapsible_key
};
void OnClose(wxCloseEvent& event);
void OnQuit(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);
void OnEvent(wxCommandEvent& event);
void OnSpinEvent(wxSpinEvent& event);
wxCollapsiblePane *collpane;
void OnEventCollapsible(wxNavigationKeyEvent& event);
DECLARE_EVENT_TABLE()
};

主要功能:

wxBoxSizer *sizer = new wxBoxSizer(wxHORIZONTAL);

collpane = new wxCollapsiblePane(this, collapsible_key, "Collapsible pane:", wxDefaultPosition, wxSize(400,400), wxCP_NO_TLW_RESIZE);
sizer->Add(collpane);

wxWindow *win = collpane->GetPane();
wxSizer *paneSz = new wxBoxSizer(wxVERTICAL);

paneSz->Add(new wxStaticText(win, wxID_ANY, "test!"), 1, wxGROW|wxALL, 2);

win->SetSizer(paneSz);
paneSz->SetSizeHints(win);

SetSizer(sizer);

事件声明:

BEGIN_EVENT_TABLE(ttFrame, wxFrame)
EVT_NAVIGATION_KEY(ttFrame::OnEventCollapsible)
END_EVENT_TABLE()

事件函数发射器:

void ttFrame::OnEventCollapsible(wxNavigationKeyEvent& event)
{
wxMessageBox("Not event trigger on key TAB");
}

当我点击 TAB 键或某些功能键时,它不会触发事件。 EVT_COLLAPSIBLEPANE_CHANGED(id, func) 等其他事件:有效。

在文档中说

EVT_NAVIGATION_KEY(func): Process a navigation key event.

事件不会触发以显示 wxMessageBox()。

最佳答案

据我所知,wxFrame 不会发出 wxNavigationKeyEvent。获得 TAB 导航的标准方法是添加一个 wxPanel 作为 wxFrame 的唯一子级,然后将所有控件添加为 wxFrame 的子级wx面板。文档 here .

更新:我错了,我刚刚验证了 wxFrame 确实 实际上也发出了那个事件。与 wxPanel 的不同之处在于没有默认的导航处理程序 - 除非您自己设置,否则 TAB 不会在控件直接添加到 时在控件之间导航>wxFrame

然而,在您的情况下,您还有另一个 wxPanel - wxCollapsiblePane 中包含的那个。您还需要将事件处理程序绑定(bind)到该面板 (collpane->GetPane()->Bind(/*...*/)) 以捕获其事件。

在这两个处理程序之间,您应该捕获您案例中的所有相关导航事件。

更新 2:wxCollapsiblePane 也实现了导航,因此当焦点从 Pane 外部切换到其包含的 wxPanel 并返回时,将处理程序绑定(bind)到它也会捕获其他事件.不确定这有什么用。如果至少有两个控件添加到 wxCollapsiblePane 的内部面板,为了捕获它们之间的导航事件,您仍然需要绑定(bind)到 collpane->GetPane() 的处理程序

关于c++ - 使用 EVT_NAVIGATION_KEY 处理事件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28256062/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com