0

众所周知,EVT_CHAR 是一个不会传播到 wxTopLevelWindow(wxFrame 和 wxDialog)的基本事件。

但是我有一个 wxDialog,上面没有任何 wxWidgets 控件,并且需要处理用户键盘输入(处理 EVT_CHAR 事件)。

我看到了关于全局捕获关键事件的 wiki,但它不适用于 EVT_CHAR 事件,因为需要翻译 EVT_CHAR 事件以获取用户输入

我试图让 wxDialog 隐藏子 wxWindow,它将 EVT_CHAR 转发给它的父 wxDialog。它适用于 Windows 平台,而不适用于我的目标平台 OSX。

有没有办法实现它?

4

2 回答 2

0

为什么您需要处理对话框本身中的所有键盘输入?我知道有两种典型情况:要么您想以相同的方式处理几个不同控件中的按键,要么您需要处理所有控件中的某些特定按键(例如WXK_F1)。前者可以通过将同一个事件处理程序绑定到多个控件来完成。后者——通过使用快捷键表和您要特别处理的键的条目。

于 2013-10-07T09:56:55.940 回答
0

最后,我根据这个实现了我想要的:http: //trac.wxwidgets.org/ticket/15345

在 wxWidgets 3.0 中,wxNSView 实现了 NSTextInputClient 协议,这使得每个小部件都可以正确处理 EVT_CHAR。

但是 EVT_CHAR 仍然不能被 wxDialog 或 wxFrame 处理,因为 IsUserPanel() 函数的一些调用。所以我评论了一些 IsUserPanel 的调用,以使其对我有用。

于 2013-10-19T07:38:23.823 回答