![]() |
1
5
当然也有例外,但一般来说,每次打电话都可能会收到不同的DC
您还可以获得主题更改之类的通知。这些不会改变图形模式——它们是一个更高级别的概念——因此缓存的位图应该仍然与您获得的任何DC兼容。但是如果你想在主题改变时改变位图,你可以监听
|
![]() |
2
6
这样做的目的是为类中的每个窗口分配唯一的设备上下文。 编辑 从链接的MSDN文章:
也许这个例子可以更好地说明CS_OWNDC的使用:
不 如果其他一切都失败了 reconstruct CachedBitmap。 是 朝着更好的解决方案迈出了一步。 编辑 在使用CS_OWNDC标志进行屏幕分辨率/位深度变化测试期间,示例程序似乎保留了相同的DC,但是,当该标志被移除时,DC不同(窗口7 64位Ultimate)( 应该 编辑2 本例不调用getUpdate来检查在WM_绘制期间是否需要绘制窗口。这是一个错误。 |
![]() |
3
2
完成后只需释放DC(或EndPaint)。在Windows3.1时代,设备上下文是一种有限的或非常昂贵的系统资源,因此鼓励应用程序永远不要保留它们,而是从GetDC缓存中检索它们。现在,在创建窗口时创建dc并在窗口的生命周期中缓存它是完全可以接受的。
唯一的“问题”是,在处理
然而,我不明白您试图用gdiplus实现什么。通常,如果一个对象是。。。长时间选入dc后,该dc是内存dc,而不是窗口dc。 每次调用GetDC时,您都会得到一个新的HDC,它表示一个具有自己状态的不同设备上下文。因此,在一个DC上设置的对象、背景颜色、文本模式等不会影响通过对GetDC或BeginPaint的不同调用检索到的另一个DC的状态。 系统无法随机使客户端检索到的HDC无效,并且实际上在后台做了大量工作,以确保在显示模式切换之前检索到的HDC继续工作。即使更改位深度,这在技术上使dc不兼容,也不会以任何方式阻止应用程序继续使用hdc到blit。 这就是说,明智的做法是至少观察WM_DISPLAYCHANGE,释放任何缓存的DC和设备位图,然后重新创建它们。 |
![]() |
Community wiki · 需要改变的用户界面模式? 1 年前 |
![]() |
LITzman · 使用状态处理颜色主题更改 1 年前 |
![]() |
Community wiki · 进程。退出(0):输出消失? 1 年前 |
![]() |
arsaces · 将文本添加到特定文件的末尾 2 年前 |
![]() |
YGranja · 库<图形。h> MinGW-W64缺少 2 年前 |
![]() |
Felipe Palermo · Ctrl键仍被按下,按键事件() 2 年前 |
![]() |
HCJ · win cmd中的批处理脚本循环 2 年前 |