Как выборочно отключить шоткаты в меню
September 26th, 2008 Begemot Posted in Программирование
При создании меню в wxWidgets, в названии пункта меню можно указать шоткат, который будет использоватся для выбора этого пункта. Автоматическую обработку шоткатов wxWidgets берет на себя, что с одной стороны, конечно, удобно и приятно. Но с другой – иногда, подобная услужливость, явна лишняя.
Уже во второй программе я сталкиваюсь с тем что мне необходимо, отключить автоматическую обработку для некоторых пунктов меню. Прямого способа нет. Я спрашивал в wx-листе, но там или меня не поняли или тоже не знали ответа.
Решение нашлось на форуме, собственно ответ тут. Добавляем обработчики для открытия\закрытия меню.
[sourcecode language=”cpp”]
EVT_MENU_OPEN(MainFrame::OnOpenMenu)
EVT_MENU_CLOSE(MainFrame::OnCloseMenu)
void MainFrame::OnOpenMenu(wxMenuEvent & event)
{
GetMenuBar()->FindItem(ID_COPYITEMTOCLIPBOARD)->SetItemLabel(_(“&Copy to Clipboard\tCtrl+C”));
event.Skip();
}
void MainFrame::OnCloseMenu(wxMenuEvent & event)
{
GetMenuBar()->FindItem(ID_COPYITEMTOCLIPBOARD)->SetItemLabel(_(“&Copy to Clipboard”));
GetMenuBar()->FindItem(ID_COPYITEMTOCLIPBOARD)->SetBitmaps(wxBitmap(copy_clipboard_xpm), wxNullBitmap);
event.Skip();
}
[/sourcecode]
Выглядит грязным хаком, но работает. Особое удивление у меня вызывает необходимость устанавливать каждый раз иконку для меню, причем именно в обработчике закрытия, а не открытия (!), но это волшебство я уже объяснить не могу.
October 30th, 2008 at 11:18 pm
[…] Как выборочно отключить шоткаты в меню […]