2012-06-29 18 views
5

Ho una dll di terze parti (semplice C++) che disegna su un HDC alcune linee. Voglio avere queste linee su un Bitmap o un modulo C#.Disegno su C# Bitmap con C++

Ho provato a fornire al C++ un HBITMAP o un HDC di Graphics.FromImage (bitmap) ma nessuno dei metodi sopra descritti ha funzionato per me.

Con un tutto MFC TestApp funziona bene utilizzando il seguente codice

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

Draw(dc); 

La mia domanda è: metodo Che cosa devo fare/uso di attingere a una bitmap o di formare con il Draw sopra (HDC) ?

Spero che tu possa aiutarmi. Grazie in anticipo,

Patrick

+1

Puoi pubblicare il codice C# che hai provato? È diverso da [questo esempio GetHdc] (http://msdn.microsoft.com/en-us/library/9z5820hw (v = VS.80) .aspx)? – PhilMY

risposta

5

Per disegnare su un C# uso bitmap di questo codice:

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

Un esempio di YourCPPDrawFunction è:

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

per disegnare direttamente su una superficie del modulo, utilizzare questo codice:

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

Non dimenticare di chiamare Graphics.ReleaseHdc() dopo aver finito di disegnare, altrimenti non vedrai i risultati del tuo disegno.

Problemi correlati