众所周知,EVT_CHAR是一个基本事件,不会传播到wxTopLevelWindow(wxFrame和wxDialog)。
但我有一个没有任何wxWidgets控件的wxDialog,需要处理用户键盘输入(处理EVT_CHAR事件)。
我在全局看到了关于捕获关键事件的wiki,但它不适用于EVT_CHAR事件,因为需要转换EVT_CHAR事件以获取用户输入
我试图让wxDialog成为一个隐藏的孩子wxWindow,它将EVT_CHAR转向其父wxDialog。它适用于Windows平台,而不适用于我的目标平台OSX。
有没有办法实现它?
答案 0 :(得分:0)
为什么需要在对话框中处理所有键盘输入?我知道有两种典型的情况:您要么以相同的方式处理几个不同控件中的按键,要么需要在所有控件中处理某些特定按键(例如WXK_F1
)。前者可以通过binding相同的事件处理程序来完成几个控件。后者 - 通过使用加速器表和您想要特别处理的键的条目。
答案 1 :(得分:0)
最后,我根据这个实现了我想要的东西: http://trac.wxwidgets.org/ticket/15345
在wxWidgets 3.0中,wxNSView实现了NSTextInputClient协议,这使得每个小部件都可以正确处理EVT_CHAR。
但由于调用了IsUserPanel()函数,EVT_CHAR仍然无法被wxDialog或wxFrame处理。所以我评论了IsUserPanel的一些调用,让它对我有用。