Bonjour,
� la base, je dois g�rer des onglets, rien de bien m�chant, si ce n'est qu'ils sont dans ma page, avec le reste des controles.
Je sais qu'il existe les PropertySheet et PropertyPage, mais toutes les aides que j'ai pu trouver sur le net � ce sujet ne sont ax�s que sur une fen�tre de Dialog ne comportant que des onglets et des boutons inutiles (appliquer, etc)
Mais moi je veux �a dans ma fenetre principale (Projet MDI, avec la vue principale en FormView)
Donc, j'essaye d'int�grer un Tab Control que je place sur ma fen�tre � la taille et � la place qu'il faut.
Je r�cup�re le clic, et suivant l'onglet cliqu�, je souhaite afficher une ressource DIALOG correspondante.
Bon, alors l�, dans OnInitialUpdate de la vue :
- je cr�� tous les dialogs avec un new (d�clar� CHILD, sans bordure, sans titre)
- je lance un Create pour chaque dialog avec parent � NULL (j'ai essay� plein de parent, �a change apparemment rien oO)
- je cr�� les onglets avec des strings
- j'affiche l'onglet 0 par d�faut
pour le clic, c'est facile, je r�cup�re le GetCurSel de mon tabcontrol, et affiche le dialog/onglet correspondant
l'affichage d'un onglet est comme suit :
Le r�sultat :
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 void InterfaceTab::Afficher(int pos) { if (pos>=0 && pos<listeTab.GetCount()) { // un tab qui existe :) // etape 1 : rendre l'onglet précédent invisible (sauf si premiere fois, ou si le même) CDialog *p; if (lastTab>=0 && currentTab!=lastTab) { p = listeTab.GetAt(lastTab); p->ShowWindow(SW_HIDE); p->SetWindowPos(&CWnd::wndBottom,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE); } lastTab=currentTab; currentTab=pos; // ensuite on affiche celui sélectionné à la position qu'il faut CRect r; p = listeTab.GetAt(pos); p->GetWindowRect(r); p->SetWindowPos(&CWnd::wndTopMost,3,27,r.Width(),r.Height(),SWP_SHOWWINDOW | SWP_NOZORDER); p->ShowWindow(SW_SHOW); p->SetFocus(); } }
l'onglet-dialog s'affiche bien, mais impossible d'avoir le focus avec la souris.... Je peux cliquer partout sur la fen�tre, c'est le TabControl (ou la fenetre principale en fait) qui r�cup�re le focus....ce rend tout controle dans cet onglet inop�rant (bouton, checkbox, etc...)
Une fois en modifiant un peu tout et n'importe quoi, j'ai r�ussi � avoir le focus sur l'onglet-dialog, mais elle ne s'affichait pas (on cliquait sur des trucs invisibles, mais les reactions des boutons, par exemple un message box s'effectuait bien)
j'ai ajout� un "Afficher" dans le paint... Alors suivant les essais (affichage avec un CWnd sp�fici� dans le showWindow par exemple, ou en wndBottom, etc... ) �a fait des flash de dessins de fen�tre...
Bref, pourquoi il n'y a pas un truc simple pour g�rer les onglets en MFC ? :/
Peut on faire un truc simple avec les PropertySheet/Page ?
Je pr�f�re quand m�me l'utilisation des tab sous VisualBasic... mais bon, l� j'ai pas trop le choix...
je sais qu'au pire je peux m'amuser (youpi) � faire tout en dynamique pour m'assurer les onglets, mais je pr�f�re tenter l'utilisation des Dialog en ressources...
Donc au jour d'aujourd'hui, visuellement, j'ai bien des tab + onglets... sauf que les onglets ne sont que visuels, et que si je met des boutons dedans, ils sont inclicables...
En mettant les Dialog en POPUP au lieu de CHILD, �a marche parfaitement, si ce n'est qu'on voit la fen�tre principale perdre le focus (barre de titre gris�e), et que c'est moyen je trouve... (et le positionnement change aussi, car plus relatif � la fen�tre parent ^^)
Comment rendre les controles de ce dialog child utilisable ?
Partager