| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > Динамический toolbar |
| Автор: Vicul 22.2.2011, 10:54 |
| Всем привет, стоит задача написать плагин для IE, в котором будет присутствовать панелька с инструментами - комбоксами, контекстным меню, кнопками итд. В принципе если все эти элементы известны, то создать такое через ATL/MFC проблем нет, примеров много. Но у меня эта панелька может меняться, плагин периодически будет обращаться к серверу и брать хмл с новыми злементами. Проблема в том, что эти элементы должны через ресурсы получить свой ИД, который должен быть привязан с картой событий и со своими методами. Как это сделать динамически - не знаю. Хотя есть идея - забить в проект максимальное количество ресурсов, а потом включать и формировать из них то количество, которое необходимо, но как то некрасиво получается. Кто, что посоветует? |
| Автор: Earnest 22.2.2011, 15:22 |
| Можно всем кнопкам тулбара присвоить одинаковый ID. А затем в его обработчике уже определять какую кнопку нажали (по позиции мыши). Разумеется, при этом должна быть какая-то структура данных, позволяющая определить, какая команда связана с кнопкой номер x. |
| Автор: Vicul 22.2.2011, 15:42 |
| Спасибо, неплохая идея, как то с привязкой по позициям я пропустил, а как быть с командами контекстных менюшек? |
| Автор: Earnest 23.2.2011, 13:11 |
| А вот тут фокус, кажется, не пройдет - в меню нельзя, вроде, добавить одинаковые ид-ры, кроме сепаратора. Но попробовать можно. Если не получится - тогда выделить пул команд. Или свое меню нарисовать. |
| Автор: Vicul 23.2.2011, 15:03 | ||
только что попробовал - можно добавлять сколько угодно команд, но метод в карте событий, естественно, должен быть один. Т.е. там уже делать распознавание команд. Сложновато получается, но это лучше, чем забивать в проект максимальное число элементов. |
| Автор: Earnest 23.2.2011, 19:30 |
| О, не знала. Тогда точно так же как в тулбаре - определять команду по позиции мыши на момент сообщения. Насколько я помню, есть способ определить, откуда пришла команда - от меню или от контрола - по lParam. Параметры сообщения в обработчике получить не проблема - есть спец. функция, которая возвращает обрабатываемое сообщение. |
| Автор: Vicul 24.2.2011, 14:59 | ||
а как называется, не помнишь? |
| Автор: Earnest 24.2.2011, 18:10 |
| CWnd::GetCurrentMesssage |