Win32activex : conteneur de contrôles activex en win32 (api com ole)

Soyez le premier à donner votre avis sur cette source.

Vue 14 459 fois - Téléchargée 1 550 fois

Description

Win32ActiveX est un programme utilisant uniquement les API Windows (sans MFC)
montrant l'utilisation des contrôles ActiveX.

Il contient 2 classes :
- TControlContainer :
il s'agit de la classe à associée à la fenêtre ou la boîte de dialogue qui
va afficher les contrôles ActiveX.
- TControlSite :
il s'agit du contrôle ActiveX en lui-même où plutôt de son emplacement au
sein du container.

Pour créer un contrôle ActiveX il faut d'abord créer un conatiner puis créer
un contrôle dedans en donnant son CLSID. Ensuite, il y a les méthodes
MoveWindow(), SetWindowPos(), ShowWindow(), SetFocus() qui permette de
l'afficher.

L'accès aux propriétés et méthodes du contrôle se fait par l'intermédiare de
l'objet IOleControl donné par GetObject().

Pour appeler les méthodes et propriétés du contrôle il y a 2 méthodes :
- importer les définitions de type du contrôle par #import qui va donner les
fichiers d'entêtes .tli et .tlh contenant les interfaces supportées par
le contrôle et récupérerable par un QueryInterfcae sur l'objet IOleObject.
- n'utiliser que l'interface IDispatch du contrôle et appeler directement
Invoke en donnat l'id de la méthode (récupérable à partir de son nom avec
GetIDSOfNames().

J'ai utiliser la seconde méthode car l'emplacement des définition de type
des contrôle varie d'un système à l'autre, compliquant la compilation.
D'autre part tous les compilateurs ne supporte pas #import.

L'inconvéniant de cette technique est le passage de paramètres qui doivent tous
être des VARIANT et passés dans un tableau.

4 contrôles ActiveX sont affichés :
Navigateur Web Microsoft
Windows Media Player
Acrobat Control for ActiveX
Microsoft FlexGrid Control

Ces 4 contrôles sont en générals présent sur tous les systèmes...

compile sous Dev-cpp comme sous Visual (.rc et .h sans doute à modifier)...

Conclusion :


La version release (celle du zip) a quelques bugs que la version debug n'a pas et pas sur tous les systèmes...

La page HTML ne s'affiche pas.
Le contrôle FlexGrid ne s'affiche que si on minimise puis réaffiche la fenêtre

Ce prog est essentiellement basé sur le code source des MFC (occcont.cpp et occsite.cpp du répertoire SRC des MFC) réarrangé en virant ce qui sert à rien et en adaptant qulque peu.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

piou_31
Messages postés
3
Date d'inscription
mercredi 20 juin 2007
Statut
Membre
Dernière intervention
24 avril 2008

bonjour,

Qu'est-ce que tu appelle l'activeX Embedding natif sous windows?
Miquel75
Messages postés
41
Date d'inscription
mercredi 5 mars 2008
Statut
Membre
Dernière intervention
23 avril 2009

Code totalement inutile, vu que l'ActiveX Embedding est natif dans Windows...
Oeil_de_taupe
Messages postés
150
Date d'inscription
samedi 31 janvier 2004
Statut
Membre
Dernière intervention
16 février 2009

Bravo pour ton code, c'est rare un code de cette qualité pour un conteneur ActiveX (je n'en ai pas trouvé beaucoups sur internet). Un jour j'ai voulu utiliser le contrôle MSFlexGrid dans un programme (pour afficher un son). J'ai voulu intégré ce contrôle sans MFC ni ATL. Ta source est super mais je cherche un bouquin ou un site qui me permettrait de mieux comprendre la construction d'un conteneur ActiveX. Sais tu si un site ou un bouquin explique bien ça?
zed38
Messages postés
1
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
23 juin 2005

Bonjour,

Je n'utilise que la partie permettant d'afficher un MSFlexGrid dans une boite de dialogue. Ca marche nikel sur ma machine de dev.

Mais, je dois installer l'appli développée sur un poste "vierge", cad sans aucun environnement de dev. J'ai installé l'appli, l'OCX (+ regsvr32), le pack vcredist.exe, le pack VBRun60.exe (pour les DLL OLE). Mais rien n'y fait, l'appel de la methode "g_aCtrlData[3].m_pSite->GetObject()->QueryInterface(IID_IDispatch, (void**)&g_pMSFlexGrid);" reste infructueux (g_pMSFlexGrid = NULL).

J'y comprends plus rien, quelqu'un peut-il m'aider ?

D'avance merci.
racpp
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
11
Salut,
Comme promis, voici un moyen très simple permettant de réaliser des conteneurs Activex en pur API. J'espère que ça vous intéressera:
http://www.cppfrance.com/code.aspx?ID=29171

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.