winapi — Win32 C ++ Назначение / изменение клавиши ускорения для MenuItem во время работы

Я хотел бы назначить клавишу ускорения для пункта меню, который не имеет клавиши ускорения во время работы в C ++, и иметь возможность изменить его. Я просмотрел документы и MSDN, и мне не ясно, как это можно сделать.

0

Решение

Вам нужно управлять своей собственной таблицей ускорителей.

Вы можете создать таблицу ресурсов из массива структур ACCEL, заполнив и передав их в CreateAcceleratorTable. Или вы можете загрузить их из ресурсов через LoadAccelerators. Это дает вам ручку HACCEL. В вашем основном цикле сообщений используйте этот дескриптор HACCEL в вызове TranslateAccelerator.

Когда приходит время редактировать ускорители, если у вас больше нет массива ACCEL, вызовите CopyAcceleratorTable с дескриптором HACCEL, чтобы вернуть массив ACCEL. При необходимости измените этот массив, затем заново создайте новый дескриптор HACCEL с помощью CreateAcceleratorTable и удалите старый. Используйте эту новую ручку для ускорителей до следующего изменения.

Ваш WndProc будет получать сообщения для этих ускорителей. В обработчике сообщений вызовите реализацию обработчика действий меню.

2

Другие решения

Других решений пока нет …