我可以从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
方法以释放其相关资源。
上一篇: 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