begin process at 2008 08 08 21:39:19
1 223 607 membres
365 nouveaux aujourd'hui
14 230 membres club

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é: 5 855 / 577

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

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 .
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

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
  • 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

Pub



Appels d'offres

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

Boutique

Boutique de goodies CodeS-SourceS