Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - [WinApi] Se cambio la value della spinbox mi cambia anche quella della scrollbar
Forum - C/C++ - [WinApi] Se cambio la value della spinbox mi cambia anche quella della scrollbar

Avatar
xeeynamo (Normal User)
Pro


Messaggi: 66
Iscritto: 14/03/2008

Segnala al moderatore
Postato alle 13:55
Domenica, 27/06/2010
Salve!
Ho un nuovo problema con le WinApi e questa volta riguarda la scrollbar e la spinbox. Ho creato una semplice classe che gestisce la scrollbar. Funziona alla perfezione, solo che se provo a mettere una spinbox e a cambiarne il valore, verrà cambiata anche la posizione del segnalino nella scrollbar! Su internet ho già provato a cercare ma senza risultati. Questo è il codice da me usato:

Codice sorgente - presumibilmente C#

  1. // scrollbar.cpp
  2. void ScrollBar::Create(HWND hWnd, HINSTANCE hInst, const int x, const int y, const int height)
  3. {
  4.         hCtrl = CreateWindow(L"SCROLLBAR", NULL, WS_CHILD | WS_VISIBLE | SBS_VERT, x, y, 15, height, hWnd, NULL, hInst, NULL);
  5.         if (hCtrl == NULL)
  6.                 ErrorBox(hWnd, L"Unable to create ScrollBar", GetLastError());
  7. }
  8. void ScrollBar::GetRange(int *min, int *max)
  9. {
  10.         if (!GetScrollRange(hCtrl, SB_CTL, min, max))
  11.                 ErrorBox(hCtrl, L"Unable to get scrollbar's range", GetLastError());
  12. }
  13. void ScrollBar::SetRange(const int min, const int max)
  14. {
  15.         if (!SetScrollRange(hCtrl, SB_CTL, min, max, true))
  16.                 ErrorBox(hCtrl, L"Unable to set scrollbar's range", GetLastError());
  17. }
  18. int  ScrollBar::GetPos()
  19. {
  20.         return GetScrollPos(hCtrl, SB_CTL);
  21. }
  22. void ScrollBar::SetPos(int pos)
  23. {
  24.         SetScrollPos(hCtrl, SB_CTL, pos, true);
  25. }
  26. void ScrollBar::Work(WPARAM wParam)
  27. {
  28.         value = GetPos();
  29.         switch(LOWORD(wParam))
  30.         {
  31.         case SB_LINEUP:
  32.                 value--;
  33.                 break;
  34.         case SB_LINEDOWN:
  35.                 value++;
  36.                 break;
  37.         case SB_PAGEUP:
  38.                 value-=2;
  39.                 break;
  40.         case SB_PAGEDOWN:
  41.                 value+=2;
  42.                 break;
  43.         case SB_THUMBPOSITION:
  44.                 value = HIWORD(wParam);
  45.                 break;
  46.         case SB_THUMBTRACK:
  47.                 value = HIWORD(wParam);
  48.                 break;
  49.         case SB_TOP:
  50.                 ErrorBox(hCtrl, L"SB_TOP unimplemented", 0);
  51.                 break;
  52.         case SB_BOTTOM:
  53.                 ErrorBox(hCtrl, L"SB_BOTTOM unimplemented", 0);
  54.                 break;
  55.         case SB_ENDSCROLL:
  56.                 SetPos(value);
  57.                 break;
  58.         }
  59.         SetPos(value);
  60. }



Codice sorgente - presumibilmente C++

  1. // winctrl.h
  2. class ScrollBar
  3. {
  4. private:
  5.         HWND hCtrl;
  6.         int value;
  7. public:
  8.         void Create(HWND hWnd, HINSTANCE hInst, const int x, const int y, const int height);
  9.         void GetRange(int *min, int *max);
  10.         void SetRange(const int min, const int max);
  11.         int  GetPos();
  12.         void SetPos(int pos);
  13.         void Work(WPARAM wParam);
  14. };



E questa è la parte della gestione degli eventi:
Codice sorgente - presumibilmente C/C++

  1. switch (message)
  2.         {
  3.         case WM_VSCROLL:
  4.                 mapScroll.Work(wParam);
  5.                 break;



Qualcuno può darmi una mano?


PM Quote
Avatar
xeeynamo (Normal User)
Pro


Messaggi: 66
Iscritto: 14/03/2008

Segnala al moderatore
Postato alle 0:04
Sabato, 03/07/2010
Nessuno :(? Sò che devo prendere l'ID dell'HWND del controllo nella creazione per poi metterlo nella ricezione dei messaggi ma come ottenere l'ID?

PM Quote