System.Drawing.Graphics 中的 IntPtr.Zero 是啥意思

Posted

技术标签:

【中文标题】System.Drawing.Graphics 中的 IntPtr.Zero 是啥意思【英文标题】:What does IntPtr.Zero mean in System.Drawing.GraphicsSystem.Drawing.Graphics 中的 IntPtr.Zero 是什么意思 【发布时间】:2016-09-01 17:23:30 【问题描述】:

我需要在下面的函数中得到 IntPtr.Zero 的确切含义。 我使用此函数将 word 文档文本范围位置像素值转换为 WPF 单位值。

Graphics g = Graphics.FromHwnd(IntPtr.Zero)

这通常说通过句柄,但我没有得到它。

【问题讨论】:

【参考方案1】:

Graphics.FromHwnd 方法用于从窗口的指定处理程序创建Graphics 对象。

当您将IntPtr.Zero 作为参数传递时,您正在从Windows 桌面创建一个Graphics,允许您直接在屏幕上绘图。

【讨论】:

【参考方案2】:

IntPtr 是一种特定于平台的方式来表示句柄或指针。在 32 位系统上,指针为 32 位宽,而在 64 位系统上,指针为 64 位宽。这种类型的存在是为了向您隐藏这些差异。

IntPtr.Zero 表示一个句柄或指针,其值为 0(本质上为 null)。您可以在 API 需要 Windows API 样式句柄的地方使用它,例如在您的示例中的 FromHwnd 调用中。在 Windows API 中,HWND 是一个窗口句柄,其中 null 表示“无窗口”。要通过 C# 传递它,请使用 IntPtr.Zero。

【讨论】:

“在 Windows API 中,HWND 是一个窗口句柄,其中 null 表示“无窗口”。” - Windows API 中没有这样的约定。只要 HWND 参数是可选的,它就带有特定的语义。由于System.Graphics.Drawing 包装了 GDI+,它是根据 GDI 实现的,我假设这会检索代表整个屏幕的对象,尽管没有具体记录。

以上是关于System.Drawing.Graphics 中的 IntPtr.Zero 是啥意思的主要内容,如果未能解决你的问题,请参考以下文章

手记解决Graphics.DrawImage带ImageAttributes在XP报内存不足的问题

像素转换mm

从 png 文件添加剪贴画

如何解决 winforms 错误“GDI+ 中发生一般错误。”?

C# picturebox画直线 想把画出来的东西保存成图片

WPF获取屏幕缩放比例