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 !

UTILISER L'INTERFACE D'UNE DLL DANS UNE MDI[SANS MFC][DEV-C++][RÉPONSE FORUM]


Information sur la source

Catégorie :Astuces Classé sous : mdi, interface, dll, dialog, windows Niveau : Expert Date de création : 09/06/2005 Date de mise à jour : 01/12/2005 21:12:29 Vu / téléchargé: 6 535 / 614

Note :
8,5 / 10 - par 2 personnes
8,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (20)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Voilà ce code permet d'utiliser une boite de dialogue sauvegardée sous forme de ressource dans n'importe quel .dll ou .exe dans une fenêtre MDI . Ce n'est pas si facile que çà car je rappel qu'une boite de dialogue est une fenêtre popup et faire la transformation nécessaire m'a pris 2 jours a être trouvée donc s'il vous plait éviter les truc du genre "c'est bidon j'aurais fais çà moi même" et lsiait le code pour vous en rendre compte .
 

Conclusion

Voilà le fonctionnement(en gros)
->mon programme(pour ne pas se limiter à la réponse du forum) affiche une Frame avec un menu . Le choix Fichier->Ouvrir permet de sélectionenr le .exe ou .dll a scanner . Toutes les boites de dialogues trouvées son listées dans une TreeView d'une fenêtre MDI dans cet ordre là:
+Root
+Dialogues
  +Nom(id ou string)
   +Lang(en anglais: Windows oblige)

en double cliquant sur le language de la boite de dialogue voulue(i.e: +Lang(en anglais: Windows oblige)" la boite de dialogue est chargée et mise dans une autre fenêtre MDI(elle prend le nom de la boite de dialogue mais pas l'icône) .

NOTE: dans le menu fenêtre se trouve un choix "Parcourir": chez moi il affiche la liste des fenêtre MDI mais je l'ai trouvée par pur hasard te je voudrais juste savoir s'il marche chez vous ?! Les autre choix sont eux plus standard .

Quelques détails:
A cause de la méthode utilisée pour faire une telle transformation, il se peut que certains styles de la fenêtre ne soit pas conservés car il sont incompatible avec ce type de transformatiosn donc ne rallez pas pour çà . De plus si la boite de dialogues possède une icône, celle-ci n'est pas affichée dans la fenêtre MDI(mais ce n'est pas non plus très dur à changer) .

Détail de fonctionnement:
J'utilise une méthode que je pensait jusque là impossible à savoir que la boite de dialogue devient(après quelques changement de style très précis) un fils d'une fenêtre MDI que l'on met à la bonne taille . La boite de dialogue réagit normalement et conserve sont DialogProc(évidemment il faut l'implémenter) sauf pour les messages de fenêtre(i.e: WM_SIZE, WM_CLOSE, WM_PAINT...) puisque c'est la fenêtre MDI qui les reçoit . Enfin on maximise la boite de dialogue pour que celle-ci prenne exactement la taille de la fenêtre MDI(si on se contente de la mettre à la bonne taille, même exactement çà marche pas(ou plutôt mal) ) .

NOTE: j'ai mis dans mon programme quelques boite de dialogue(et les icônes) en ressource pour l'exemple:
CELLES-CI NE SONT PAS DE MOI, elle provienne de source sur ce (magnifique) site qu'est cppfrance car non seulement je n'est pas d'éditeur de ressources et en plus j'ai pas que çà à faire) .

Voilà j'ai fini mon exposé, si ce programme ne marche sur votre ordi dites exactement de qui ne va pas . Je l'ai testé uniquement sur mon Windows XP Familly .
 

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

Historique

10 juin 2005 23:51:58 :
Mise à jour du code source: celui-ci est désormais commenté(en anglais mais tout le monde sait lire l'anglais non......non bah tant pis !) et la source a été mise en niveau expert .
11 juin 2005 13:40:43 :
Bon dans ma grande gentillesse j'ai commenté la source en anglais ET français et corrigé quelques commentaires foireux(fautes de frappes)
01 décembre 2005 21:12:29 :
ajout des mots-clés

Commentaires et avis

signaler à un administrateur
Commentaire de vecchio56 le 09/06/2005 17:48:47 administrateur CS

une boite de dialogue est une fenêtre popup
Je ne crois pas, une boite de dialog peut aussi avoir le style WS_CHILD au lieu de WS_POPUP, c'est d'ailleurs la seule chose qui change (quelle est la transfomation dont tu parles?)

signaler à un administrateur
Commentaire de Pamaury le 09/06/2005 18:08:12

oui d'accord une boite de dialogue peut ne pas être popup(même si dans les 95% des cas çà l'es) mais ici c'est justement pour mettre uen boite de dialogue popup dans un fenêtre MDI . D'ailleurs rajouter WS_CHILD et enlever WS_POPUP ne suffit pas il y a d'autres styles a enlever et a rajouter . La fonction pour le faire n'est pas très longue mais par exemple si on se contente de faire ce que tu dis(+ajout/rejet de style) tu vas obtenir une fenêtre(pas à la bonne taille) avec un méchant espace entre le bord et les contrôles qui n'est pas redessiné(essaye tu as juste a enlever Showwindow(hwnd,SW_SHOWMAXIMIZED) . Et puis bien sûr il faut remettre le nom de la fenêtre ainsi que les options minimiser, maximiser, changer la taille .

au fait dernière précisions: ce programme serait 100x plus facile si justement il ne fallait pas le mettre dans une fenêtre MDI(puisque on ne l'a crée pas avec CreateWindowEx) ou alors donne moi la solution miracle ?

signaler à un administrateur
Commentaire de vecchio56 le 09/06/2005 19:36:34 administrateur CS

J'ai compilé sous Visual studio, il y a bien le menu parcourir
Par contre un petit problème d'affichage (sans doute du au fait que je n'active pas les styles XP):
http://vecchio56.free.fr/MDI.JPG

signaler à un administrateur
Commentaire de Pamaury le 09/06/2005 20:09:09

c'(est ce que je craignait . Je me suis battu pourtant pour que çà le fasse plus mais apparemment çà suffit pas :) Je pense que maximiser le dialogue dans la fenêtre MDI l'éviterait mais je voit pas comment faire . Cela vient du fait qu'une partie de la fnêtre dialogue n'est pas rafraichit mais je ne sais pas pourquoi . si quelqu'un a une idée ? En tout cas sur mon ordi çà le fait plus(avant le ShowWindow(hwnd,SW_SHOWMAXIMIZED) çà le faisait) . Essayer avec les thèmes XP pour voir .

signaler à un administrateur
Commentaire de neria le 09/06/2005 21:28:57

Salut !

   il y a du niveau dans les sources proposées (enfin !). Dailleurs je trouve que initié est un peu fait vu la complexité du code (manque de commentaires au passage). Enfin on en apprend un peu plus sur la prog windows !!! Continue comme ça.

@+ Neria

signaler à un administrateur
Commentaire de Pamaury le 09/06/2005 21:43:49

merci j'ai hésité pour le niveau mais n'y a en réalité que une fonction assez dure je trouve mais d'un côté je prog très souvent avec windows donc peut-être que je me rend pas compte . sinon j'essayerais de commenter plus demain(après le BAC de fr :) )

signaler à un administrateur
Commentaire de Taranael le 09/06/2005 21:44:30

Hey Neria c'est pas ton coin ici retournes sur VBFrance :p
Sinon ouai bonne source bien que manque de commentaire comme le dit le p'tit gars au dessus de moi ! On est un peu changé du morpion en console Win32 et de la gestion d'étudiants :p

signaler à un administrateur
Commentaire de Pamaury le 09/06/2005 22:06:35

lol c'est sûr(en plus je trovue que des morprion il y en a trop :)) . Comme je l'ai dit plus haut demain je recoommenterais la source(c'est vrai que à part la fonction supra importante LaunchDialog) il n'y a aucun commentaire et si on connais pas la programmation MDI sous windows on pige rien .

signaler à un administrateur
Commentaire de Joky le 10/06/2005 21:16:50

Moi il veut déjà pas le compiler avec DevC++ 4.9.9.0
Soi disant que IS_INTRESOURCE( )
n'existe pas, fin bref, en plus il me supprime le exe, ça me lourde ça lol
Mais sinon c'est le même genre que ResHack ???

signaler à un administrateur
Commentaire de vecchio56 le 10/06/2005 21:17:57 administrateur CS

rien a voir

signaler à un administrateur
Commentaire de Joky le 10/06/2005 21:20:22

Rien à voir ???
Euh, j'attend le prog pour voir lol... J'peux trop rien dire la :p

signaler à un administrateur
Commentaire de BruNews le 10/06/2005 21:27:45 administrateur CS

#define IS_INTRESOURCE(_r) (((ULONG_PTR)(_r) >> 16) == 0)

signaler à un administrateur
Commentaire de Joky le 10/06/2005 21:32:21

Mon dieu qu'il est fort lol,
C'est de tête que tu fais tout ça ???

Donc j'ai pu tester le prog, et en effet c'est pas comme ResHack,
Il ne donne pas le code des dialogs :p
Mais c'est déja très bien :o
Mainant jvé tenter de lire le code
Non Vecchio ne me dit pas que je n'ai aucune chance !!!

signaler à un administrateur
Commentaire de Pamaury le 10/06/2005 23:14:06

#define IS_INTRESOURCE(_r) (((ULONG_PTR)(_r) >> 16) == 0)
c'est bizarre qu'il ne soit pas défini avec Dev-Cpp: je l'ai programmer avec et il est parfaitement défini puisque'il appartient à l'API Windows normalement . Enfin c'est pas bien grave . Sinon pour le code des dialogues, c'est pas trop dur à générer à partir des ressources mais c'est un peu chiant lol .

signaler à un administrateur
Commentaire de Joky le 11/06/2005 10:56:49

Et pk du commentaire en anglais ???
J'pige pas trop l'intérêt lol

signaler à un administrateur
Commentaire de Pamaury le 11/06/2005 12:58:39

parce que je commente toujours en anglais mais si çà te gène je réécrirai en français en dessous ! Je ferais çà dans l'aprem .

signaler à un administrateur
Commentaire de Joky le 11/06/2005 13:16:02

Lol non moi j'comprend l'anglais c'est juste que le Francais c'est quand même notre langue lol

signaler à un administrateur
Commentaire de NeoUmbrella le 02/05/2006 17:15:50

Très interessant, merci.

signaler à un administrateur
Commentaire de samiramiss le 01/04/2008 21:34:58 7/10

avec MFC le projet devient plus interessant, en tous les cas l'essai est tres bien

signaler à un administrateur
Commentaire de BruNews le 01/04/2008 21:44:35 administrateur CS

Faut expliquer ce que gagnerait ce projet à cacher les appels API derrière une dll MFC.
Selon moi rien du tout.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

utiliser l'interface d'une dll dans une MDI [ par julienbad ] Bonjour à tous! j'aurais voulu savoir si quelqu'un savait comment utiliser une dll possèdant une interface graphique (CDialog) pour l'affich API Windows - Problème Dialog [ par banane_rose ] salut, dans mon template de ma dialog quand je rajoute la ligne pour les styles STYLE DS_MODALFRAME | WS_POPUP ça me met [Res interface pour modeleur 3d [ par vladisback ] bonjour, j'aimerai me lancer dans la creation d'un logiciel de modelisation 3D, qui soit portable (au moins linux et windows). j'ai l'habitude de fair DLL : interface IUnknown en C [ par Mastersam ] Bonjour, je créé actuellement en driver ASIO sous forme de DLL, j'ai eu un exemple général de création d'un driver dans la SDK ASIO 2.2, mais tout est Détourner la copie de windows par un hook [ par alphaone ] Bonjour, je sais qu'il est possible de détourner la copie de windows pour copier avec sont logiciel et non pas avec la copie de windows, mais je suis Interface Excel + Dll C++ [ par GRACCAH ] Bonjour à tous, J'ai programmé un outil, organisé autour d'une interface Excel faisant appel à une dll (release) developpée en C++ dans laquelle se tr Dll sous Linux et Windows [ par alexatique ] Bonjour,Voilà, j'arrive à réaliser des dlls sous windows à l'aide de visual studio.J'arrive également à faire un programme qui appelle cette dll.Mais Problème de débogage avec visual C++ 2008 [ par wallie0703 ] Bonjour, J'ai passé je ne sais combien d'heures sur ce problème, donc si quelqu'un peut m'aider, ça serait très gentil ^^Voilà mon problème Quand je c windows 98 et le multithread [ par bbear ] alors voilà mon probleme : j'utilise vc6, et pour utiliser le player Ahx, il faut compiler avec "code generation" sur Multithread.J'ai utilisé le mult Injection de dll sous windows [ par alphaone ] Bonjour, j'aimerai créer une dll pour injecter windows, pour utiliser mon copieur par default, à as default injecter une dll existante (celle du logic


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 : 1,014 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é.