5

HDC でいくつかの行を描画するサードパーティの dll (プレーン C++) があります。これらの行を C# ビットマップまたはフォームに配置したいと考えています。

C++ に Graphics.FromImage(bitmap) の HBITMAP または HDC を指定しようとしましたが、上記の方法はどれもうまくいきませんでした。

MFC TestApp では、次のコードを使用してすべて正常に動作します

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

Draw(dc);

私の質問は: 上記の Draw(HDC) メソッドを使用してビットマップまたはフォームに描画するには、何を行う/使用する必要がありますか?

あなたが私を助けてくれることを願っています。前もって感謝します、

パトリック

4

1 に答える 1

5

C# ビットマップに描画するには、次のコードを使用します。

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

YourCPPDrawFunctionの例は次のとおりです。

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

フォーム サーフェスに直接描画するには、次のコードを使用します。

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

描画が完了したら Graphics.ReleaseHdc() を呼び出すことを忘れないでください。そうしないと、描画の結果が表示されません。

于 2012-06-29T14:15:08.573 に答える