Sujet : [Win] J'arrive pas à faire marcher les scroll bars |
seblamb |
antp a écrit a écrit :
d'ailleurs les accolades servent à rien il me semble dans les case...
|
Ca peut servir pour déclarer un variable locale mais ça remplace pas le break.
case 1:
{
int i =1;
i++;
} |
Alload |
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. |