Какое сообщение заставляет кнопку отправлять сообщение WM_COMMAND

StackOverflow https://stackoverflow.com/questions/4494278

Вопрос

Я знаю, что кнопка при нажатии отправляет сообщение WM_COMMAND своему родительскому элементу, но какое сообщение она получает, что заставляет ее отправлять это сообщение?Я переопределяю WndProc по умолчанию для кнопки, и кнопка не получает сообщение WM_COMMAND, поэтому мне нужно знать, какое сообщение заставляет кнопку отправлять сообщение WM_COMMAND, чтобы я мог воспроизвести эту функциональность.

Это было полезно?

Решение

Я обнаружил, что на самом деле это комбинация WM_LBUTTONDOWN, WM_MOUSELEAVE и нескольких других вещей.Например, команда WM_COMMAND будет запущена только в том случае, если мышь была нажата на кнопку, и все еще находится на кнопке при запуске WM_LBUTTONUP.Что касается пробела, ввода и т.д., я полагаю, что он просто обрабатывает сообщение VK_ENTER и прочее.

Другие советы

Кажется, я вспоминаю, что это wm_lbuttonup, но используйте шпионскую программу, чтобы узнать наверняка.

Сообщение wm_command всегда получено родителем Controls. Если вы хотите нажать кнопку программно, вы можете сделать это:

::SendMessage( button_handle, BM_CLICK, 0, 0 );

LPARAM WM_COMMAND удерживает Button_handle. Таким образом, вы можете извлечь информацию о вызове кнопки

::GetWindowLongPtr( HWND( lParam ), GWL_USERDATA );

Вы, должно быть, были установлены этой информацией раньше

::SetWindowLongPtr( button_handle, GWL_USERDATA, reinterpret_cast<LONG_PTR>( some_info ) );

Например, некоторые можно подать на кнопку

Невозможно переопределить WM_COMMAND Сообщение, потому что WM_LBUTTONDOWN Сообщение преобразуется как WM_COMMAND Сообщение и отправьте его в контроль родителей. Это механизм, который делается на заднем плане.

Вы спросили о пространстве и введите ключ. Это можно управлять виртуальными кодами ключей, такими как vk_enter , vk_tab...так далее.,

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top