Как мы все знаем, EVT_CHAR является основным событием, которое не распространяется на wxTopLevelWindow (wxFrame и wxDialog).
Но у меня есть wxDialog без каких-либо элементов управления wxWidgets, и вам нужно обрабатывать ввод пользовательской клавиатуры (обрабатывать событие EVT_CHAR).
Я видел вики о событиях ключа catch во всем мире, но не работает над событием EVT_CHAR, поскольку событие EVT_CHAR необходимо перевести, чтобы получить вход пользователя
И я стараюсь, чтобы wxDialog скрывал детей wxWindow, который в EVT_CHAR для своего родителя wxDialog. Он работает на платформе Windows, а не на OSX, которая является моей целевой платформой.
Есть ли способ его реализовать?
Наконец, я выполнил то, что хочу, в соответствии с этим: http://trac.wxwidgets.org/ticket/15345
В wxWidgets 3.0 wxNSView реализует протокол NSTextInputClient, который позволяет каждому виджету правильно обрабатывать EVT_CHAR.
Но EVT_CHAR по-прежнему не может обрабатываться wxDialog или wxFrame из-за некоторого вызова функции IsUserPanel(). Поэтому я прокомментировал некоторый призыв IsUserPanel, чтобы он работал для меня.
Зачем вам нужно обрабатывать всю клавиатуру в самом диалоге? Для этого есть два типичных случая: либо вы хотите обрабатывать нажатия клавиш в нескольких разных элементах управления одинаково, либо вам нужно обрабатывать некоторые нажатия клавиш (например, WXK_F1
) во всех элементах управления. Первое может быть выполнено путем связывания одного и того же обработчика событий с несколькими элементами управления. Последний - с использованием таблицы ускорителей с записью для ключа, который вы хотите обрабатывать специально.