Utiliser l'interface d'une dll dans une mdi[sans mfc][dev-c++][réponse forum]

Soyez le premier à donner votre avis sur cette source.

Vue 9 827 fois - Téléchargée 768 fois

Description

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 .

Source / Exemple :


voir zip

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 .

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

vecchio56
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7 -
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?)
Pamaury
Messages postés
341
Date d'inscription
jeudi 3 avril 2003
Statut
Membre
Dernière intervention
17 juin 2008
1 -
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 ?
vecchio56
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7 -
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
Pamaury
Messages postés
341
Date d'inscription
jeudi 3 avril 2003
Statut
Membre
Dernière intervention
17 juin 2008
1 -
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 .
cs_neria
Messages postés
320
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
16 février 2009
-
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

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.