¿Existe un método preferido y rápido para desplazarse dentro de un control de usuario en GDI +?¿Cómo se puede desplazar legítimamente con GDI +?
He creado un control que representa gráficamente un gráfico de datos desplazables horizontalmente.
Actualmente, mi control funciona al convertir la posición de una barra de desplazamiento horizontal en un desplazamiento en los datos. Luego, el control representa los datos que existen entre este punto inicial y uno final calculado en función del ancho del control.
Este método funciona, pero es muy lento. No deseo tener que volver a dibujar manualmente toda la superficie de control en cada evento de desplazamiento. Más bien, me gustaría inicializar el control pintando la totalidad (o una parte) de los datos gráficos en una superficie fuera de pantalla, y luego desplazar virtualmente la superficie de control haciendo que lea los datos gráficos pretratados comenzando en el desplazamiento calculado por la posición de la barra de desplazamiento horizontal.
¿BitBlt es la única forma de hacerlo? ¿Realmente tengo que copiar manualmente los datos gráficos de una superficie a otra? ¿No puedo simplemente asumir el evento Paint y hacer que lea los datos de la superficie fuera de la pantalla a medida que se renderiza? De esta forma, la acción de copiar y renderizar es una en la misma.
O, ¿debería hacer algo como pintar directamente en el control de un Panel y luego simplemente desplazar el panel de izquierda a derecha?
ACLARACIÓN: Básicamente, quiero saber la forma correcta de desplazar los datos pretratados. ¿Cómo se puede desplazar datos gráficos dentro de un control? Redibujar el gráfico preprocesado NO es una opción correcta.
¿Qué tan grande puede la superficie de toda la trama desplazable conseguir? ¿Siempre dibujas todos los puntos o solo los que sabes que son visibles? –
Solo dibujo los puntos que están dentro del área visible. El área completa de la trama puede ser hasta 200 veces el ancho del control. Me gustaría crear un búfer gráfico de aproximadamente el doble del tamaño de la superficie de control y rellenar el búfer cuando sea necesario leyendo solo los datos necesarios en un tamaño de fragmento determinado. – James