MixerAnderson
Messages postés3Date d'inscriptionlundi 19 avril 2004StatutMembreDernière intervention22 avril 2004
-
19 avril 2004 à 17:37
MixerAnderson
Messages postés3Date d'inscriptionlundi 19 avril 2004StatutMembreDernière intervention22 avril 2004
-
22 avril 2004 à 22:28
Bonjour,
Depuis quelques temps je développe une IHM en Win32. J'ai développé des classes c++ dans lequel je gère le WndProc en méthode de classe (grace au GWL_USERDATA).
Jusque là tout va bien, j'ai fait des petites fenêtres, des petites boites de dialogue, des petits boutons, presque tous les controles. Jusqu'à ce que j'arrive au Tab Control (les onglets).
En sélectionnant chaque onglets, j'ai pas trouvé mieux pour faire apparaitre/disparaitre chaquee panel, que de faire apparaitre en premier plan ou cacher les éléments correspondant au panel.
Malheureusement dans mes panels, je veux mettre un certain nombre de boutons de facon dynamique et verticalement par exemple. Naturellement ils dépassent du panel (je suis sur WinCE, l'écran est tout piti) d'ou l'intervention d'une SCROLLBAR.
Et là je ne sais pas trop comment m'y prendre.
C bon, vous suivez encore ?
2 possibilités :
_ soit je fait une fenetre par panel munis d'une scrollbar.
_ soit j'ajoute une scrollbar directement.
Mais dans les 2 cas, j'ai pas vu de gestion automatique de la scrollbar. Dois-je faire la gestion de tous les événements WM_VSCROLL (PAGEUP, BOTTOM, TOP, ...) ?
Si oui (pas de solution automatique comme pour les list box) :
_ si j'utilise une scrollbar ajouté sans fenetre supplémentaire pour gérer chaque panel, comment bien gérer les boutons pour qu'il apparaissent UNIQUEMENT dans la région du tab control ?
_ quelque a t'il un exemple bien fourni ? :big)
for (i = 0; i < QUELCONQUE; i++)
button[i] = CreateWindow( TEXT("BUTTON"), NULL, WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON, 20, 10 + i*25, 15, 15, hwnd, NULL, hInst, NULL);
...
/* dans le WndProc */
if (msg == WM_VSCROLL)
{
newvalue = oldvalue;
switch ( GET_WM_VSCROLL_CODE(wParam,lParam) )
{
case SB_BOTTOM : newvalue = 0; break;
case SB_TOP : newvalue = 100; break;
case SB_LINEDOWN : newvalue ++; break;
case SB_PAGEDOWN : newvalue += 10; break;
case SB_LINEUP : newvalue --; break;
case SB_PAGEUP : newvalue -= 10; break;
case SB_THUMBPOSITION:
case SB_THUMBTRACK : newvalue = GET_WM_VSCROLL_POS(wParam,lParam); break;
}
newvalue = max(0,min(100,newvalue));
SetScrollPos(hwnd,SB_CTL,newvalue,TRUE);
}
UpdatePanel( newvalue );
oldvalue = newvalue;
}
Maintenant ma question se situe dans : qu'est-ce que je peux mettre dans le UpdatePanel ?
S'il s'agit de faire un petit algo qui calcule la nouvelle position des boutons, je peux le faire. Mais dans ce cas je ne sais pas faire apparaitre la partie seulement visible des boutons par rapport au panel. Est-ce qu'il y a un systeme de région (clipping, ...) ? Est-ce que ca se gère dans un WM_PAINT ?
Je suis total novice dans ce domaine. Merci par avance de vos bonnes idées ;)
MixerAnderson
Messages postés3Date d'inscriptionlundi 19 avril 2004StatutMembreDernière intervention22 avril 2004 22 avril 2004 à 22:28
C bon ! J'ai trouvé la réponse. Je suis gentil, je ne vous laisse pas continuer à chercher.
En fait la solution était sous mes yeux, mais j'étais aveugle ce jour-là ! Quoique il en soit, c'est dans les fonctions API Windows de la scrollbar :
la magique ScrollWindowEx()
Avec des paramètres de quoi faire joujou comme on veut.