Merci, je m'en doutais.
Voilà l'option que j'ai choisie :
/* creation des controles */
notebook = CreateWindowEx( 0, WC_TABCONTROL, NULL, WS_CHILD | WS_TABSTOP | WS_CLIPSIBLINGS | WS_VISIBLE, 5, 10, rcClient.right - 10, rcClient.bottom - MENU_HEIGHT - 5, hwnd, NULL, hInst, NULL );
scrollbar = CreateWindow( TEXT("SCROLLBAR"), NULL, WS_CHILD | WS_VISIBLE | SBS_VERT, ..., hwnd, NULL, hInst, NULL);
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
