[Win] J'arrive pas à faire marcher les scroll bars

J'arrive pas à faire marcher les scroll bars [Win] - Programmation

Marsh Posté le 15-07-2001 à 18:25:58    

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.

Reply

Marsh Posté le 15-07-2001 à 18:25:58   

Reply

Marsh Posté le 15-07-2001 à 21:28:45    

C'est bon, fallait seulement rajouter des break; dans chaque cas.
:)

Reply

Marsh Posté le 16-07-2001 à 11:30:26    

Alload a écrit a écrit :

C'est bon, fallait seulement rajouter des break; dans chaque cas.
:)  




 
d'ailleurs les accolades servent à rien il me semble dans les case...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 16-07-2001 à 11:39:14    

Ca sert à rien les accolades dans un switch->case?
 
Merde... Je pensais qu'elles jouaient le même rôle que break.

Reply

Marsh Posté le 16-07-2001 à 11:41:13    

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++;
 }


---------------
[:seblamb] Moi aussi je veux grater dédé!!!
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed