| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > Меню при нажатии на правую кнопку мыши |
| Автор: metoflex 16.9.2010, 20:38 |
| У меня создан CTreeCtrl, там есть различные категории и т.п. как мне прописать, чтобы при нажатии на правую кнопку, на одном из элементов древа, мыши возникало контекстное меню (как в винде при нажатии, в проводнике скажем, на правую кнопку мыши). Идея нужна лишь по тому как прописать возникновение контекстного меню при нажатии на пр.кнопку мыши вообще, а с древом идея вообщем есть Огромное Спасибо! |
| Автор: Earnest 17.9.2010, 08:58 |
| Обрабатывай сообщение WM_CONTEXMENU, в обработчике вызывай функцию TrackPopupMenu |
| Автор: metoflex 17.9.2010, 09:41 |
| Ок. Помпробую! Спасибо Огромное!) У меня появилась мысль - каждый раз при активности в окне древа обрабатывать каждое действие (вернее ввод любого символа) через getch(); А потом просто сравнивать его с кодом правой кнопки. Только вот не могу нигде найти ASCII или 16-ти ричный код правой кнопки... Не подскажете? |
| Автор: Earnest 17.9.2010, 09:50 |
| Какой getch в WinAPI? Какой ASSCII код кнопки мыши? Кнопка мыши и кнопка клавиатуры генерируют разные события. И вообще, уже сказано - лови WM_CONTEXTMENU - это сообщение генерируются при нажатии правой кнопки мыши (кроме прочей обработки). И отображать контекстное меню нужно именно по этому событию. Кроме редких специальных случаев, до понимания которых еще надо дожить. |
| Автор: metoflex 17.9.2010, 10:06 |
| Если можно маленький кусочек кода с примером того, как поймать WM_CONTEXTMENU? Не очень понял суть.. Спасибо Огромное! |
| Автор: Earnest 17.9.2010, 11:08 |
| Давай-ка читай учебники: как обработчик сообщения к MFC-окну прикрутить и т.д. Похоже, с самого начала. Вроде в сети были какие-то MFC first steps, если книжек нет. |
| Автор: metoflex 17.9.2010, 11:36 | ||
Вот прописал появление меню таким образом, а результат-ничего не происходит... Книги почитаю) Спасибо за помощь! |
| Автор: Earnest 17.9.2010, 12:38 |
а потом передавать это в TrackPopupMenu - бред. Это должно быть окно, которое будет принимать команды. Остальное, если это код обработчика WM_CONTEXTMENU, и в ресурсах есть меню "Вставить", а в нем попап, то все вроде нормально. Если не работает - дебажь. |
| Автор: metoflex 17.9.2010, 13:30 |
| wnd-это мне надо диалоговое окно создать или сделать ссылку на меню (ктороый создал в ресурсах)? |
| Автор: alex6077582 17.9.2010, 14:37 |
| В редакторе ресурсов кликаеш правой кнопкой мыши по окну(в котором будет вызывотся меню) Выбираеш свойства, сообщения, 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); |
| Автор: metoflex 18.9.2010, 20:32 |
| Всё!)) Получилось!) Спасибо огромное!) |