5

我有一个第 3 方 dll(纯 C++),它在 HDC 上绘制了一些行。我想在 C# 位图或表单上有这些行。

我试图给 C++ 一个 HBITMAP 或 Graphics.FromImage(bitmap) 的 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 回答