WinApi эквивалент .NET KeyPreview - PullRequest
2 голосов
/ 25 апреля 2010

В .Net есть функция под названием KeyPreview. Как я могу сделать это в WinApi. Может быть, мне это не обязательно, но у моего hWnd есть WM_KEYDOWN, но он не получает его, когда у моего текстового поля есть фокус. Как мне этого добиться? Спасибо

* Использование чистого Win32API ...

есть ли альтернатива, как я могу обработать WM_KEYDOWN в текстовом поле?

Ответы [ 3 ]

0 голосов
/ 28 апреля 2010

Вы можете попытаться создать подкласс управления правкой. Либо «подклассы экземпляров», чтобы перехватывать сообщения только для одного окна, либо «глобальные подклассы», чтобы перехватывать сообщения для всех окон этого класса (в вашем приложении, а не в масштабе всей системы).

В приведенном здесь примере (http://msdn.microsoft.com/en-us/library/ms997565.aspx) показано, как создать подкласс для элемента управления редактирования и перехватить сообщение WM_GETDLGCODE - его не так сложно изменить на WM_KEYDOWN.

У вас могут быть проблемы с предварительным просмотром клавиш, используемых для диалоговых команд, например, TAB или RETURN, так как они могут оказаться в ловушке выше по пищевой цепи. Вам также может понадобиться посмотреть на изменение WM_GETDLGCODE.

0 голосов
/ 07 марта 2018

В WinAPI нет такой возможности перехватывать сообщения, принадлежащие элементам управления, в оконной процедуре родительского окна (хотя существуют некоторые исключения). Что в основном делает .NET, так это то, что он направляет все сообщения всех элементов управления, включая их родительское окно, в одну оконную процедуру. Тогда легко поймать все сообщения в одном месте. Это ваш путь - установить оконные процедуры всех элементов управления в одну процедуру и там перехватить все сообщения Поскольку оконная процедура также получает параметр hwnd, тогда также легко определить элемент управления, которому принадлежит сообщение.

0 голосов
/ 25 апреля 2010
  1. Если вы используете MFC, вы можете посмотреть на PreTranslateMessage (я не уверен относительно PreTranslateMessage, но вы можете легко проверить, достаточно ли этого для переопределения функции).
  2. Вы можете установить клавиатуру крючком.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...