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.aspx

    Das 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


  • Mod

    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.


  • Mod

    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...


Anmelden zum Antworten