Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с обновлением контекстного меню 
:(
    Опции темы
Амортизатор
Дата 31.7.2005, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 17.4.2005
Где: в Караганде

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



Контекстное меню не обновляется, например CView::OnUpdatePaste - не вызывается при всплывании меню. Как быть?


--------------------
Поехали!
PM MAIL   Вверх
Амортизатор
Дата 1.8.2005, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 17.4.2005
Где: в Караганде

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



Вызов функции, отвечающей за обновление контекстного меню вызывается лишь при клике на одну из команд, а при появлении меню (при щелчке правой кнопкой мыши) не вызывается. Неужели никто с этим не сталкивался?


--------------------
Поехали!
PM MAIL   Вверх
chaos
Дата 1.8.2005, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

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



обрабатывай сообщение
WM_CONTEXTMENU
PM WWW   Вверх
Амортизатор
Дата 1.8.2005, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 17.4.2005
Где: в Караганде

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



Но я его и так отлавливаю.
Кажется, я толком не объяснил суть проблемы

Вот тут я отлавливаю то самое сообщение WM_CONTEXTMENU
Код

void CMapView::OnContextMenu(CWnd* pWnd, CPoint point) 
{
// TODO: Add your message handler code here
    if (edit==false)
    return;
    CMapDoc* pDoc = GetDocument();
    CPoint pt=point;
    ScreenToClient(&pt);

    CMenu menu;
    int y=pDoc->PtInHouses(pt);
    if (y!=-1)
    {
        menu.LoadMenu(ContextMenu1);
        pDoc->IndentHouse(y);
        Invalidate(true);
    }
    else
        menu.LoadMenu(ContextMenu2);
    
    menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);
}


С командой Paste контекстного меню связана переменная ID_PASTE. С ней я ассоциирую On_update_UI

Код

CMapDoc* pDoc = GetDocument();
if (edit==false || pDoc->Accent()==-1)
    pCmdUI->Enable(false);
else
    pCmdUI->Enable(true);


Так вот эта функция по идее должна отображаться при правом щелке и показывании контексного меню (винда посылает сообщение WM_INITMENUPOPUP и формируется объект CCmdUI, которому посылается сообщение WM_UPDATE_UI и которое не удается перехватить)


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


Эксперт
****


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

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



Дело в том, что у view нет обработчика WM_INITMENUPOPUP. В MFC-framework такой обработчик есть только у FrameWnd. Поэтому вариантов 2: либо ловишь сам WM_INITPOPUPMENU в своем view, либо передаешь в TrackPopupMenu не this, а parent frame, тогда update'ы дойдут до view по стандартному пути диспетчиризации команд. Второй вариант проще, если речь идет только о легкой модификации пунктов меню (enable, setcheck, etc). Первый - если нужно модифицировать меню по-крупному.
Не уверена на 100%, т.к. давно в этом разбиралась, но, мо-моему, так.


--------------------
...
PM   Вверх
Амортизатор
Дата 3.8.2005, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 17.4.2005
Где: в Караганде

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



Спасибо. Воспользовался вторым вариантом.


--------------------
Поехали!
PM MAIL   Вверх
pvl
Дата 16.11.2005, 21:57 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











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


 




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


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

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