Existe-t-il une méthode rapide et préférée de défilement dans un contrôle utilisateur dans GDI +?Comment faire défiler légitimement avec GDI +?
J'ai créé un contrôle qui affiche graphiquement un tracé de données défilant horizontalement.
Actuellement, ma commande opère en convertissant la position d'une barre de défilement horizontale en un décalage dans les données. Le contrôle restitue ensuite les données qui existent entre ce point de départ et un point final calculé en fonction de la largeur du contrôle.
Cette méthode fonctionne, mais elle est très lente. Je ne souhaite pas avoir à redessiner manuellement toute la surface de contrôle à chaque événement de défilement. Au lieu de cela, je voudrais initialiser le contrôle en peignant l'intégralité (ou une partie) des données graphiques sur une surface hors écran, puis faire défiler virtuellement la surface de contrôle en lui faisant lire les données graphiques pré-rendues à partir du décalage calculé par la position de la barre de défilement horizontale.
BitBlt est-il le seul moyen de le faire? Dois-je vraiment copier manuellement les données graphiques d'une surface à l'autre? Est-ce que je ne peux pas simplement prendre en charge l'événement Paint et l'amener à lire les données de la surface hors écran pendant le rendu? De cette façon, la copie et l'action de rendu sont une seule et même chose. Ou, devrais-je faire quelque chose comme de la peinture directement sur un panneau de contrôle et ensuite faire défiler le panneau lui-même de gauche à droite?
CLARIFICATION: Essentiellement, je veux connaître la bonne façon de faire défiler les données pré-rendus. Comment fait-on défiler les données graphiques dans un contrôle? Redessiner le graphique pré-rendu n'est PAS une option correcte.
Quelle peut la surface de l'ensemble de la parcelle scrollable obtenir? Dessinez-vous toujours tous les points ou seulement ceux que vous connaissez sont visibles? –
Je dessine uniquement les points situés dans la zone visible. La zone entière de l'intrigue peut être jusqu'à 200 fois la largeur du contrôle. Je voudrais créer un tampon graphique sur le double de la taille de la surface de contrôle et remplir le tampon si nécessaire en lisant uniquement les données nécessaires dans une taille de bloc définie. – James