Scrollbar Problem
-
UserDlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
case WM_HSCROLL:
{
...
//in item stehen die letzten daten der scrollbar drin
//item->frac = scrollinfo.nPageint CurPos;
switch(LOWORD(wParam))
{
case SB_LEFT:
CurPos = item->minval;
break;
case SB_LINELEFT:
if (CurPos != item->minval)
CurPos--;
break;
case SB_LINERIGHT:
if (CurPos != item->maxval)
CurPos++;
break;
case SB_PAGELEFT:
CurPos -= item->frac;
if (CurPos < item->minval)
CurPos = item->minval;
break;
case SB_PAGERIGHT:
CurPos += item->frac;
if (CurPos > item->maxval)
CurPos = item->maxval;
break;
case SB_RIGHT:
CurPos = item->maxval;
break;
SetScrollPos(hwnd, TRUE, CurPos, TRUE);
break;
}
}
-
Hab einen kleinen Teil vergessen.
case SB_THUMBPOSITION:
case SB_THUMBTRACK:
/* Cast to singed value, for negative scrollbars /
CurPos = (short)HIWORD(wParam);
break;
default:
return; / nothing more to do!! */
}
-
CurPos wird doch hier gar nicht initialisiert. Wie soll denn das gehen?
-
Hat einer einen Rat,
schlage mich schon mehrere Stunden damit rum.
-
Ach das habe ich vergessen zu kopieren.
in meiner Struktur steht die zuletzt gespeicherte position
damit wird CurPos initialisiert.CurPos = item->val; switch(LOWORD(wParam)) { ...
-
So kann ich dazu nichts sagen. Sieht OK aus. Also debuggen und die Werte kontrollieren...
-
Es verhält sich so als wie wenn des Scrollbalken zu groß wäre. Und zwar um seine komplette Breite. Wenn ich das Bild stärker vergrößere wird der Scrollbalken kleiner und ich kann immer weiter nach rechts schieben.
-
Wie kalkulierst Du den die Weite, die Du rollen darfst.
Normalerweise so:
<Weite Rollbalken> = <Weite View aus Daten> - <Weite des Fensters>
-
Ja genau so mach ich das.
Jetzt habe ich was neues herausgefunden.
Wenn ich mein scrollinfo.nMax um 153 erhöhe (warum weiß ich nicht) dann passts.
Aber: dies Funktioniert nur wenn das Fenster maximiert ist.
Wenn ich das Fenster minimiere ist des Scrollbereich zu groß. Und je kleiner das Fenster, desto kleiner mein clipping area und desto größer wird der Überschuss an Scrollbereich? Komisch.Erst hatte ich gedacht die 153 kommen vom Linken panel. Kann aber nicht sein sonst müsste er beim minimieren gleich bleiben, dieses panel ändert nämlich die größe beim minimieren des Fensters nicht.
-
Normal ist es ja so:
Wenn ich bei scollinfo.nMin = 0 und bei scollinfo.nMax = 500 angebe, kann ich meine Position dazwischen verschieben.Geht aber nicht komme nicht bis 500 ran.
Wenn ich den Scrollbalken nach rechts verschiebe steht er bei 400 (geschätzt) an. Das darfs doch nicht geben.
-
Aber daran ist nicht der Rollbalken schuld! Du selbst setzt und kontrollierst was gescheiht wenn gerollt wird.
-
case SB_THUMBTRACK: /* Cast to singed value, for negative scrollbars */ CurPos = (short)HIWORD(wParam); break;Wenn ich den Rollbalken ganz nach rechts verschiebe dann müsste mir doch HIWORD(wParam) -> scrollinfo.nMax liefern oder?
-
Ich glaube der Rollbalken geht davon aus, dass ihm die Gesamte Fensterbreite gehört. Da ich aber links ein Panel habe stimmt jetzt die Breite nicht mehr.
Nur wie sage ich der Bildlaufleiste, dass sie <gesamte Fensterpreite> - <größe linkes Panel> ist.