Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)