Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Три проблемы с менюхами, CMainFrame, CEdit, CRichEdit  
V
    Опции темы
SAVe
Дата 7.2.2008, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 15.10.2007

Репутация: нет
Всего: нет



Здравствуйте !

Есть три проблемы с менюхами. 

Первая :

Есть SDI приложение которое содержит 2 View разделённые сплиттером. Пункты меню  Edit,Copy...  и т.д. изначально неактивны т.к. нет обработчиков для них. Добавил для пунктов меню  обработчики (в CMainFrame). Пункты меню становятся активными только при переходе на View 1. При переходе на View 2 автоматом дизаблятся. Как сделать наоборот , что бы они были активны на View 1  и неактивны на View 2.

Вторая:

Есть класс наследник от CEdit. В стандартном CEdit есть всплывающее меню (Edit,Copy,Undo... ). Как его плучить (или заменить)? Нужно изменить названия пунктов меню.

Третья:

Есть класс наследник от CRichEdit и там нет всплывающего меню (Edit,Copy,Undo... ).  Как приделать ?

 Заранее спасибо за ответы.

PM MAIL   Вверх
Earnest
Дата 8.2.2008, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



1) Напиши обработчики не в MfinFrame, а на View2 - короче там, где они должны активизироваться.
Или сам проверяй в существующих (в MainFrame) обработчиках, какой вью активен. Для этого придется написать также код OnUpdate.

2) Сделай свое меню и показывай его на WM_CONTEXTMENU.
3) Аналогично.


--------------------
...
PM   Вверх
SAVe
Дата 8.2.2008, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 15.10.2007

Репутация: нет
Всего: нет



1. Пробовал писать обработчики в View2. Активизируется почему то только первый пункт меню (Undo). В карте сообщений они все одинаково записаны. 

Код

ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
ON_COMMAND(ID_EDIT_CUT, OnEditCut)
ON_COMMAND(ID_EDIT_UNDO, OnEditUndo)


По какому принципу происходит активация и как на это повлиять? 
PM MAIL   Вверх
Earnest
Дата 8.2.2008, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Активизация происходит так:
Перед появлением меню главному окну (т.е. владельцу меню) посылается сообщение WM_INITMENUPOPUP.
В обработчике этого сообщения для каждого пункта делается вызов OnCmdMsg сначала с кодом CN_UPDATE_COMMAND_UI, а потом просто COMMAND, но со спец. параметрами. Вызов проходит по всей цепочки диспетчеризации команд (т.е. сначала активному виду, потом документу и т.д.). Цель этого дела - найти обработчик обновления команды (OnUpdate) или просто обработчик (OnCommand). 
Если ничего не нашли, то пункт меню засеривается.
Очень поучительно поставить точку прерывания в OnInitMenuPopup главного окна и пройти по цепочке.
Тогда поймешь, почему обработчики не находятся (или какие находятся). 



--------------------
...
PM   Вверх
SAVe
Дата 14.2.2008, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 15.10.2007

Репутация: нет
Всего: нет



Сделал всё как  советует Earnest. Всё заработало. Большое спасибо.

Первая проблема решилась добавлением в View2 обработчиков COMMAND и UPDATE_COMMAND_UI  ( для UPDATE_COMMAND_UI  просто пустых, без всякого функционала) 

Для 2 и 3 обработал  WM_INITMENUPOPUP. Только меню пришлось вручную создавать (CreatePopupMenu() ,AppendMenu()...)  т.к. мой контрольчик содержится в lib библиотеке , а при линковке используются ресурсы ехе файла. Т.е. мой контрол ресурсов не видит.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0403 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.