Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработка сообщения в двух классах 
:(
    Опции темы
torero
Дата 20.4.2007, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 177
Регистрация: 1.2.2006

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



      Я хотел бы сделать так: нажимаю на кнопку меню "удалить файл"(ID_CUT) и, чтобы это сообщение обрабатывалось 
   вначале в "виде", а потом ещё в "документе".  В MSDN есть на эту тему 1. ON_COMMAND_EX  и 
   2. Technical Note 6 , но не всё понятно. Согласно MSDN пишу так:
   Header file "вида"-             afx_msg BOOL OnCont(UINT nID);
                                                   afx_msg void OnDelete();

   cpp file "вида"-                   ON_COMMAND(ID_CUT,OnDelete)
                                ON_COMMAND_EX(ID_CUT,OnCont)
                                                  ..........................................................................
                                                void CComposeViewNewf::OnDelete()         { .............}      
                       
                                                 BOOL CComposeViewNewf::OnCont(UINT nID) 
                                                {  CCmdUI::ContinueRouting();
                                   return FALSE;
                                                }
     ON_COMMAND(ID_CUT,OnDelete)-работает правильно, но в "документ" не идёт.
     Не могу понять что такое  UINT nID , и ,наверное, ещё что-то не так.
     Сначала делал всё в "документе", работало правильно.
                               
PM MAIL   Вверх
dizzy1984
Дата 20.4.2007, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Зачем тебе обработка и в том, и в другом?
Обычна вся модификация данных проходит в CDocument, а CView ее использует для показа.
Думаю, ты запутался в логике представление/документ
PM MAIL   Вверх
Earnest
Дата 20.4.2007, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Обработчик конкретной команды в конкретной карте должен быть ровно один. Остальные просто смысла не имеют, т.к. берется первый найденный.

Логика обработки такая: если обработчик выставил флаг "обработано", то все, а если нет, поиск обработчика продолжается, но не в текущей карте, а в цепочке передачи ответственности (Frame->View->Document и т.д.)
Стандартные обработчики (void) всегда считаются выполненными, а расширенные - возвращают этот самый флаг.

Таким образом, чтобы сначала обработать команду в виде, а потом в документе, нужно на виде написать один расширенный обработчик ID_CUT, т.е. ON_COMMAND_EX, сделать что надо и вернуть из него FALSE.
Код

BOOL CComposeViewNewf::OnDelete (UINT nID)         

   .............
   return FALSE;
}      

И никаких OnCont не надо, а CCmdUI::ContinueRouting - это вообще из другой оперы.

Цитата(torero @  20.4.2007,  19:59 Найти цитируемый пост)
 Не могу понять что такое  UINT nID, и ,наверное, ещё что-то не так.
 

Это ид-р обрабатываемой команды ( в данном случае ID_CUT). А сделал ты неправильно все. smile 
Надеюсь, теперь понятно.


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


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 177
Регистрация: 1.2.2006

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



Earnest, большое спасибо, всё получилось.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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