Форум программистов, компьютерный форум CyberForum.ru

Замена 2х меню в MDI приложении - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ WinAPI Как узнать родителя, породившего процесс, с помощью WinAPI? http://www.cyberforum.ru/cpp-beginners/thread496208.html
Столкнулся с поблемой: Проблема следующая- не знаю яз. Си но хочу написать функцию на Си для Java (JNI - JAVA NATIVE INTERFACE) чтобы она показывала родительский процесс запустившего мою Java-программу (к примеру получить: Started by explorer.exe). OS: Win2k Java по всей видимости такого не умеет- поэтому буду ковырять Си. Может у кого есть готовые решения- буду рад их заполучить....
C++ Получение из другой формы ТStringList Не знаю куда это больше подходит, но появилась необходимость из Form2 получить доступ к ТStringList *myList = new ТStringList(); находящемуся в Form1. Есть ли какая то простая возможность это сделать? http://www.cyberforum.ru/cpp-beginners/thread496193.html
C++ Как мне вызвать GetGuiResources в консольном приложении VS6?
Приветствую! Подскажите плиз, как мне вызвать GetGuiResources в консольном приложении VS6. Код: #include <windows.h> #include <winuser.h> HWND hWnd; DWORD dwProcID; HANDLE hProcess; DWORD dwGDI;
Как правильно создать ListControl в VisualC++7 используя MFC? Visual C++
Добрый день! Я хочу создать List control, вот код: // создаю List control void __ListCtrl::Create(CWnd *pParentWnd,const RECT& rcClient) { m_dwStyle = WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT|/*LVS_SHAREIMAGELISTS| LVS_SHOWSELALWAYS|*/LVS_SINGLESEL; if(!m_ListCtrl.Create(m_dwStyle,rcClient,pParentWnd, AFX_IDW_PANE_FIRST)) TRACE0('Failed to create list control
C++ Открылись вакансии в крупную иностранную компанию http://www.cyberforum.ru/cpp-beginners/thread496029.html
Крупная иностранная компания, занимающаяся продвижением на Интернет-рынок виртуальных казино, с возможностями карьерного роса, приглашает сотрудников на следующие вакансии: 1.UNIX-разработчик (UNIX Team Leader). Требования: 1.муж/жен от 23 до 45 лет; 2.высшее техническое образование; 3.опыт работы по программированию на C++ под UNIX от 3 лет; 4.глубокое знание С++, FreeBsd; 5.опыт...
Visual C++ Создание DDE клиента/сервера. Ищу простые примеры кода на С++ (MFC) Как создать DDE сервер, DDE клиент. Организовать их взаимодествие. Ищу простые примеры кода на С++ (MFC). Можно прислать примеры на e-mail. gogo-@mail.ru Спасибо. подробнее

Показать сообщение отдельно
Tvagapov
Сообщений: n/a
12.06.2011, 20:38     Замена 2х меню в MDI приложении
Уважаемые коллеги, помогите разобратья. Я занимаюсь руссификацией 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 существующих меню и как-то загружить их русские версии, но где именно, и каким образом это правильно сделать не знаю. Подскажите, пожалуйста.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 01:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru