我可以从WPF窗口获取HDC,以便我可以使用Gdi + API进行绘制吗?

我有一个使用GDI + API的给定HDC的库。 我想在WPF应用程序中使用它。 我尝试从WindowInteropHelper类获取句柄,并将它传递给执行绘制的库方法。 然而,它只是因为它无法从该句柄创建Gdi +图形而失败。

然后我尝试在WindowsFormsHost控件中使用WinForm元素,并使用WinForm控件的绘制事件中可用的HDC,并且它确实工作正常。 我想知道的是,可以做同样的事情直接在WPF控件窗口上工作吗? 有没有其他的方式可以从WPF元素获取HDC的GDI绘制API可以使用?


如果您有WPF窗口的窗口句柄( HWND ),大概是使用WindowInteropHelper类获得的,那么您可以轻松获得该窗口的设备上下文( HDC )的句柄。

有两种方法可以解决这个问题,尽管两者最终都是一样的。 首先是P /调用必要的GDI + API函数,但是我们可以很快排除这种情况,因为这会耗费不必要的时间。 请记住,.NET Framework已经为System.Drawing命名空间中的WinForms开发包装了所有这些内容,特别是Graphics类。 所以你所要做的就是将一个对System.Drawing的引用添加到你的WPF应用程序中,并且你将免费获得所有这些包装功能。

您感兴趣的部分是Graphics.FromHwnd方法,它从指定的窗口句柄( HWND )创建一个新的Graphics对象。

一旦获得了这些信息,就可以通过调用Graphics.GetHdc方法来获取设备上下文( HDC )的句柄, Graphics.GetHdc方法会返回您正在处理的内容 - 表示设备上下文句柄的IntPtr值。

请记住,在完成Graphics对象之后,您需要调用Dispose方法以释放其相关资源。

链接地址: http://www.djcxy.com/p/50307.html

上一篇: Can I get HDC from WPF window so that I can draw to it with Gdi+ API?

下一篇: Rendering controls on glass: Solution found, needs double