Управление навигацией со включенным оперативным слежением за меню
Как только разрешается оперативное слежение за меню, ваше приложение должно
изменить способ, которым оно отвечает на пользовательское перемещение по нему.
Чтобы копировать поведение стандартных меню, Вы должны реализовать нижеследующие
функциональные возможности явно.
При перемещении с помощью мыши:
Если пользователь перемещает курсор на другую кнопку,
то меню появляется немедленно, а предыдущее меню исчезает.
Оперативное слежение за меню остается активным до тех пор, пока
пользователь не выберет команду или не сделает щелчок мышью в месте, которое
не является частью региона меню. Любое действие деактивизирует оперативное
слежение за меню до тех пор, пока другая кнопка не будет нажата.
Если курсор удаляется из меню, текущее меню остается раскрытым до тех
пор, пока курсор не переместится обратно на него, или пользователь не
сделает щелчок мышью в месте за пределами области закрытой меню. Если курсор
возвращает значение другой кнопки, а не той, что в текущий момент показана
на экране, старое меню разрушается, а на экране показывается новое меню.
При перемещении с помощью клавиатуры:
Клавиша курсора ПЕРЕМЕЩЕНИЕ ВПРАВО (RIGHT ARROWW)
→. Если пункт имеет
подменю, на экране покажется подменю. Если у пункта нет подменю, свертывает
меню и любые подменю, активизирует следующую кнопку с сообщением
TB_SETHOTITEM и показывает меню для расположенной рядом кнопки. Если
последняя кнопка активна, когда это сообщение получено, на экране
показывается меню для первой кнопки.
Клавиша курсора ПЕРЕМЕЩЕНИЕ ВЛЕВО (LEFT ARROW) ←. Если пункт -
подменю, то он свертывается, а фокус передвигается в его родительское меню.
Если пункт - не подменю, то свертывается меню, активизируется следующая кнопка
с сообщением TB_SETHOTITEM и показывается на экране меню для этой кнопки.
Если выделенный пункт меню находится на основном меню,
то меню свертывается, а меню, расположенной рядом кнопки,
показывается на экране. Если активная кнопка была в левом
конце инструментальной панели, то на экране показывается
меню последней кнопки.
Если выделенный пункт меню находится в подменю, подменю
свертывается, сдвигая фокус назад его родителю.
Если выделенный пункт меню не имеет подменю, то на
экране показывается меню расположенной рядом кнопки. Если
активная кнопка была в правом конце инструментальной панели,
то на экране показывается меню последней кнопки.
Если выделенный пункт меню имеет подменю, на
экране показывается подменю.
Клавиша ESCAPE возвращает показ меню выше на одну ступень.
Если на экране показывается подменю, оно свертывается, а
фокус сдвигается в родительское меню.
Если на экране показывается меню кнопки, оно
свертывается, а оперативное слежение за меню блокируется.
Кнопка пункта остается активной.
Если меню на экране не показываются, но кнопка активна,
тогда кнопка деактивизируется, а оперативное слежение за
меню блокируется.
Клавиши курсора ПЕРЕМЕЩЕНИЕ ВВЕРХ (UP
ARROW) ↑ и
ПЕРЕМЕЩЕНИЕ ВНИЗ (DOWN ARROW) ↓
используются только для того, чтобы перемещаться в пределах
конкретного меню.
Клавиша ENTER запускает команду, связанную с пунктом меню. Если
пункт меню имеет подменю, клавиша ENTER показывает его на экране.
Как и в случае запрещения оперативного слежения за меню, ваше приложение
должно обрабатывать перемещение мыши, клавиатуры и смешанное перемещение.
Однако, тот факт, что меню показано на экране, означает, что передача сообщений
должна будет управляться отчасти по-другому.
Некоторые
особенности навигации при помощи мыши и клавиатуры рассматриваются в статьях
перечисленных ниже: