La Web del Programador: Comunidad de Programadores
 
    Pregunta:  19844 - DIBUJAR SOBRE UN MSCHART
Autor:  Juan Gómez
Necesito saber una forma de dibujar líneas con el control Line u otra manera sobre un gráfico creado con MSChart en VB 6.0.

Resulta que tengo un gráfico dispersión XY y necesito dibujar manualmente una serie de separaciones preestablecidas sobre el gráfico. He observado que Line, Shape y Label no pueden colocarse sobre el MSChart, quedan bajo él aunque los insertes sobre él.

Sería de gran ayuda para mí obtener una respuesta.
Gracias.

  Respuesta:  Javier Perez
Puedes recurrir al API de Windows. A partir de la propiedad hwnd del control MSChart, mediante la función GetDC puedes obtener acceso a un contexto de dispositivo para la ventana del control, lo que te permitiría dibujar cualquier cosa sobre el control. Eso si, deberías tener en cuenta que cada vez que el gráfico se redibuja, se pierde lo que hayas dibujado tu, por lo que tendrías que redibujarlo. El siguiente ejemplo te puede dar una pequeña idea:

Type POINTAPI
x As Long
y As Long
End Type

Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long

Public Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Public Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As POINTAPI) As Long

Private Sub dibujar()

Dim hdc As Long
Dim p As POINTAPI
Dim r As Long

hdc = GetDC(MSChart1.hwnd)

r = MoveToEx(hdc, 8, 8, p)
r = LineTo(hdc, 64, 64)

r = ReleaseDC(MSChart1.hwnd, hdc)

End Sub