2012-06-29 10 views
5

Mam dll 3rd party (zwykły C++), który rysuje na HDC kilka linii. Chcę mieć te linie na C# bitmapie lub formularzu.Rysunek na C# Bitmap z C++

Próbowałem dać C++ HBITMAP lub HDC Graphics.FromImage (bitmap) , ale żaden z powyższych sposobów nie działał dla mnie.

Z MFC TestApp wszystko działa prawidłowo za pomocą następującego kodu

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

Draw(dc); 

Moje pytanie brzmi: Co muszę zrobić/używać do rysowania na mapę bitową lub tworzyć z powyższej metody draw (HDC) ?

Mam nadzieję, że możesz mi pomóc. Dzięki z góry,

Patrick

+1

Czy możesz wysłać kod C#, który wypróbowałeś? Czy różni się od [tego przykładu GetHdc] (http://msdn.microsoft.com/en-us/library/9z5820hw (v = VS.80) .aspx)? – PhilMY

Odpowiedz

5

Aby narysować na C# użytku bitmapy ten kod:

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

Przykładem YourCPPDrawFunction jest:

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

Aby narysować bezpośrednio na powierzchni formularza użyj tego kodu:

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

Nie zapomnij zadzwonić Graphics.ReleaseHdc() po zakończeniu rysowania, w przeciwnym razie nie zobaczysz wyników rysunku.