2012-06-29 28 views
5

Ich habe eine Drittanbieter-DLL (Plain C++), die auf einem HDC einige Zeilen zeichnet. Ich möchte diese Zeilen in einer C# -Bitmap oder -Form haben.Zeichnen auf C# Bitmap mit C++

Ich habe versucht, der C++ eine HBITMAP oder eine HDC der Graphics.FromImage (Bitmap) zu geben, aber keine der oben genannten Möglichkeiten funktionierte für mich.

Mit einem MFC TestApp allem funktioniert mit feinem dem folgenden Code

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

Draw(dc); 

Meine Frage ist: Was ich auf einem Bitmap oder bilden mit dem oben Draw (HDC) Methode zu tun/Nutzung zu tun haben zu zeichnen ?

Ich hoffe, Sie können mir helfen. Dank im Voraus,

Patrick

+1

Können Sie den C# -Code veröffentlichen, den Sie ausprobiert haben? Ist es anders als [dieses GetHdc-Beispiel] (http://msdn.microsoft.com/en-us/library/9z5820hw (v = VS.80) .aspx)? – PhilMY

Antwort

5

diesen Code auf einem C# Bitmap Gebrauch zu machen:

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

Ein Beispiel eines YourCPPDrawFunction ist:

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

direkt zu zeichnen Verwenden Sie auf einer Formularoberfläche diesen Code:

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

Vergessen Sie nicht, Graphics.ReleaseHdc() aufzurufen, nachdem Sie mit dem Zeichnen fertig sind, sonst werden die Ergebnisse Ihrer Zeichnung nicht angezeigt.