Как выборочно отключить шоткаты в меню. Часть вторая – фигвам.

October 1st, 2008 Begemot Posted in Программирование

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

Подход основывался на изменении tilte для wxMenu – удаления шотката при закрытии меню и добавления при открытии. Я еще тогда пытался изменить код на Enable\Disable – чтобы оставить текст тайтла в одном месте (легче менять если понадобится). Но это не сработало, разбиратся почему я не стал. Теперь знаю.

При нажатии горячей клавиши ассоциированной с пунктом меню, фрейм получает сообщение об открытии меню и соответвенно отрабатывает OnOpenMenu. Поэтому не работала идея дисейблить пункты, так как при нажатии хоткея  сначала вызывался OnOpenMenu, который делает Enable(), после чего разумеется шоткат срабатывал.

Но оказалась, что подход с изменением тайтла тоже не годится. Так как мы отключаем автоматическую обработку только некоторых шоткатов. Все ломается стоит только пользователю  один раз воспользоваьтся любым из автоматически обрабатываемых.

Вызывается OnOpenMenu, добавляет сокращения ко всем пунктам, которые мы вручную отключаем, а вот OnCloseMenu, в данном случае не вызывается.

Полностью отказыватся от автоматический обработки, не хочется, хотя и придется если не найду выхода. Других путей решения задачи пока не нашел. У кого-то есть идеи?

Related:

Comments are closed.