voila ma méthode :

j'ai dans une fenêtre une déclaration d'onglet (des dialog-PropertyPage child sans bord, etc)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
CTab_1 tab_onglet1;
CTab_2 tab_onglet2;
j'ai également la déclaration du PropertySheet qui les englobe :

CSheet est une classe dérivant de PropertySheet, à laquelle je n'ai pas touché, si ce n'est un rajout de "Focus" sur le onpaint

mais passons

un PictureControle siege sur le dialog pour aider au positionnement visuel du Property : IDC_PLACEHOLDER

Arrive le moment d'instanciation du propertysheet

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
 
// on récupère le pointeur sur la picture
CWnd* tab_place = GetDlgItem(IDC_PLACEHOLDER); 
 
// on créé le sheet
tab = new CSheet("",tab_place,0);
 
// on lui ajoute les 2 onglets
tab->AddPage(&tab_onglet1);
tab->AddPage(&tab_onglet2);
 
// et on créé l'instance
if (!tab->Create(tab_place, WS_CHILD | WS_VISIBLE, 0)) 
{ 
	delete tab; 
	tab = NULL; 
	return; 
}
 
// positionnement physique dépendant de la position de la picture
CRect r;
tab_place->GetWindowRect(r);
tab->SetWindowPos(NULL, 0, 0, r.Width(), r.Height(), SWP_NOZORDER | SWP_NOACTIVATE);
Cependant le Create génère systématiquement une exception (violation d'accès)...


j'ai fait quelque chose de mal ?


je place cette init dans un paint (avec un booléen pour ne le faire qu'une fois). J'ai essayé aussi dans oninitdialog...

mais systématiquement la première fois ça plante...

Alors le résultat : l'appli tourne sans probleme... jusqu'à ce qu'on passe la fenêtre en second plan (genre on la recouvre avec un IE)... on ne peut alors plus la réafficher. Et lorsqu'on quitte, on a une serie d'exception