Правильно обрабатывать VK_DELETE при управлении правами на подклассы

0

Я подклассифицирую элемент управления редактирования, чтобы принимать только десятичные числа.

Все работает нормально, и мне остается только обработать случай, когда пользователь выбирает часть текста и нажимает клавишу Delete (VK_DELETE).

Мой вопрос следующий:

VK_DELETE ли клавиша Delete (VK_DELETE) какое-то сообщение вроде WM_CLEAR которое я могу использовать для моей обработки, или мне нужно обрабатывать WM_KEYDOWN в моей процедуре подкласса и выполнять там обработку?

Спасибо.

С наилучшими пожеланиями.

Теги:
winapi
subclassing
editcontrol

1 ответ

1
Лучший ответ

После запуска Spy++ в редакторе редактирования Notepad я пришел к выводу, что WM_KEYDOWN/WM_KEYUP - это все, что вы получаете.

<000001> 0015082E S WM_KILLFOCUS hwndGetFocus:0015082E
<000002> 0015082E R WM_KILLFOCUS
<000003> 0015082E S WM_SETFOCUS hwndLoseFocus:002D0830
<000004> 0015082E R WM_SETFOCUS
<000005> 0015082E P message:0x0118 [Unknown] wParam:0000FFFF lParam:FFFFF960001DA744
<000006> 0015082E P message:0x0118 [Unknown] wParam:0000FFFF lParam:FFFFF960001DA744
<000007> 0015082E P message:0x0118 [Unknown] wParam:0000FFFF lParam:FFFFF960001DA744
<000008> 0015082E P message:0x0118 [Unknown] wParam:0000FFFF lParam:FFFFF960001DA744
<000009> 0015082E P message:0x0118 [Unknown] wParam:0000FFFF lParam:FFFFF960001DA744
<000010> 0015082E P WM_KEYDOWN nVirtKey:VK_DELETE cRepeat:1 ScanCode:53 fExtended:1 fAltDown:0 fRepeat:0 fUp:0
<000011> 0015082E P WM_KEYUP nVirtKey:VK_DELETE cRepeat:1 ScanCode:53 fExtended:1 fAltDown:0 fRepeat:1 fUp:1
<000012> 0015082E P message:0x0118 [Unknown] wParam:0000FFFF lParam:FFFFF960001DA744
<000013> 0015082E P message:0x0118 [Unknown] wParam:0000FFFF lParam:FFFFF960001DA744
<000014> 0015082E P message:0x0118 [Unknown] wParam:0000FFFF lParam:FFFFF960001DA744
<000015> 0015082E P message:0x0118 [Unknown] wParam:0000FFFF lParam:FFFFF960001DA744
<000016> 0015082E P message:0x0118 [Unknown] wParam:0000FFFF lParam:FFFFF960001DA744
<000017> 0015082E S EM_GETSEL lpdwStart:0020F330 lpdwEnd:0020F334
<000018> 0015082E R EM_GETSEL wStart:2 wEnd:2 lpdwStart:0020F330 (2) lpdwEnd:0020F334 (2)
<000019> 0015082E S WM_KILLFOCUS hwndGetFocus:(null)
<000020> 0015082E R WM_KILLFOCUS

Соответствующие строки <000010> и <000011>: WM_KEYDOWN и WM_KEYUP являются обратными. Там вообще нет WM_CLEAR. Есть интересное сообщение 0x0118, но оно появляется на каждом нажатии клавиши, а не только на клавишу удаления.

  • 0
    Спасибо за проверку моих предположений. Я думаю, что WM_KEYDOWN - единственный путь. С уважением.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню