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

MFC Discussion :

[MFC] Intercepter réouverture fenêtre qui est minimisée


Sujet :

MFC

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 103
    Par défaut [MFC] Intercepter réouverture fenêtre qui est minimisée
    Salut,

    je suis certain que ce que je veux faire est super basic mais là je bloque quand même : je veux pouvoir exécuter une action de redimensionnement d'une fenêtre minimisée juste après qu'elle soit réouverte...

    En gros, ma fenêtre est minimisée (iconisée)...je reclique sur le bouton de minimisation pour réafficher ma fenêtre à sa taille normale...et là, je veux redimensionner la fenêtre juste après ça (car j'ai besoin d'utiliser sa taille de rectangle, donc je ne peux pas faire mon traitement lorsqu'elle est minimisée).

    Alors, en parcourant le forum, j'ai trouvé diverses solutions pour intercepter le fait qu'on minimise une fenêtre, et j'ai déjà testé les suivantes en pensant pourvoir les adapter à mon problème :

    ON_WM_SIZE
    ON_WM_SYSCOMMAND
    ON_WM_ACTIVATE

    Aucune ne répond à mon besoin, donc j'en conclue que je dois utiliser autre chose....j'ai regardé toute la liste des évènements possibles sur une fenêtre, et j'ai rien vu qui pourrait le faire.

    Quelqu'un aurait une idée ?

    Merci d'avance !

    ++

  2. #2
    Membre Expert
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Par défaut
    tu interceptes le message WM_SHOWWINDOW

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 103
    Par défaut
    Ah oui, je l'avais oublié celui-là : déjà testé aussi !

    The WM_SHOWWINDOW message is not sent under the following circumstances:

    * When a top-level, overlapped window is created with the WS_MAXIMIZE or WS_MINIMIZE style.


    Et moi je maximise mon appli dès l'ouverture.....donc ça peut pas marcher.

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    normalement, c'est le message WM_SIZE

    fait voir ton code

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 103
    Par défaut
    le WM_SIZE, je l'ai testé un moment en y mettant des points d'arrêts et il se trouve qu'on passe pas dedans quand on reclique sur le bouton minimiser....bizarre, mais c'est comme ça.

    Le code, bah ça ne vous aidera en rien...par contre, j'ai oublié de préciser qu'il s'agit du modèle VUE/DOCUMENT et que là il s'agit de la minimisation de la fenêtre de visualisation principale du document : CVTrackView

  6. #6
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    il te reste à tester les messages WM_WINDOWPOSCHANGED, WM_WINDOWPOSCHANGING

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 38
    Par défaut
    Citation Envoyé par pataguillon
    Ah oui, je l'avais oublié celui-là : déjà testé aussi !

    The WM_SHOWWINDOW message is not sent under the following circumstances:

    * When a top-level, overlapped window is created with the WS_MAXIMIZE or WS_MINIMIZE style.


    Et moi je maximise mon appli dès l'ouverture.....donc ça peut pas marcher.
    Bonjour,

    Donc pour que ta fenêtre soit maximisée dès son ouverture, tu as alors écrit dans la méthode PreCreateWindow

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    BOOL CMaFenetre::PreCreateWindow(CREATESTRUCT& cs) 
    {
    	cs |= WS_MAXIMIZE
    	return CDialog::PreCreateWindow(cs);
    }
    Bon, si tu enlèves cette maximalisation à l'ouverture et que tu ouvres ta fenêtre avec sa taille d'origine et que par la suite tu l'as maximise, alors le message WM_SHOWWINDOW devrait fonctionner.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ...
    CMaFenetre Wnd;
     
    Wnd.Create(....);
    Wnd.ShowWindow(SW_SHOWMAXIMIZED);
    ...

  8. #8
    Membre émérite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par défaut
    Fais correspondre tes gestionnaires de message WM_XXX windows non à la vue mais à la fenêtre FRAME de ton applcation( cas SDI) où à la fenêtre FRAME d'une fenêtre child.
    Essaie un peu avec WM_ACTIVE

  9. #9
    Membre émérite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par défaut
    Au faite j'ai oublié, c'est une fonction virtuelle de la classe de base CFrameWnd dont tu as besoin et qu'il faut surchager.

    Utilise GetWindowPlacement() et son compagnon SetWindowPlacement()

    La paire de fonction get-set te permet d'obtenir le rectangle de ta fenêtre et d'autres informations pour savoir si elle est iconisée ou minimisé ou maximisée ou normale.
    Surcharge la fonction virtuelle ActiveFrame() de ta frame.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 103
    Par défaut
    C'est bon, j'ai résolu mon problème grâce à toutes vos réponses.

    Un grand MERCI à tous !

    ++

    PS : pour ceux que ça intéresse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    WINDOWPLACEMENT p;
    cv->GetWindowPlacement(&p);
    if(cv->GetParentFrame()->IsIconic()){
        p.showCmd = SW_SHOWNOACTIVATE;
        cv->GetParentFrame()->SetWindowPlacement(&p);
    }

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 28/07/2015, 11h51
  2. Réponses: 13
    Dernier message: 19/06/2015, 15h47
  3. Réponses: 4
    Dernier message: 28/02/2010, 11h08
  4. [MFC] Ces fenêtres qui ne s'affichent pas..
    Par Davide dans le forum MFC
    Réponses: 3
    Dernier message: 19/11/2003, 11h30
  5. Une table qui existe mais qui est inconnu! ?
    Par Nino dans le forum InterBase
    Réponses: 6
    Dernier message: 13/06/2003, 11h47

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