Gibt es eine bevorzugte, schnelle Methode des Scrollens innerhalb eines Benutzersteuerelements in GDI +?Wie kann man legitim mit GDI + blättern?
Ich habe ein Steuerelement erstellt, das ein horizontal scrollbares Diagramm grafisch darstellt.
Gegenwärtig wird bei meiner Steuerung die Position einer horizontalen Bildlaufleiste in einen Offset in die Daten umgewandelt. Das Steuerelement gibt dann die Daten wieder, die zwischen diesem Startpunkt und einem Endpunkt vorhanden sind, der basierend auf der Breite des Steuerelements berechnet wird.
Diese Methode funktioniert, ist aber sehr langsam. Ich möchte nicht die gesamte Bedienoberfläche bei jedem Scroll-Event manuell neu zeichnen müssen. Statt dessen möchte ich das Steuerelement initialisieren, indem ich die Gesamtheit (oder einen Teil) der grafischen Daten auf eine Offscreen-Oberfläche male und dann virtuell durch die Steueroberfläche scrolle, indem es die vorgerenderten Grafikdaten ab dem Offset liest berechnet durch die Position der horizontalen Bildlaufleiste.
Ist BitBlt der einzige Weg, dies zu tun? Muss ich Grafikdaten wirklich manuell von einer Oberfläche auf eine andere kopieren? Kann ich nicht einfach das Paint-Ereignis übernehmen und veranlassen, dass es beim Rendern die Daten von der Offscreen-Oberfläche liest? Auf diese Weise sind die Kopier- und die Renderaktion identisch.
Oder sollte ich etwas Hokey wie Farbe direkt zu einem Panel-Steuerelement tun und dann nur buchstäblich das Panel selbst von links nach rechts scrollen?
KLARSTELLUNG: Im Grunde möchte ich die richtige Art und Weise wissen, vorgerenderten Daten zu blättern. Wie scrollt man grafische Daten innerhalb eines Controls? Neuzeichnen der vorgerenderten Grafik ist KEINE korrekte Option.
Wie groß kann die Oberfläche des gesamten scrollbaren Grundstücks bekommen? Zeichnen Sie immer alle Punkte oder nur die, von denen Sie wissen, dass sie sichtbar sind? –
Ich zeichne nur die Punkte, die im sichtbaren Bereich liegen. Die gesamte Fläche des Diagramms kann bis zum 200-fachen der Breite des Steuerelements betragen. Ich möchte einen Grafikpuffer etwa doppelt so groß wie die Steuerfläche erstellen und den Puffer bei Bedarf nur durch Lesen der erforderlichen Daten in einer festgelegten Chunkgröße auffüllen. – James