Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > инициализация ActivX контрола


Автор: Ferrisgeneral 22.6.2010, 15:22
Столкнулся с необходимостью использовать Microsoft Forms 2.0 CommandButton (ActivX Control).
добавляю в диалоговое окно (через контекстное меню), и конечно же не вижу кнопочки (кроме как в привьющке). Где то видел, что надо инициализировать контрол прежде чем создавать окно в котором  будет контрол,  и вот тут перестаю понимать, чего же нужно сделать.

проект с добавленным контролом:
http://www.sendspace.com/file/cumtel

Автор: xvr 22.6.2010, 18:07
ActiveX control будет работать только внутри ActiveX контейнера. Обычный диалог таковым контейнером не является.

Автор: Ferrisgeneral 22.6.2010, 23:58
а как создается этот ActiveX контейнер ? и можно ли будет им пользоваться в диалоговом окне.

Автор: xvr 23.6.2010, 09:04
Цитата(Ferrisgeneral @ 22.6.2010,  23:58)
а как создается этот ActiveX контейнер ? 

Смотри исходники в ATL (CAxWindow CAxWindow2 в atlwin.h)
Цитата

и можно ли будет им пользоваться в диалоговом окне.
Наверное, но придется немного поплясать с бубном (я сам никогда такого не делал)

Автор: Ferrisgeneral 23.6.2010, 17:13
неужели все настолько сложно ? ... и еще ATL надо применять (дело с ним никогда не имел)

Автор: xvr 23.6.2010, 20:10
Цитата(Ferrisgeneral @  23.6.2010,  17:13 Найти цитируемый пост)
неужели все настолько сложно ?
Да. ActiveX с 'голым' WinAPI не сочетаются smile Его придумывали для компонентного программирования, так что он нормально (в смысле без кучи дополнительного кода) работает только в средах, которые для этого были сделаны (разные RAD и WEB в основном)


Автор: Ferrisgeneral 23.6.2010, 21:08
а какой тогда надо код надо добавить, чтобы подружить контрол с WinAPI.


пытался перед созданием окна инициировать контрол

Код

    //создание и заполнение структуры
    tagINITCOMMONCONTROLSEX gg;
    ZeroMemory(&gg, sizeof(gg));
    gg.dwSize = sizeof(gg);
    gg.dwICC = ????? ;

    //передаю адрес в инициализирующую функцию
    InitCommonControlsEx(&gg);


вот только при заполнении структуры, не знаю какой флаг нужно применить для инициализации контрола (стандартные флаги конечно же не катят). Библиотеку и header конечно же подключал.

Автор: xvr 24.6.2010, 08:20
Цитата(Ferrisgeneral @  23.6.2010,  21:08 Найти цитируемый пост)
пытался перед созданием окна инициировать контрол


Цитата(Ferrisgeneral @  23.6.2010,  21:08 Найти цитируемый пост)
InitCommonControlsEx(&gg);

CommonControls и ActiveX это не одно и то же, точнее это совсем разные вещи. 
Для CommonControls достаточно позвать InitCommonControlsEx перед созданием окна (диалога). Для ActiveX ваше окно должно выступать в роли ActiveX контейнера, т.е. имплементировать несколько COM интерфейсов и передать их ActiveX контролу после его создания. Как это делать я уже писал - см. исходники в ATL (я не призываю брать саму ATL, только посмотреть как сделано)


Автор: Ferrisgeneral 24.6.2010, 11:53
ATL всеравно бы не смог воспользоваться

http://ipicture.ru/Gallery/Viewfull/499020.html

Автор: xvr 24.6.2010, 13:25
Цитата(Ferrisgeneral @  24.6.2010,  11:53 Найти цитируемый пост)
ATL всеравно бы не смог воспользоваться
С чего бы это вдруг? То, что на ATL нельзя сделать WF CommandButton еще не означает, что ее нельзя вставить в ActiveX контейнер, сделанный с применением ATL.

Кстати, у вас точно ActiveX контрол? Может это все таки .NET компонент? Ему даже ActiveX контейнер маловато будет.

Автор: Ferrisgeneral 24.6.2010, 22:50
насколько я понимаю, всетаки ActiveX, хотя может и ошибаюсь.
Добавлял контрол так - в диалоговом окне в контекстном меню выбираю пунт insert ActiveX Control и в открывшемся окне выбираю пункт Microsoft Forms 2.0 CommandButton (хотя в другой версии студии в этом окне 4 закладки и данных контрол находится в закладке COM).
у меня стоит VS 2008 Pro SP1.

PS: а что, вообще реально использовать сделанные в дизайнере .Net окна и контролы ?

Автор: xvr 25.6.2010, 12:15
Цитата(Ferrisgeneral @ 24.6.2010,  22:50)
насколько я понимаю, всетаки ActiveX, хотя может и ошибаюсь.
Добавлял контрол так - в диалоговом окне в контекстном меню выбираю пунт insert ActiveX Control и в открывшемся окне выбираю пункт Microsoft Forms 2.0 CommandButton (хотя в другой версии студии в этом окне 4 закладки и данных контрол находится в закладке COM).


Похоже ActiveX
Цитата

PS: а что, вообще реально использовать сделанные в дизайнере .Net окна и контролы ?
В 'голом' WinAPI .Net контролы и окна? Практически нет.

Автор: Ferrisgeneral 26.6.2010, 16:31
при каких условиях можно будет использовть .Net контролы в связке с WinAPI ?

Автор: xvr 27.6.2010, 21:17
Цитата(Ferrisgeneral @ 26.6.2010,  16:31)
при каких условиях можно будет использовть .Net контролы в связке с WinAPI ?

IMHO не при каких (хотя я подробно этот вопрос не изучал)

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