wxMenu* m1 = new wxMenu;
m1->Append(id11, str);
m1->Append(id12, str);
wxMenu* m2 = new wxMenu;
m2->Append(id21, str);
m2->Append(id22, str);
wxMenuBar* mbar = new wxMenuBar;
mbar->Append(m1, str);
mbar->Append(m2, str);
SetMenuBar(mbar);
Необходимо динамически включать выключать m1 и m2. Добраться до них можно через: GetMenuBar()->GetMenu(0 или 1), но что делать потом? Можно применить метод Enable по id к каждому итему, но это не удобно. Под ms такое возможно, т.к. любой итем имеет id(его даже можно нажимать...). На крайний случай был бы enumeration итемов, тоже бы сошло. А так нет ни того ни другого... Как поступать в таком случае?
wxMenu* m1 = new wxMenu;
m1->Append(id11, str);
m1->Append(id12, str);
wxMenu* m2 = new wxMenu;
m2->Append(id21, str);
m2->Append(id22, str);
wxMenuBar* mbar = new wxMenuBar;
mbar->Append(m1, str);
mbar->Append(m2, str);
SetMenuBar(mbar);
Необходимо динамически включать выключать m1 и m2. Добраться до них можно через: GetMenuBar()->GetMenu(0 или 1), но что делать потом? Можно применить метод Enable по id к каждому итему, но это не удобно. Под ms такое возможно, т.к. любой итем имеет id(его даже можно нажимать...). На крайний случай был бы enumeration итемов, тоже бы сошло. А так нет ни того ни другого... Как поступать в таком случае?
Как понять "включать выключать m1 и m2"?
Win XP HE SP3, Vista
Xubuntu 12.04 LTS
wxWidgets-2.9.5
wxWidgets-3.0.0
Mojo wrote:Как понять "включать выключать m1 и m2"?
->Enable(false); имеется в виду. Мы можем действовать так:
m1->Enable(id11, false/true), где m1 это wxMenu*. Но в m1 может быть много пунктов(включая подменю) - хочу заблокировать доступ ко всем пунктам сразу - тоесть "загрэйить" сразу весь куст меню.
wxMenu* m1 = new wxMenu;
wxMenuItem* i1 = m1->Append(...);
i1->Enable(false);
Так это , опять же это только один итем. А нужно сразу все.
Значит чтобы окончательно разьяснить что именно нужно покажу видео(приаттачено к посту). По клику меню "Включить-выключить меню слева" меню Options включается и отключается. Тут два момента может ли wxwidgets создать такое меню(верхнего уровня), которое можно кликать? И второй собственно сабж.
Код(win32api) который выполняется при этом:
Так ведь обработчик нужно натравливать на ID, а в конструкторе wxMenu ID не прусмотрен. Или я что-то не так понимаю?
Оказывается есть такой метод wxMenuItemList& wxMenu::GetMenuItems() const. В принципе его достаточно чтобы отключить(циклом) все итемы меню. Хотя не совсем понятно: метод константный, но изменять состояние меню позволяет .
Э нет . Меня интересует как раз не этот Append, а wxMenuBar::Append(wxMenu *menu, const wxString &title) - id нет(собственно как и для любого PopupMenu). Тем не менее PopupMenu замечательно блокируется, т.к. wxMenu::AppendSubMenu возвращает как раз wxMenuItem. Но этого не делает wxMenuBar::Append, хотя это судя по всему не сложно...
Среди примеров не нашёл ничего подходящего. Да, у меня trunc и дока оттуда же.