[C++] Scroll bar avec Win32

Scroll bar avec Win32 [C++] - C++ - Programmation

Marsh Posté le 12-05-2003 à 14:39:51    

Bonjour,
 
Je n'arrive pas à utiliser les scroll bar de ma fenetre. G fait une fenetre avec un scroll bar horizontal, j'arrive à l'afficher, à lui affecter une valeur max et une valeur min, à le faire se deplacer de facon logiciel. Mais je n'arrive pas à ce que l'utilisateur puisse interagir avec : genre deplacer le curseur et appuyer sur les fleche. Ca fait rien...
 

Code :
  1. //Creation de la fenetre :
  2. hWnd = CreateWindow(szAppName, szTitle, WS_OVERLAPPEDWINDOW|WS_HSCROLL,
  3.  10, 10, 500, 500, NULL, NULL, hInstance, NULL);
  4. //affectation des valeurs :
  5. LPSCROLLINFO lpsi = (SCROLLINFO*)malloc(sizeof(SCROLLINFO));
  6.     lpsi->cbSize = sizeof(LPSCROLLINFO);
  7.     lpsi->fMask = SIF_POS| SIF_RANGE;
  8.     lpsi->nMax = Data.nbptPoints;
  9.     lpsi->nMin = 0;
  10.     lpsi->nPos = 0;
  11.     SetScrollInfo(hWnd, SB_HORZ, lpsi, TRUE);
  12. //deplacement logiciel :
  13.     lpsi->nPos = etape;
  14.     lpsi->fMask = SIF_POS;
  15.     SetScrollInfo(hWnd,SB_HORZ,lpsi,TRUE);


 
En fait je voudrais savoir comment permettre à l'utilisateur d'interagir avec et comment recuperer la nouvelle valeur?
 
Merci

Reply

Marsh Posté le 12-05-2003 à 14:39:51   

Reply

Marsh Posté le 12-05-2003 à 15:11:05    

Il faut que tu regardes les messages WM_HSCROLL et WM_VSCROLL et y a la fonction GetScrollPos aussi.

Reply

Marsh Posté le 12-05-2003 à 16:14:02    

G essayé ca pour recuperer la valeur :

Code :
  1. case WM_HSCROLL:
  2.   lpsi->cbSize = sizeof(SCROLLINFO);
  3.   GetScrollInfo(hWnd,SB_HORZ,lpsi);
  4.   etape = lpsi->nTrackPos;
  5.   break;


 
mais ca marche pas... je recupere tjs 0  :heink:.

Reply

Marsh Posté le 12-05-2003 à 16:20:26    

Euh tu as des param passes via le WM_HSCROLL
 


WM_HSCROLL  
nScrollCode = (int) LOWORD(wParam);  // scroll bar value  
nPos = (short int) HIWORD(wParam);   // scroll box position  
hwndScrollBar = (HWND) lParam;       // handle to scroll bar  


 
Enfin deja passe tu dans ton case ?

Reply

Marsh Posté le 12-05-2003 à 16:25:08    

Oui je passe dans le case.
 
WM_HSCROLL  
nPos = (short int) HIWORD(wParam);   // scroll box position  
c la position modifié par l'utilisateur? ca sert a koi?

Reply

Marsh Posté le 12-05-2003 à 16:26:24    

Euh regarde le msdn ca m evitera de faire un copier/coller :)

Reply

Marsh Posté le 12-05-2003 à 16:30:44    

Oui c vrai c pas bete ;) , je v essayer de modifier avec ce ki disent ds msdn et je vous tien o courant...
 
Merci

Reply

Marsh Posté le 12-05-2003 à 16:36:04    

Alors g fait ca :

Code :
  1. nScrollCode = (int) LOWORD(wParam);  // scroll bar value  
  2.   nPos = (short int) HIWORD(wParam);   // scroll box position  
  3.   if(nScrollCode == SB_THUMBPOSITION)
  4.   {
  5.    etape = nPos;
  6.   }


Ca marche quand je bouge le curseur mais les fleches ne fonctionnent pas... C normal? :??:

Reply

Marsh Posté le 12-05-2003 à 16:40:49    

Oui car c un traitement supplementaire ca
 
Intercept les WM_KEYUP si c fleche tu fais traitement (soit directement, soit en lancant un SendMessage(hwnd, WM_HS_SCROL, ..) etc)

Reply

Marsh Posté le 12-05-2003 à 16:48:00    

Heu dsl mais g pas tout compris, g regardé dans msdn pour WM_KEYUP mais je ne vois pas comment verifier si c les fleche et la quelle c? :pt1cable:  Tu peut etre un peu plus preci stp?
 
Merci

Reply

Marsh Posté le 12-05-2003 à 16:48:00   

Reply

Marsh Posté le 12-05-2003 à 18:01:37    

Ben avec le WM_KEYDOWN ou KEYUP tu as le code de la touche passé (enfin mm plus que cela comme indiqué ds la doc).
 
Suffit d'isole le code et si il est egale au code fleche haut ou bas de faire l'action voulue.
 
 
PS: pour le code de la touche, tu as qu a faire un TRACE/OutputDebug ou autre pour tester et recup les bons code je les connais pas la comme ca

Reply

Marsh Posté le 12-05-2003 à 18:36:35    

AH OK mais je crois qu'on c t mal compris. Je parlais des fleches de chaque coté de la scroll bar pas des fleches du clavier!!!

Reply

Marsh Posté le 12-05-2003 à 18:50:36    

Ah oki effectivement j avais pas compris.
 
C est le nScrollCode==SB_LINELEFT ou nScrollCode==SB_LINERIGHT alros qu il faut que tu regardes

Reply

Marsh Posté le 13-05-2003 à 08:57:10    

OK merci beaucoup.  :jap:  :jap:  :jap:  
 
A+  :hello:  :bounce:

Reply

Sujets relatifs:

Leave a Replay

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