Из-за чего в классе CView может не работать:
void CMenuView::OnMenuRestrict()
{
CMenu MyMenu;
MyMenu.DestroyMenu();
MyMenu.LoadMenu(IDR_MENU1);
SetMenu(&MyMenu);
}
?
Или как бы вы осуществили замену одного меню другим в процессе работы программы?
23 ноября 2008 в 18:05
Пожалуйста.
23 ноября 2008 в 18:02
Огромное спасибо за помощь! Оказывается, не хватало именно указателя..
=)
23 ноября 2008 в 17:01
Во-первых, DEBUG ASSERTION можно посмотреть: что ему не нравится (войти в отладку).Иногда это поясняет ситуацию.
Во-вторых и в примере МСДН и по приведённой ссылке SetMenu вызывается не у CView, а у главного окна. Можно воспользоваться функцией получения указателя на главное окно
AfxGetMainWnd()->SetMenu(&m_menu);
23 ноября 2008 в 17:00
Насчёт CMenu я поняла, что глупо так делать =) Исправила. Не помогло. В OnCreate всё работает.. И пример из MSDN, и из firststeps. А если писать в функции класса CView, то сначала ничего не происходит, а потом появляется Debug Assertion Failed =(
23 ноября 2008 в 16:04
То самое, что я написал: Объект СMenu нельзя объявлять в самой процедуре, потому что он удаляется, когда программа выходит из процедуры.
Т.е. в приведённом в первом сообщении коде всё может работать правильно: грузиться, устанавливаться. Но потом меню удаляется и всё идёт на смарку.
23 ноября 2008 в 16:03
Спасибо за MSDN
А что можно про эту ссылку сказать:
//www.firststeps.ru/mfc/steps/r.php?8 ?
23 ноября 2008 в 13:03
Во первых не нужно вызывать DestroyMeny для объекта, только что созданного объекта.
Во вторых нужно иметь в виду, что myMenu прекращает своё существование в момент выхода из фнукции. А в диструкторе, наверняка, вызывается DestroyMenu.
Я бы сделал myMenu полем класса, как это и предалается в примере по ссылке.
23 ноября 2008 в 13:02
Пример из MSDN
//msdn.microsoft.com/en-us/library/177ay1×0(VS.80).aspx
23 ноября 2008 в 12:02
MyMenu.DestroyMenu(); => эта срока точно нужна?что она делает?
23 ноября 2008 в 12:02
"Функция DestroyMenu() уничтожает меню. Как видите, эта она является членом класса CMenu. Мы уничтожаем не просто меню программы, а меню класса меню связанного с окном программы. Уничтожается меню связанное функцией SetMenu(). "