使用C++在C#位图上绘制图形

6
我有一个第三方dll(纯C++),它在HDC上绘制一些线条。 我想将这些线条放在一个C#位图或窗体中。
我尝试给C++一个Graphics.FromImage(bitmap)的HBITMAP或HDC, 但以上两种方法都没有起作用。
使用MFC TestApp可以使用以下代码顺利完成。
HWND handle = pStatic->GetSafeHwnd();
CDC* dc = pStatic->GetDC();

Draw(dc);

我的问题是:我需要使用什么方法或工具,在 Bitmap 或表单上绘制,以及如何使用上述的 Draw(HDC) 方法?

希望你能帮助我,谢谢。

Patrick


1
你能发一下你尝试过的C#代码吗?这跟GetHdc示例代码有什么区别吗? - PhilMY
1个回答

6
要在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(),否则你将看不到你所绘制的结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接