| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > Проблема с обновлением контекстного меню |
| Автор: Амортизатор 31.7.2005, 00:35 |
| Контекстное меню не обновляется, например CView::OnUpdatePaste - не вызывается при всплывании меню. Как быть? |
| Автор: Амортизатор 1.8.2005, 12:44 |
| Вызов функции, отвечающей за обновление контекстного меню вызывается лишь при клике на одну из команд, а при появлении меню (при щелчке правой кнопкой мыши) не вызывается. Неужели никто с этим не сталкивался? |
| Автор: chaos 1.8.2005, 13:36 |
| обрабатывай сообщение WM_CONTEXTMENU |
| Автор: Амортизатор 1.8.2005, 17:41 | ||||
| Но я его и так отлавливаю. Кажется, я толком не объяснил суть проблемы Вот тут я отлавливаю то самое сообщение WM_CONTEXTMENU
С командой Paste контекстного меню связана переменная ID_PASTE. С ней я ассоциирую On_update_UI
Так вот эта функция по идее должна отображаться при правом щелке и показывании контексного меню (винда посылает сообщение WM_INITMENUPOPUP и формируется объект CCmdUI, которому посылается сообщение WM_UPDATE_UI и которое не удается перехватить) |
| Автор: Earnest 2.8.2005, 17:25 |
| Дело в том, что у view нет обработчика WM_INITMENUPOPUP. В MFC-framework такой обработчик есть только у FrameWnd. Поэтому вариантов 2: либо ловишь сам WM_INITPOPUPMENU в своем view, либо передаешь в TrackPopupMenu не this, а parent frame, тогда update'ы дойдут до view по стандартному пути диспетчиризации команд. Второй вариант проще, если речь идет только о легкой модификации пунктов меню (enable, setcheck, etc). Первый - если нужно модифицировать меню по-крупному. Не уверена на 100%, т.к. давно в этом разбиралась, но, мо-моему, так. |
| Автор: Амортизатор 3.8.2005, 09:47 |
| Спасибо. Воспользовался вторым вариантом. |
| Автор: pvl 16.11.2005, 21:57 |
| Я так понял Вы разобрались с этим вопросом, пожалуйста ответьте кодом как нажать на кнопку чужого контекстного меню? |