Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

WIN32ACTIVEX : CONTENEUR DE CONTRÔLES ACTIVEX EN WIN32 (API COM OLE)


Information sur la source

Description

Cliquez pour voir la capture en taille normale
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.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de BruNews le 11/01/2005 20:38:00 administrateur CS

Encore un tres bon exemple fourni par ymca2003.
Cette source devrait egalement repondre a de multiples questions du forum sur ce sujet.

signaler à un administrateur
Commentaire de racpp le 12/01/2005 23:55:32 administrateur CS

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.

signaler à un administrateur
Commentaire de BruNews le 13/01/2005 00:20:29 administrateur CS

C'est racpp qui fait sa mauvaise tete ?
Continue donc a publier sur CS, tout bon code est toujours le bienvenu.

signaler à un administrateur
Commentaire de vecchio56 le 13/01/2005 16:28:07 administrateur CS

La page HTML et le FlexGrid ne marchent pas... Pourquoi tu les a mis alors?

signaler à un administrateur
Commentaire de ymca2003 le 13/01/2005 16:40:40

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.

signaler à un administrateur
Commentaire de vecchio56 le 13/01/2005 16:47:27 administrateur CS

Bah moi FlexGrid marche pas du tout, même après réduction

signaler à un administrateur
Commentaire de Urgo le 19/01/2005 22:39:04

Sur XP Pro:
- Release : même problème que toi (ymca2003), page HTML s'affiche pas et Flexgrid que si on mininise...
- Debug : Flexgrid que si on mininise... mais HTML fonctionne...
(aucune erreurs signalées lors des deux compilation sous VS.NET 2003)

J'ai pas le temps de chercher plus longtemps mais si tu veux qu'on fasse quelques tests, pourquoi pas ;)

signaler à un administrateur
Commentaire de ymca2003 le 20/01/2005 09:17:58

Chez moi sur XP le flexgrid ne marche pas et pour cause, il n'y est pas installé ! On peut vraiment pas supposé q'un activeX sera sur tous les sytèmes...

Pour le bug du HTML j'avais essayé de mettre un timer pour différer le chargement de la page (pour attendre que toutes les dlls soient chargées) mais ça n'avais pas marché. Je me delande quand même quelles sont les différences entre la version Debug et Release pour donner ce truc bizarre car je pense pas que ça vienne du code. il doit y avoir une dll qui ai chargée plus tot autre quelque chose du genre.

même en ne chargeant que cet ActiveX ça donne le même résultat.

signaler à un administrateur
Commentaire de racpp le 29/01/2005 04:59:16 administrateur CS

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

signaler à un administrateur
Commentaire de zed38 le 23/06/2005 18:35:12

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.

signaler à un administrateur
Commentaire de Oeil_de_taupe le 10/07/2005 19:59:44

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?

signaler à un administrateur
Commentaire de Miquel75 le 11/04/2008 19:52:13

Code totalement inutile, vu que l'ActiveX Embedding est natif dans Windows...

signaler à un administrateur
Commentaire de piou_31 le 22/04/2008 17:56:06

bonjour,

Qu'est-ce que tu appelle l'activeX Embedding natif sous windows?

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,296 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.