J'aimerais implémenter des scroll bars dans mon application Win 32, j'ai lu la doc SDK de Microsoft. Ca avait l'air assez simple, mais mon code ne marche pas du tout...
En fait les scroll bars s'affichent, mais leurs positions se remettent remettent toujours à celle par défaut après leur utilisation.
Voilà le code qui me sert pour la barre horizontale:
//Variables globales
SCROLLINFO si;
short nScreenMaxX; //Largeur maximum de la fenêtre en pixel
short nScreenMaxY; //Hauteur maximum de la fenêtre en pixel
short nScrollX = 0; //Position x du scrolling
short nScrollY = 0; //Position y du scrolling
//Code situé dans la fonction traitant les messages Windows
case WM_SIZE:
{
nScreenMaxX = LOWORD(lParam);
nScreenMaxY = HIWORD(lParam);
si.cbSize = sizeof(SCROLLINFO);
si.fMask = SIF_ALL;
si.nMin = 0;
si.nMax = nScreenMaxX;
si.nPage = 50;
si.nPos = nScrollX;
SetScrollInfo(hWnd, SB_HORZ, &si, true);
si.nMax = nScreenMaxY;
si.nPage = 50;
si.nPos = nScrollY;
SetScrollInfo(hWnd, SB_VERT, &si, true);
InvalidateRect(hWnd, NULL, true);
return 0;
}
case WM_HSCROLL:
{
short nInc;
switch (LOWORD(wParam))
{
case SB_PAGEUP:
{ nInc = si.nPage; }
case SB_PAGEDOWN:
{ nInc = -si.nPage; }
case SB_LINELEFT:
{ nInc = -1; }
case SB_LINERIGHT:
{ nInc = 1; }
case SB_THUMBTRACK:
{ nInc = HIWORD(wParam) - nScrollX; }
default:
{ nInc = 0; }
}
nScrollX += nInc;
si.nPos = nScrollX;
SetScrollInfo(hWnd, SB_HORZ, &si, true);
InvalidateRect(hWnd, NULL, true);
return 0;
}
Mon application reçoit bien le message WM_HSCROLL car la fenêtre est réactualisée par InvalidateRect() à chaque fois que je bouge la barre, mais sinon la scène et la barre ne bouge pas...
Vous voyez le problème? Bien sûr j'ai mis les tags WS_HSCROLL et WS_VSCROLL pour créer ma fenêtre.