【问题标题】:Cleaning up after calling GetSystemMenu()调用 GetSystemMenu() 后进行清理
【发布时间】:2010-01-05 01:58:41
【问题描述】:

我正在使用Florian's wrapper class 调用GetSystemMenu() 将自定义菜单项添加到应用程序的系统菜单中。

我只是好奇是否需要对调用 GetSystemMenu 或其他菜单项返回的句柄进行任何清理。我没有看到任何提到需要调用 CloseHandle() 或类似的东西,所以我目前的假设是不需要这样做。

【问题讨论】:

    标签: .net windows winapi


    【解决方案1】:

    您不必担心。

    查看 MSDN 文档以获取 DestroyMenu

    当应用程序关闭时,分配给窗口的菜单会自动销毁。

    一般来说,当窗体关闭时,Windows 应该销毁菜单,这反过来又会销毁您的自定义菜单项。

    【讨论】:

      【解决方案2】:

      我看过包装纸,我的直觉是这样的:

      SystemMenu.cs 中使用的句柄让我怀疑......

      私有 IntPtr m_SysMenu = IntPtr.Zero; // 处理系统菜单

      那个句柄,代码中没有任何地方被显式关闭或释放......这让我认为代码中应该有一个 IDisposable 实现来关闭/释放句柄......

      你怎么看?

      希望这会有所帮助, 最好的祝福, 汤姆。

      【讨论】:

      • 很抱歉学究和挑剔......但不得不发表我的想法。
      • 见里德的回答。它可能在 DefWindowProc 处理 WM_NCDESTROY 时被删除。
      • @Michael:谢谢...但是您能否在 .NET 方面澄清 DefWindowProc...或者您的意思是 WndProc? (控件中常见的受保护的覆盖方法)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-24
      • 1970-01-01
      相关资源
      最近更新 更多