Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Меню при нажатии на правую кнопку мыши 
V
    Опции темы
metoflex
  Дата 16.9.2010, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



У меня создан CTreeCtrl, там есть различные категории и т.п. как мне прописать, чтобы при нажатии на правую кнопку, на одном из элементов древа, мыши возникало контекстное меню (как в винде при нажатии, в проводнике скажем, на правую кнопку мыши). 

Идея нужна лишь по тому как прописать возникновение контекстного меню при нажатии на пр.кнопку мыши вообще, а с древом идея вообщем есть

Огромное Спасибо!
PM MAIL   Вверх
Earnest
Дата 17.9.2010, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Обрабатывай сообщение WM_CONTEXMENU, в обработчике вызывай функцию TrackPopupMenu


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


Шустрый
*


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

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



Ок. Помпробую! Спасибо Огромное!)

У меня появилась мысль - каждый раз при активности в окне древа обрабатывать каждое действие (вернее ввод любого символа) через getch(); А потом просто сравнивать его с кодом правой кнопки. Только вот не могу нигде найти ASCII или 16-ти ричный код правой кнопки... Не подскажете?
PM MAIL   Вверх
Earnest
Дата 17.9.2010, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Какой getch в WinAPI? Какой ASSCII код кнопки мыши?
Кнопка мыши и кнопка клавиатуры генерируют разные события.
И вообще, уже сказано - лови WM_CONTEXTMENU - это сообщение генерируются при нажатии правой кнопки мыши (кроме прочей обработки). И отображать контекстное меню нужно именно по этому событию. Кроме редких специальных случаев, до понимания которых еще надо дожить.


--------------------
...
PM   Вверх
metoflex
Дата 17.9.2010, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Если можно маленький кусочек кода с примером того, как поймать WM_CONTEXTMENU? Не очень понял суть..

Спасибо Огромное!
PM MAIL   Вверх
Earnest
Дата 17.9.2010, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Давай-ка читай учебники: как обработчик сообщения к MFC-окну прикрутить и т.д. Похоже, с самого начала.
Вроде в сети были какие-то MFC first steps, если книжек нет.


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


Шустрый
*


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

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



Код

POINT Cur;
    HWND wnd;
    HINSTANCE first;
    HMENU menu;
    HMENU menupart;

    first=(HINSTANCE)malloc(sizeof(HINSTANCE));
    wnd=(HWND)malloc(sizeof(HWND));


    GetCursorPos(&Cur);

    menu=LoadMenu(first,_T("Вставить"));

    menupart = GetSubMenu(menu, 0);

    TrackPopupMenu(menupart,TPM_LEFTALIGN | TPM_RIGHTBUTTON, Cur.x, Cur.y,0,wnd,NULL);

    DestroyMenu(menu);


Вот прописал появление меню таким образом, а результат-ничего не происходит...

Книги почитаю)
Спасибо за помощь!
PM MAIL   Вверх
Earnest
Дата 17.9.2010, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(metoflex @  17.9.2010,  12:36 Найти цитируемый пост)
wnd=(HWND)malloc(sizeof(HWND));

а потом передавать это в TrackPopupMenu - бред. Это должно быть окно, которое будет принимать команды.
Остальное, если это код обработчика WM_CONTEXTMENU, и в ресурсах есть меню "Вставить", а в нем попап, то все вроде нормально.
Если не работает - дебажь.


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


Шустрый
*


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

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



wnd-это мне надо диалоговое окно создать или сделать ссылку на меню (ктороый создал в ресурсах)?
PM MAIL   Вверх
alex6077582
Дата 17.9.2010, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



В редакторе ресурсов кликаеш правой кнопкой мыши по окну(в котором будет вызывотся меню)
Выбираеш свойства, сообщения, WM_CONTEXTMENU добавить OnContexMenu.
Естественно создаёш меню(в редакторе или динамически)
В созданный обработчик внесем следующий код:
    CMenu cMenu, *pMenu;
    cMenu.LoadMenu(IDR_MENU2);//загрузим меню из ресурсов
                                               //метод GetSubMenu возвращает указатель на, 
                               //в нашем случае, первое выпадающее меню
    pMenu=cMenu.GetSubMenu(0);//возьмем интересующее нас меню
                                             //ну и, непосредственно, покажем это меню
    pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,
                     point.x,point.y,this);


PM MAIL   Вверх
metoflex
Дата 18.9.2010, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Всё!)) Получилось!) Спасибо огромное!)


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


 




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


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

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