gpt4 book ai didi

wpf - 我可以从 WPF 窗口获取 HDC 以便我可以使用 Gdi+ API 绘制它吗?

转载 作者:行者123 更新时间:2023-12-04 14:28:06 26 4
gpt4 key购买 nike

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

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

最佳答案

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

有两种方法可以做到这一点,尽管两者最终都做同样的事情。第一个是 P/Invoke 必要的 GDI+ API 函数,但我们可以很快将其排除为不必要的耗时。请记住,.NET Framework 已经在 System.Drawing namespace 中为 WinForms 开发封装了所有这些内容。 ,尤其是 Graphics class .因此,您需要做的就是添加对 System.Drawing 的引用。到您的 WPF 应用程序,您将免费获得所有这些包装的功能。

您感兴趣的部分是 Graphics.FromHwnd method ,这将创建一个新的 Graphics来自指定窗口句柄 ( HWND ) 的对象。

一旦你得到了它,你可以通过调用 HDC method 来获得设备上下文的句柄(Graphics.GetHdc)。 ,它会返回你所追求的——一个 IntPtr表示设备上下文句柄的值。

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

关于wpf - 我可以从 WPF 窗口获取 HDC 以便我可以使用 Gdi+ API 绘制它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8656827/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com