![]() |
|
![]() ![]() ![]() |
|
torero |
|
|||
Бывалый ![]() Профиль Группа: 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 , и ,наверное, ещё что-то не так. Сначала делал всё в "документе", работало правильно. |
|||
|
||||
dizzy1984 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 675 Регистрация: 15.2.2007 Репутация: 10 Всего: 25 |
Зачем тебе обработка и в том, и в другом?
Обычна вся модификация данных проходит в CDocument, а CView ее использует для показа. Думаю, ты запутался в логике представление/документ |
|||
|
||||
Earnest |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Обработчик конкретной команды в конкретной карте должен быть ровно один. Остальные просто смысла не имеют, т.к. берется первый найденный.
Логика обработки такая: если обработчик выставил флаг "обработано", то все, а если нет, поиск обработчика продолжается, но не в текущей карте, а в цепочке передачи ответственности (Frame->View->Document и т.д.) Стандартные обработчики (void) всегда считаются выполненными, а расширенные - возвращают этот самый флаг. Таким образом, чтобы сначала обработать команду в виде, а потом в документе, нужно на виде написать один расширенный обработчик ID_CUT, т.е. ON_COMMAND_EX, сделать что надо и вернуть из него FALSE.
И никаких OnCont не надо, а CCmdUI::ContinueRouting - это вообще из другой оперы.
Это ид-р обрабатываемой команды ( в данном случае ID_CUT). А сделал ты неправильно все. ![]() Надеюсь, теперь понятно. -------------------- ... |
||||
|
|||||
torero |
|
|||
Бывалый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 177 Регистрация: 1.2.2006 Репутация: нет Всего: нет |
Earnest, большое спасибо, всё получилось.
|
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |