繁体   English   中英

正确使用 Win32 设备上下文

[英]Proper use of Win32 Device Context

我已经与 GDI 合作了一段时间,我正在努力提高我对它的理解,以便能够为它创建一个包装类。

  1. 为什么在应用程序结束之前我不能保持窗口设备上下文? 它是否会因任何事件而失效? 我听到有人说 WM_SIZE 后上下文无效,这是真的吗? 即使我总是缓存窗口上下文,我也从未经历过这种情况。 这使得在构造函数中 createCompatibleDC()s 和 createCompatibleBitmaps()s 变得更加容易。 我还缓存这些创建的 DC 并使用它们来避免闪烁,对于局部边界绘制,缓存绘制操作,以防窗口最小化然后最大化。

  2. 为什么应用程序一次会获取 1 个以上的窗口上下文? 由于文档抱怨用完窗口上下文限制。

请记住,在您谈论的上下文中,“无效”意味着需要重新绘制窗口的某些部分,这并不意味着从 GetDC 检索到的句柄将无法使用。

具有 CS_HREDRAW 或 CS_VREDRAW 的窗口将需要在指示方向上的任何调整大小以及任何增加窗口大小的调整大小操作上至少部分重绘。

由于 GDI 对象数量的限制,正常模式是处理 WM_PAINT 消息并使用由 BeginPaint 返回的句柄(只有在不调用 EndPaint 时才会保持可用)。

并且正如一些程序员在评论中所说的那样,可以使用第二个 DC 进行无闪烁绘图,耗时的绘图是在屏幕外 DC 上完成,然后简单地复制到屏幕 DC 上。 即使这完全在 WM_PAINT 处理程序中完成,一旦绘图操作完成,屏幕外 DC 通常会被释放,以免占用 GDI 资源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM