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:
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:
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?