在wxFrame或wxDialog中处理EVT_CHAR

时间:2013-10-07 03:46:26

标签: c++ windows macos cocoa wxwidgets

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

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

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

我试图让wxDialog成为一个隐藏的孩子wxWindow,它将EVT_CHAR转向其父wxDialog。它适用于Windows平台,而不适用于我的目标平台OSX。

有没有办法实现它?

2 个答案:

答案 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的一些调用,让它对我有用。