【问题标题】:OwnerDraw with WS_EX_COMPOSITED under XPXP 下使用 WS_EX_COMPOSITED 绘制 OwnerDraw
【发布时间】:2013-01-31 03:32:28
【问题描述】:

我有一个静态控件,它在装箱时具有SS_OWNERDRAWSS_NOTIFY 标志。它的父窗口有WS_EX_COMPOSITED 标志。

在Windows XP下,绘制不正确,如下图所示(右上角的矩形):

但是在Windows 7下,它是正确绘制的,如下图所示(右上方的十字“X”):

如何在 XP 中解决这个问题?此外,是什么导致了这个问题(在 XP 中)?

【问题讨论】:

  • 张贴自绘码。这可能是一个 alpha 通道事故。

标签: c++ winapi doublebuffered ownerdrawn


【解决方案1】:

CreateWindowEx() 的 MSDN 是这样说的:

设置 WS_EX_COMPOSITED 后,窗口的所有后代都将获得 使用双缓冲的自下而上的绘画顺序。自下而上 绘画顺序允许后代窗口具有半透明(alpha) 和透明度(颜色键)效果,但前提是后代 窗口也设置了 WS_EX_TRANSPARENT 位。双缓冲允许 要绘制的窗口及其后代不会闪烁。

即子STATIC 控件应该设置WS_EX_TRANSPARENT

【讨论】:

  • 我尝试使用 WS_EX_TRANSPARENT,但在 XP 中,它会绘制任何内容,即“没有十字符号,没有黑色矩形,只有一个静态背景”
  • 但是在Windows 7或8中,没有问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-30
相关资源
最近更新 更多