Замена 2х меню в MDI приложении
От: TVagapov  
Дата: 01.04.05 13:32
Оценка:
Уважаемые коллеги, помогите разобратья. Я занимаюсь руссификацией MDI приложения, все ресурсы подгружаю из dll. Встала задача переключиться на русские меню, а их 2 штуки. Одно (IDR_MAINFRAME) отображается, когда документ не загружен, а другое (IDR_DOCMENU), когда документ загружен. Переключение между языками выполняется из меню документа (т.е. активно IDR_DOCMENU). Обработчик находится в CMainFrame::SetLanguage(). В нем я подгружаю dll с русскими ресурсами и далее выполняю такие деиствия:

CMainFrame::SetLanguage()
{
...
CMenu *pMenuCurrent = GetMenu();

m_pMenuNew = new CMenu; //(переменная класса m_pMenuNew, определена как CMenu *m_pMenuNew
)

pMenuCurrent->DestroyMenu(); // 1
delete pMenuCurrent;

m_pMenuNew->LoadMenu(IDR_DOCMENU);
SetMenu(m_pMenuNew);
...
}

Меню документа изначально загружается в InitInstance():

BOOL CAppApp::InitInstance()
{
...
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(
IDR_DOCMENU,
RUNTIME_CLASS(CAppDoc),
RUNTIME_CLASS(CMDIChildWnd), // standard MDI child frame
RUNTIME_CLASS(CAppView));
AddDocTemplate(pDocTemplate);
...
}

Но,
если я уничтожаю меню pMenuCurrent->DestroyMenu(); (в строке с комментом // 1), то при переключении срабатывает ASSERT:
ASSERT(m_hMenuShared == NULL || ::IsMenu(m_hMenuShared)); в файле Winmdi.cpp.
Если меню не уничтожать, то нормально загружается русское меню (IDR_DOCMENU). Но при закрытии документа отображается английское меню (IDR_MAINFRAME).

Если же первоначально загрузить меню IDR_MAINFRAME, то уже никак не попадешь в меню документа.

В результате я понимаю, что надо каким-то образом уничтожить 2 существующих меню и как-то загружить их русские версии, но где именно, и каким образом это правильно сделать не знаю. Подскажите, пожалуйста.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.