【问题标题】:Graphics.FromHwnd(IntPtr.Zero) returns null, why?Graphics.FromHwnd(IntPtr.Zero) 返回 null,为什么?
【发布时间】:2010-10-12 09:02:49
【问题描述】:

我目前正在调查我的应用程序中的第 3 方组件 (DevExpress) 的问题。 我的问题与DevExpress KB article 非常相似。我得到相同的异常,但堆栈跟踪更少。 所以我使用 .NET Reflector 来找出在这种情况下可能为 null 的对象,唯一可以为 null 的对象是 Graphics。 这是使用 Graphics.FromHwnd(IntPtr.Zero) 创建的。因为我对 GDI 没有广泛的了解,所以我想知道是否有人可以告诉我这可能返回 null 的可能场景...

我试图在 Windows 超出 GDI 句柄的情况下重现它,但随后我得到一个“超出句柄”的情况 - 至少有一次异常,这不是我正在调查的问题的情况

tia, 马丁

【问题讨论】:

  • 你到底想做什么?画到桌面?捕获桌面?什么?
  • 不,对 Graphics.FromHwnd 的调用深埋在 DevExpress 代码中,我试图找出我可能做错了什么,以便该调用返回 null。后来 DevExpress 控件依赖于该对象,因此发生 NullReferenceException。

标签: .net winforms gdi devexpress


【解决方案1】:

据我回忆,HWND 为 0(实际上是 IntPtr.Zero)是当前用户会话桌面的句柄。它可以用来衡量系统的各种指标,它应该是Graphics.FromHwnd的有效值。

但是,GDI+ 漏洞百出,与它的 .NET 集成非常不稳定,您的代码或 DevExpress 很可能没有任何问题,只是使用 GDI+。

【讨论】:

    【解决方案2】:

    首先,您正在使用IntPtr 结构并将其初始化为零。然后将此句柄传递给 Graphics 类。除非您有一个带有handle == 0 的窗口,否则null 值正是我所期望的。

    【讨论】:

      猜你喜欢
      • 2019-12-17
      • 2022-12-26
      • 2016-12-28
      • 2015-11-25
      • 2015-07-04
      • 2019-09-29
      • 2015-02-25
      • 2015-10-21
      • 2021-08-12
      相关资源
      最近更新 更多