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.
Le code ci-dessus fonctionne correctement mais il ne peut s'appliquer qu'à la vue active.
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));
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?
Partager