Immernoch Probleme mit dem Scrollen: ScrollWindow(Ex)
-
Hallo zusammen.
Ich bins mochmal mit dem gleichen Problem wie bisher:Ich möchte viele Fenster auf einmal möglichst performant nach oben bewegen aber ich weiß nicht wie ich das am besten machen soll.
Von dem vorherigen Forumeintrag hab ich ja den ScrollWindow(Ex) Tipp bekommen.
Leider funktionierts die Funktion nicht wie sie soll und der MSDN Eintrag ist leider nicht sehr hilfreich.Ich habe folgendes Problem:
http://www.fotos-hochladen.net/uploads/problemc51a2tf096.png
Dabei habe ich nur nach oben gescrollt??
Ich habe aber noch etwas ganz anderes zu beklagen!
WAS versteht Windows unter Scrollen? Ich dachte (natürlich) dass die Position eines um 5 Einheiten nach oben gescrollten Fensters GESPEICHERT wird.. leider ist das nicht der Fall. Wenn ich ein Neuzeichnen des Fensters erzwinge stehen die Comboboxen immer noch in Startposition..Verstehe ich da was falsch?!
Hier ist mein Scrollcode:
case WM_MOUSEWHEEL: { if(Status.GetStatus()==STATUS_ENDRUNDEN) { switch(TabCtrl_GetCurSel(Tabulator)) { case TAB_SIEGERRUNDE: { // Siegerrunde scrollen if(GET_WHEEL_DELTA_WPARAM(wParam) < 0) { ScrollY[SIEGERRUNDE]-=10; } else { ScrollY[SIEGERRUNDE]+=10; } // Alle 64 Fenster nach scrollen for(int i=0; i<64; i++) { // Scrollen? ScrollWindowEx(Siegerrunde[i],0,ScrollY[SIEGERRUNDE],NULL,NULL,NULL,NULL,NULL); UpdateWindow(Siegerrunde[i]); } break; } } } break; }
Ich kann nicht nachvollziehen was falsch ist
Ich bin dankbar für jegliche Hilfe
Vielen Dank,
Johannes Schneider
-
Moin,
ich hatte Dir den Tip gegeben Dir die verlinkten Beispiele anzusehen.
Dort siehst Du, dass die Positionen in der SCROLLINFO per SetScrollInfo gespeichert werden.
Mit GetScrollInfo rufst Du die gespeicherten Daten wieder ab.Bsp. für ein Fenster mit Text
http://msdn.microsoft.com/en-us/library/windows/desktop/hh298421%28v=vs.85%29.aspxDas brauchst Du jetzt nur noch für Deinen Zweck umzumünzen.
Du solltest Deine ComboBox-Steuerelemente in ein (Container-)Fenster mit Bildlaufleiste packen. Dieses setzt Du dann in Deine Tabs.
Einfacher geht das wohl mit Property Sheets.Grüße
Greenhorn
-
Du kannst ScrollWindow(Ex) nicht verwenden um Standard-Controls zu scrollen.
Wen Du die MSDN lesen würdest, dann wäre Dir klar geworden, dass es in diesem Fall um den Inhalt des Fensters geht...Dann Pfuscht Du in deren Paint Technik.
Bei einer Combobox, kanst Du letzten Endes nur mit CB_SETCURSEL (offiziell) ein rollen veranlassen.
Ansonsten kannst Du nur an das List-Control der Combobox ein WM_VSCROLL senden.
Was soll das werden?
Eine Art Gridcontrol mit hunderten von Controls?
Davon würde ich Dir dringedn abraen. Solche Subcontrols würde ich nur dann erzeugen, wenn Sie für das Ändern der Daten benötigt werden (sprich Inplace Edit), danach sollte so ein Control gleicht wieder verschwinden.
-
@Martin Richter
Er will ja nicht den Inhalt der Combobox-Dropdownliste scrollen sondern die ganze Combobox - bzw. sogar mehrere davon.
Ich denke das sollte mit ScrollWindowEx ganz gut funktionieren.
-
Jein. Wenn der Viewport nicht korrekt umgesetzt wird, dann passiert nur Schrott!
Denn dann zeichnmet sihc das Fenster wieder an alter Stelle, was je genau auf dem Bild passiert.Wenn Child Windows gescrollt werden ist das nicht ohne.
Der OP soll sich den Sourcecode von CFormView/CScrollView aus der MFC ansehen. Da wird das richtig gemacht...