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 :

Sauvegarde de la position de toutes les vues dans une application MDI


Sujet :

MFC

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 78
    Points : 49
    Points
    49
    Par défaut Sauvegarde de la position de toutes les vues dans une application MDI
    Bonjour,

    Je souhaite sauvegarder les coordonnées de toutes les vues d'une application MDI dans le but de repositionner les fenêtres au prochain lancement.

    Le problème ne concerne pas la façon de faire pour enregistrer/récupérer.

    En effet il suffit d'utiliser GetWindowPlacement+WriteProfileBinary et GetProfileBinary+SetWindowPlacement.

    Le souci concerne donc l'initilisation du pointeur sur la classe d'où sera invoqué GetWindowPlacement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CMDIChildWnd* Child;
    BOOL maximized;
     
    Child=((CMDIFrameWnd *)theApp.m_pMainWnd)->MDIGetActive(&maximized);
    Child->GetWindowPlacement(&wp);
    theApp.WriteProfileBinary("MainFrame", "Vue1", (LPBYTE)&wp, sizeof(wp));
    Le code ci-dessus fonctionne correctement mais il ne peut s'appliquer qu'à la vue active.

    Il faut donc là encore sans doute parcourir l'ensemble des vues.

    Le pb c'est que en utilisant par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    bool CUtili::FindAllInstanceView(CRuntimeClass *pViewClass,CView** pViewTabPtr)
    {
        CWinApp* pApp = AfxGetApp();        
        // parcourir tous les templates
        CDocTemplate* pTemplate;
        POSITION pos = pApp->GetFirstDocTemplatePosition();
        while (pos != NULL)
        {
            pTemplate = pApp->GetNextDocTemplate(pos);
            ASSERT(pTemplate);
     
            // tous les documents du template.
            POSITION pos2 = pTemplate->GetFirstDocPosition();
            while (pos2)
            {
                CDocument* pDoc = pTemplate->GetNextDoc(pos2);
                ASSERT(pDoc);
     
                // toutes les vues du document
                POSITION pos3 = pDoc->GetFirstViewPosition();
                while (pos3 != NULL)
                {
                    CView* pView = pDoc->GetNextView(pos3);
                    ASSERT(pView);
                    if (::IsWindow(pView->GetSafeHwnd()))
                    {
                        if(pView->IsKindOf(pViewClass))
                        {
    	           *pViewTabPtr=pView;
                            pViewTabPtr++;
                        }                    
                    }
                }
            }
        }
        return true;
    }

    on obtient les pointeurs sur des Cview et GetWindowPlacement va retourner les coordonnées du contrôle associées à la fenêtre mais relativement à cette fenêtre=> ces coordonnées sont toujours les mêmes.

    Faut-il rendre actives une à une toutes les vues avant d'appeler GetWindowPlacement?

  2. #2
    Membre éclairé
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Points : 749
    Points
    749
    Par défaut
    Bonjour,

    Il existe une autre méthode, décrite dans la FAQ. Je ne la connais pas plus que cela, mais elle pourrait peut-être résoudre tes problèmes...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 78
    Points : 49
    Points
    49
    Par défaut
    Je viens de comprendre mon erreur.

    Après obtention du pointeur sur la vue, il faut faire un appel à la méthode GetParent afin d'obtenir un pointeur sur le parent de la vue et ce n'est qu'à partir de ce pointeur "parent" que l'on peut obtenir les coordonnées de la fenêtre.

Discussions similaires

  1. Lister toutes les forms d'une application
    Par Aspic dans le forum Windows Forms
    Réponses: 15
    Dernier message: 01/12/2007, 21h22
  2. Minimiser toutes les fenetres dans une MDI
    Par arnobase dans le forum Forms
    Réponses: 46
    Dernier message: 04/09/2007, 10h37
  3. Suppression de toutes les tables dans une base de données
    Par GDMINFO dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/04/2007, 08h24
  4. [RegEx] Regex : récupérer toutes les occurences dans une chaîne
    Par Poulpynette dans le forum Langage
    Réponses: 1
    Dernier message: 10/10/2006, 10h14
  5. Réponses: 1
    Dernier message: 15/05/2006, 15h49

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