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

Soyez le premier à donner votre avis sur cette source.

Vue 14 359 fois - Téléchargée 1 535 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

BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16 -
Encore un tres bon exemple fourni par ymca2003.
Cette source devrait egalement repondre a de multiples questions du forum sur ce sujet.
racpp
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
7 -
Salut,
Très bon travail ymca2003.
C'etait moi qui avait posté une question à ce propos dans le forum il y'a cinq mois. Scolinks avait proposé un source utilisant MediaPlayer (enorme travail). C'était tellement compliqué que je n'ai pas réussi à l'adapter aux autres activex comme flash etc...
En continuant à chercher, et en bricolant un peu, j'ai fini par découvrir un moyen ultra simple permettant de transformer n'importe quelle fenêtre ou controle en conteneur activex. Ce truc est introuvable sur le net (d'après mes longues recherches). Il n'utilise ni les classes MFC ni ATL. C'est en pur API. Je l'ai testé sur plusieurs activex et ça marche à merveille (navigateur web, flash, mediaplayer et d'autres moins connus). J'avais l'intention de proposer un source pour IWebBrowse2 et un autre pour IShockwaveFlash vers la fin décembre dernier. Mais j'ai hésité car, apparemment, mes trouvailles ne plaisent pas aux admins du site (comme mon hook global sans DLL). Car, une fois de plus, cela prouverait que Microsoft nous cache beaucoup de choses qui nous faciliteraient la vie en programmation. En fait le truc que j'ai découvert est incroyable : Il suffit d'ajouter cinq petites lignes de code pour transformer une fenêtre, un static ou un edit (etc...) en conteneur activex. C'est tellement simple qu'on se demande pourquoi MSDN n'en a pas parlé. C'est encore plus simple qu'avec les MFC ou ATL ( vive les APIs).
Ca me fait toujours plaisir de partager mes petites trouvailles sur ce site. J'en ai encore plusieurs. Mais si ça risque de déranger, alors je chercherai où les mettre (Peut-être sur mon propre futur site que je créerai uniquement pour cela). Moi je préfère que ce soit sur cppfrance (que j'adore) mais on verra.
Voilà. Je pense que mon message est bien passé.
A bientôt.
BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16 -
C'est racpp qui fait sa mauvaise tete ?
Continue donc a publier sur CS, tout bon code est toujours le bienvenu.
vecchio56
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7 -
La page HTML et le FlexGrid ne marchent pas... Pourquoi tu les a mis alors?
ymca2003
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8 -
C'est à dire que ça marche sur WinME (déleloppé dessus où j'avais déjà des comportements différents entre la version Debug et Release que j'avais résolus. J'avais même des comportements différent avec une compil sous VC et DevCpp) puis j'ai fait des tests sur Win2000 et là je suis tombé sur le pb du FlexGrid (je vais tester sur XP ce WE).

En compilant en debug la page HTML s'affiche mais en release rien (du moins sur Win2000 SP4 avec IE6)...

Si il y a des gens pour tester les configs (Debug et Release) et qui rencontrent les même pb qu'ils n'hésitent pas à déposer leur observations.

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.