IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Boîtes de Dialogues


Sujet :

Windows

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 214
    Points : 99
    Points
    99
    Par défaut Boîtes de Dialogues
    Pour mon info personnelle, j’aimerais savoir quels paramètres doit-on utiliser dans CreateWindow ou CreateWindowEx pour créer une boîte de dialogue modale ou non modale (peu importe) sans passer par CreateDialog ni DialogBox. Pour poser la question autrement j’aimerais savoir ce que font CreateDialog et DialogBox pour créer ces boîtes car en fait j’ai essayé et pour l’instant je n’arrive pas à un fonctionnement équivalent. Je m’explique quand je regarde le comportement par exemple de la boîte non modale « Rechercher » que l’on obtient par Edition>Rechercher sous Excel, il y a 3 comportements de cette boîte que je n’arrive pas à obtenir en même temps (sauf si je passe par CreateDialog), ces 3 comportements sont :
    1.- la boîte rechercher reste au-dessus de la page Excel
    2.- la boîte rechercher peut être déplacée en dehors de la page Excel (donc en dehors de la fenêtre qui l’appelle)
    3.- la boîte rechercher est recouverte par les autres processus (si je lance Word, par exemple, la page de Word va recouvrir la boîte rechercher de Excel)
    Dans ma fenêtre appelante j’ai fait plusieurs essais d’utilisation du paramètre WS_CHILD dans le CreateWindowEx ou CreateWindow d’appel de ma fenêtre dialogue, mais à ce moment là les coordonnées de la fenêtre dialogue sont relatives à la fenêtre appelante, c'est-à-dire que ça ne répond pas au point 2 ci-dessus.
    J’ai fait plusieurs essais du paramètre WS_EX_TOPMOST sans le paramètre WS_CHILD ce qui répond aux points 1 et 2, mais ne répond pas au point 3 : si je lance un autre programme qui n’a rien à voir avec la fenêtre appelante, il ne recouvre pas ma fenêtre dialogue qui reste au-dessus de tout.
    Quelqu’un a-t-il déjà essayé de simuler un CreateDialog ou un DialogBox avec la fonction CreateWindowEx ? Merci.

  2. #2
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    C'est expliqué ici. En gros une boîte de dialogue n'est ni plus ni moins qu'une fenêtre de la classe "#32770". La plupart du temps, sa procédure de fenêtre se contente de passer chaque message à la DlgProc de l'utilisateur, mais traite néanmoins entre autres les messages non traités par cette dernière. La WndProc envoie aussi parfois à la DlgProc certains messages spéciaux comme WM_INITDIALOG par exemple.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 214
    Points : 99
    Points
    99
    Par défaut Boîte de dialogues
    Merci, mais je suis un peu gêné de faire répondre toujours la même personne, désolé. Encore une fois si j'ai bien compris c'est normal que je ne sois pas arrivé à simuler une boîte de dialogue en n'utilisant que les paramètres de CreateWindow et CreateWindowEx fournis par l'API, la classe 32770 serait donc spécifique ?

  4. #4
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Au contraire, maintenant que tu connais le nom de classe d'une boîte de dialogue, tu devrais pouvoir en créer une en utilisant directement CreateWindow. Le problème c'est qu'après il faut aussi spécifier l'adresse de la DlgProc. Cela se fait en écrivant dans un champ nommé DWLP_DLGPROC (Dialog Window Long Pointer > DlgProc) de la fenêtre. Voici donc un exemple de création de boîte de dialogue avec CreateWindow :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    HWND hDlg = CreateWindowEx(exstyle, TEXT("#32770"), TEXT("MyDialog"), style, x, y, width, height, hWnd, NULL, hInstance, NULL);
    SetWindowLongPtr(hDlg, DWLP_DLGPROC, (LONG _PTR)DlgProc);

    Merci, mais je suis un peu gêné de faire répondre toujours la même personne, désolé
    Bin si ça te dérange tant que ça c'est la dernière fois que je te réponds. Lol.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 214
    Points : 99
    Points
    99
    Par défaut Boîtes de dialogue
    Merci encore, je ne crois pas que j'aurais trouvé tout seul...

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Je crois qu'il y a toute une série là-dessus dans les archives du blog de Raymond Chen.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MFC] afficher une boîte de dialogue
    Par bigboomshakala dans le forum MFC
    Réponses: 13
    Dernier message: 10/05/2004, 14h22
  2. [Kylix] Imprimer le contenu d'une boîte de dialogue
    Par cmp-france dans le forum EDI
    Réponses: 13
    Dernier message: 18/10/2003, 20h31
  3. Réponses: 3
    Dernier message: 29/08/2003, 10h57
  4. [MFC] Boîte de dialogue chronométrée
    Par mdriesbach dans le forum MFC
    Réponses: 5
    Dernier message: 18/02/2003, 12h40
  5. Dll et boîte de dialogue MFC
    Par paulj dans le forum MFC
    Réponses: 3
    Dernier message: 19/12/2002, 09h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo