![]() |
|
![]() ![]() ![]() |
|
Johnnye |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 22.9.2011 Репутация: нет Всего: нет |
Добрый день.
Очень нужна ваша помощь. Переношу проект написанный на C++ и WINAPI под MFC. От MFC нужен красивый UI. В проекте есть поддержка серверов документов OLE. Хочется оставить реализацию интерфейсов контейнера без изменений не прибегая к помощи MFC. Пока все шло нормально, но столкнулся с проблемой после активации сервера. Проблема в следующем :
Т.е. мне нужно установить меню сервера документов. После упомянутого выше кода у меня появляется меню сервера документов, но естественно оно каркасом обрабатывается неправильно. Доступные только пункты меню ID которых случайным образом совпало с ID стандартного меню. Пробовал так же ON_UPDATE_COMMAND_UI для ID, который появиться только после активации объекта (но это не выход). Ни в том, ни в другом случае команда меню не попадает в окно активного объекта. Короче говоря, мне нужно следующее: 1. Чтобы после активации объекта были доступны пункты меню, ID которых заведомо неизвестно 2. Чтобы команды меню проходили в окно UI-активного объкта (насколько я понимаю, OleSetMenuDescriptor субклассирует мое главное окно) На данном этапе это MDI-приложение с CMFCMenuBar-меню . Заранее благодарен за Вашу помощь. |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
В главном окне добавь передачу команд в свой объект (в функции OnCmdMsg). Внимательно изучи параметры. OnCmdMsg вызывается и для выполнения команд, и для их обновления. Не знаю, что можно передать OLE-объекту, но даже если он никаких подходящих интерфейсов не содержит, то можно сделать следующее:
1) проверить, что ID пришедшей команды есть в новом меню 2) если это CN_COMMAND, то послать объекту соответствующую команду 3) если CN_UPDATE, то нужно сделать пункт меню доступным (в виде параметра void* pExtraна самом деле приходит ССmdUI, его и надо энеблить). Можно попробовать обойтись без п 3), если все пункты меню всегда должны быть доступны. По идее для этого должно хватить п2. Не забудь вернуть TRUE, если ID обработан. -------------------- ... |
|||
|
||||
Johnnye |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 22.9.2011 Репутация: нет Всего: нет |
Огромное спасибо. То, что надо было. |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |