2012-06-29 19 views
5

Tengo un dll de terceros (C++ simple) que dibuja en un HDC algunas líneas. Quiero tener estas líneas en un C# Bitmap o Formulario.Dibujo en C# mapa de bits con C++

Intenté dar al C++ un HBITMAP o un HDC de Graphics.FromImage (mapa de bits) pero ninguna de las formas anteriores funcionó para mí.

Con todo MFC TestApp funciona bien usando el siguiente código

HWND handle = pStatic->GetSafeHwnd(); 
CDC* dc = pStatic->GetDC(); 

Draw(dc); 

Mi pregunta es: ¿Qué tengo que hacer/uso para dibujar en un mapa de bits o formar con el sorteo anterior método (HDC) ?

Espero que me puedan ayudar. Gracias de antemano,

Patrick

+1

¿Puedes publicar el código C# que has probado? ¿Es diferente de [este ejemplo de GetHdc] (http://msdn.microsoft.com/en-us/library/9z5820hw (v = VS.80) .aspx)? – PhilMY

Respuesta

5

Para dibujar en un mapa de bits uso de C# este código:

 Graphics gr = Graphics.FromImage(MyBitmap); 
     IntPtr hdc = gr.GetHdc(); 
     YourCPPDrawFunction(hdc); 
     gr.ReleaseHdc(hdc); 

Un ejemplo de un YourCPPDrawFunction es:

void YourCPPDrawFunction(HDC hDc) 
    { 
     SelectObject(hDc, GetStockObject(BLACK_PEN)); 
     Rectangle(hDc, 10, 10, 20, 20); 
    } 

para dibujar directamente en una superficie de formulario, use este código:

protected override void OnPaint(PaintEventArgs e) 
    { 
     base.OnPaint(e); 
     IntPtr hdc = e.Graphics.GetHdc(); 
     YourCPPDrawFunction(hdc); 
     e.Graphics.ReleaseHdc(hdc); 
    } 

No olvides llamar a Graphics.ReleaseHdc() cuando hayas terminado de dibujar, de lo contrario no verás los resultados de tu dibujo.