【问题标题】:Handle EVT_CHAR in wxFrame or wxDialog在 wxFrame 或 wxDialog 中处理 EVT_CHAR
【发布时间】:2013-10-07 03:46:26
【问题描述】:

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

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

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

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

有没有办法实现它?

【问题讨论】:

    标签: c++ windows macos cocoa wxwidgets


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复。事实上,我使用 wxWidgets 帮助我将 MFC 软件从 Windows 移植到 OSX,在其中我有自己的窗口和控制系统。所以我创建了一个 wxDialog 作为将用户输入转发到我自己的控制系统的容器。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-12-29
      • 1970-01-01
      • 2010-10-27
      • 1970-01-01
      • 1970-01-01
      • 2011-08-14
      • 2014-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多