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 :

Empêcher une fenêtre WIN32 de se fermer.


Sujet :

Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 77
    Par défaut Empêcher une fenêtre WIN32 de se fermer.
    Salut,
    Je voudrais savoir s'il est possible d'empêcher une fenêtre de se fermer (ou de se detruire) lorsque l'on clique sur la croix de cette dernière.
    Merci.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 399
    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 399
    Par défaut
    Bien sûr.

    C'est ce qui se passe si tu tentes de fermer un programme avec des informations non-enregistrées...

    La croix ne fait qu'envoyer un message WM_SYSCOMMAND(SC_CLOSE) (sauf dans une boîte de dialogue, où il est converti en WM_COMMAND(IDCANCEL) avant de parvenir à la DialogProc)...
    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
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 77
    Par défaut
    Merci
    Et comment empêcher la fenêtre de se fermer ? Car j'ai eu beau à essayer des return au niveau de WndProc à la reception de ce message, la fenêtre se ferme toujours !

  4. #4
    Membre émérite
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Par défaut
    Salut, c'est «WM_CLOSE» que tu dois utiliser dans ton «switch».

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 399
    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 399
    Par défaut
    Citation Envoyé par F-fisher Voir le message
    Merci
    Et comment empêcher la fenêtre de se fermer ? Car j'ai eu beau à essayer des return au niveau de WndProc à la reception de ce message, la fenêtre se ferme toujours !
    As-tu bien mis à zéro les bits inférieurs avant de comparer à SC_CLOSE?

    Sinon, comme dit maxim_um, tu peux aussi arrêter WM_CLOSE à la place, ce qui est le niveau en-dessous. Mais je ne le recommande pas.
    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.

  6. #6
    Membre émérite
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Par défaut
    On ne connait pas l'étendue de ces capacités et la gestion de «WM_CLOSE» est ce qu’il a de plus facile à mettre en œuvre. N'oublions pas qu'il reste la possibilité de définir le style de la fenêtre avec «CS_NOCLOSE», ce qui bien entendu ne désactive pas «ALT-F4».

    En ce qui concerne «WM_SYSCOMMAND» il faut non seulement faire la capture et comme tu le précises faire un filtrage (& 0xFFF0) pour identifier «SC_CLOSE».

    Les résultats sont les mêmes, seul le niveau d'interception change.

  7. #7
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 77
    Par défaut
    Voila, avec CS_NOCLOSE ça marche nikel
    Merci pour votre aide.

  8. #8
    Membre émérite
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Mais je ne le recommande pas.
    Tu n'as pas motivé ton point de vue en fait.

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 399
    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 399
    Par défaut
    En fait, c'est surtout parce que j'aime garder des options sous la main. Si je veux bloquer seulement l'interface utilisateur, j'utilise WM_SYSCOMMAND, comme ça, un programme garde la possibilité de faire fermer la fenêtre en envoyant WM_CLOSE.

    Si on veut empêcher à tout prix la fenêtre d'être fermée de l'extérieur (sauf assassinat du processus), on intercepte WM_CLOSE.

    Mon problème en fait, c'est qu'intercepter WM_CLOSE supprime tout moyen de fermer la fenêtre depuis un autre thread du même processus. C'est pourquoi je préférais bloquer seulement la croix, et non pas le vrai message de fermeture.
    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.

  10. #10
    Membre émérite
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Par défaut
    Oui, ça se défend, mais dans ce cas autant désactiver le bouton de fermeture directement dans l'interface, au moins l'utilisateur en est averti.
    En plus dans «WM_CLOSE» rien ne t'interdit d'y définir tes propres conditions pour autoriser ou non la fermeture de l'application, que ce soit pour un thread particulier ou un utilisateur.

    Par contre, moi ce qui m'embête avec «WM_SYSCOMMAND», non seulement il constitue a lui seul de nombreux appels, mais en plus il englobe une quantité importante de paramètres de message, ce qui peut ce traduire par une certaine lourdeur lors de sa gestion, mais peut être qu'un profiler donnerait une vision un peu plus objective.

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

Discussions similaires

  1. empêcher une fenêtre de se minimiser
    Par J_apprenti dans le forum Langage
    Réponses: 2
    Dernier message: 24/12/2007, 13h21
  2. [VBA-EXCEL]--Empêcher une fenêtre de se fermer
    Par gantec dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/04/2007, 12h17
  3. [VB6] Empêcher une fenêtre de s'ouvrir plusieurs fois ?
    Par cotmar dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 05/04/2006, 15h20
  4. Empécher une fenètre MDI de se fermer
    Par vanitom dans le forum MFC
    Réponses: 6
    Dernier message: 28/11/2005, 10h21
  5. empêcher une fenêtre de perdre le focus (MDI)
    Par eponette dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/08/2005, 17h17

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