【问题标题】:How to handle GDI resources如何处理 GDI 资源
【发布时间】:2011-05-05 14:34:34
【问题描述】:

有人知道关于 GDI 资源处理的好文档/文章吗?

我需要在具有不同生命周期的类之间共享一些资源,如图标和位图,我想了解我应该如何解决这个问题。

对于互斥体和其他内核对象,有一个 DuplicateHandle 函数,但 GDI 让我有点困惑。另外,CBitmap 通过 const operator HBITMAP 返回 HBITMAP 之类的方式,有点吓人。

我想避免在每次重绘时创建本地位图,所以一些资源缓存会很好,但我不确定我是否可以在主消息泵还没有的情况下开始创建和加载 C##### 资源开始运行了。

似乎我使用了错误的关键字,因为我找不到任何好的但易于管理的简短文档。

【问题讨论】:

    标签: winapi mfc gdi


    【解决方案1】:

    没有这样的文档,一切都非常简单。何时调用 DeleteObject() 完全由您决定。并决定如何平衡程序的资源使用与在需要时动态创建和销毁对象。只有较大的位图才真正值得保留。钢笔和画笔非常便宜,您可以即时创建和销毁它们。字体是一种极端情况,通常只是为了程序的运行而缓存,因为您需要的字体很少。

    有很多方法可以管理缓存,例如 C++ 中的 shared_ptr 提供了标准的引用计数模式。但是将引用保留为窗口包装类的成员是非常典型的。在多个窗口中使用同一个位图并不常见。嗯嗯。

    创建 GDI 对象不需要消息循环。

    【讨论】:

      猜你喜欢
      • 2011-12-23
      • 1970-01-01
      • 2016-02-03
      • 1970-01-01
      • 2014-02-10
      • 2019-10-02
      • 1970-01-01
      • 2013-03-13
      • 1970-01-01
      相关资源
      最近更新 更多