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 :

mettre une variable comme paramètre à destroywindow


Sujet :

Windows

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 95
    Par défaut mettre une variable comme paramètre à destroywindow
    bonjour,

    je suis entrain de développer une application, et j'ai un problème.

    j'ai trouver, comment renommez une fenetre, réduire, mais là je beug sur le fermé.

    pour cela je je dois utiliser la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    BOOL DestroyWindow(      
        HWND hWnd
    );
    mais là, c'est le problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if( o1 == 4) /* fermé fenetre */
                {
                    if(DestroyWindow(st) == 0)
                    {
                        MessageBox(hwnd,"Impossible" ,"Résultat", MB_OK);
                    }
                    else
                    {
                    MessageBox(hwnd,"réussi" ,"Résultat", MB_OK);
                    }
                }
    si la valeur de retour == 0, c'est sans succès, sinon c'est réussi.
    mais j'ai toujours 0.

    Et la variable st, c'est un char, qui a enregistrer le handle de la fenêtre.

    mais là je vois pas comment mettre une variable à destroywindow ou sendmessage avec wm_destroy.


    merci

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    DestroyWindow prend un HWND en paramètre, pas une chaîne de caractères.
    ...Mais tu peux convertir avec des fonctions comme strtoul()...
    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.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 95
    Par défaut
    j'ai essayer ça mais sans succès:

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    if( o1 == 4) /* fermé fenetre */
                {
                     MessageBox(hwnd,"pré OK" ,"Résultat", MB_OK);
                     int ol=0;
                     ol = strtoul(st, NULL, 0);
     
                    if(DestroyWindow(ol) == 0)
                    {
                        MessageBox(hwnd,"Impossible" ,"Résultat", MB_OK);
                    }
                    else
                    {
                    MessageBox(hwnd,"réussi" ,"Résultat", MB_OK);
                    }
                }

    j'ai toujours, la msgbox "pré OK" puis "Impossible".

    je vois pas pourquoi c'est sans succès.


    merci

  4. #4
    Expert confirmé
    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 : 39
    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
    Par défaut
    Citation Envoyé par kynri
    Et la variable st, c'est un char, qui a enregistré le handle de la fenêtre.
    Je pense qu'un HWND est plus adéquat qu'un char pour stocker le handle d'une fenêtre, sinon explique bien.

    Citation Envoyé par kynri
    j'ai trouvé comment renommer ou réduire une fenêtre mais là je bug pour la fermer.
    Quelle fenêtre? DestroyWindow ne peut pas détruire une fenêtre créée par un autre thread.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 95
    Par défaut
    Code citation : Sélectionner tout - Visualiser dans une fenêtre à part
    Et la variable st, c'est un char, qui a enregistré le handle de la fenêtre.
    Code citation : Sélectionner tout - Visualiser dans une fenêtre à part
    Je pense qu'un HWND est plus adéquat qu'un char pour stocker le handle d'une fenêtre, sinon explique bien.

    non, c'est parce que j'avais enregistré le nom de la fenêtre grâce à une boite de dialogue, donc le résultat est sous char, et il me faut la convertir en HWND.

    Code citation : Sélectionner tout - Visualiser dans une fenêtre à part
    j'ai trouvé comment renommer ou réduire une fenêtre mais là je bug pour la fermer.
    Code citation : Sélectionner tout - Visualiser dans une fenêtre à part
    Quelle fenêtre? DestroyWindow ne peut pas détruire une fenêtre créée par un autre thread.

    une fenêtre que l'user aura choisi.
    Ah c'est bête ça, s'il ne peut pas détruire une fenêtre à un thread qu'il ne lui appartient pas.


    Et comment je peut faire pour fermer la fenêtre dans une autre application ??
    puisque destroywindow ne le fais pas :s est ce que sendmessage le fais avec wm_destroy ?

    ni y a t il pas une fonction permettant de fermé toutes les fenêtres qu'on veut ?

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Tu peux essayer d'envoyer ou de poster WM_CLOSE à la fenêtre choisie.
    Surtout pas WM_DESTROY, par contre...
    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.

  7. #7
    Expert confirmé
    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 : 39
    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
    Par défaut
    Citation Envoyé par kynri
    est-ce que SendMessage le fait avec WM_DESTROY ?
    Pour détruire une fenêtre il faut appeler la fonction DestroyWindow. Le message WM_DESTROY n'est qu'une notification envoyée par Windows à une procédure de fenêtre pour signaler qu'une fenêtre est sur le point d'être détruite. Envoyer ce message a une fenêtre ne va pas détruire la fenêtre, c'est juste "mentir" à l'application que la fenêtre a été détruite. Si la fenêtre est la fenêtre principale de l'application, on traite généralement ce message en terminant l'application (PostQuitMessage) ... et la fenêtre va se fermer, c'est-à-dire devenir invisible, mais elle n'a pas été détruite.

    Le problème avec WM_CLOSE c'est que c'est pas assuré que la fenêtre va être détruite parce que cela dépend de la manière dont ce message est traité dans la WNDPROC ...

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    En effet, mais il n'y a aucun moyen de forcer "honnêtement" la destruction d'une fenêtre.
    Si l'application laisse le comportement par défaut pour WM_CLOSE, DefWindowProc() appellera DestroyWindow().
    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.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 95
    Par défaut
    donc qu'est ce que je dois faire si je veut fermer une fenêtre qui a le nom X (soit le nom dis par l'user dans la boite de dialogue)

    - fermer juste la fenêtre.
    - fermer avec le processus qui va avec.

    une réponse svp parce que j'ai fais:
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    if( o1 == 4) /* fermé fenetre */
                {
                     MessageBox(hwnd,"pré OK" ,"Résultat", MB_OK);
                     int ol=0;
                     ol = strtoul(st, NULL, 0);
     
                    if(SendMessage(ol, WM_DESTROY, 0, 0) == 0)
                    {
                        MessageBox(hwnd,"Impossible" ,"Résultat", MB_OK);
                    }
                    else
                    {
                    MessageBox(hwnd,"réussi" ,"Résultat", MB_OK);
                    }
                }
    toujours le même résultat, mesgbox "pré OK" puis "impossible".

    ainsi qu'avec ça:
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    if( o1 == 4) /* fermé fenetre */
                {
                     MessageBox(hwnd,"pré OK" ,"Résultat", MB_OK);
                     int ol=0;
                     ol = strtoul(st, NULL, 0);
     
                    if(DefWindowProc(ol, uMsg, 0, 0) == 0)
                    {
                        MessageBox(hwnd,"Impossible" ,"Résultat", MB_OK);
                    }
                    else
                    {
                    MessageBox(hwnd,"réussi" ,"Résultat", MB_OK);
                    }
                }

    donc ni wm_destroy, ni wm_close (send message), ni destroywindow, ni defwindowproc fonctionne.

    Et PostQuitMessage(0) ne fonctionneras pas puisse que c'est un void donc ne peut pas prendre en charge le hwnd.


    vouyez vous un moyen de fermer une fenêtre tout court

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Normalement, SendMessage(WM_CLOSE) sur la fenêtre doit marcher (ou au moins, déclencher quelque chose).
    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.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 95
    Par défaut
    Et qu'est ce que je fais maintenant ?

    j'ai fais:
    ça me fais impossible pour toutes les fenêtres sauf la fenêtre de l'application en cours.

    donc voilà comment faire

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 95
    Par défaut
    alors n'y a t il pas une réponse à ma question.

    Fermer une fenêtre d'un autre thread ?

    y a t il pas une solution...

Discussions similaires

  1. Mettre une variable comme argument dans une fonction
    Par djun1 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 04/09/2012, 10h44
  2. [HTML] Mettre une variable comme adresse d'une Iframe et faire changer cette variable
    Par thefdm dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 29/01/2008, 18h54
  3. utiliser une variable comme paramètre de l'objet range
    Par stdebordeau dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/10/2007, 14h56
  4. Passage d'une variable comme paramètre d'une fonction
    Par lowman dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/10/2007, 15h12
  5. [XSLT]Mettre une variable comme attribut
    Par Oberown dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 29/09/2006, 10h47

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