我已经创建了一个分层窗口中的所述 WS_EX_LAYERED 扩展样式:

wndClass.ExStyle = wndClass.ExStyle | WS_EX_LAYERED;

Windows将使用黑色作为色度键颜色值。我要离开的黑色大边框,使明显的问题:

“替代文字”


被构造的窗口

后,我告诉它使用黑色作为色度键颜色

SetLayeredWindowAttributes(hwnd, 0x00000000, 255, LWA_COLORKEY);

现在弹出分层窗口出现部分透明的:

“替代文字”


问题是最后一步。我想使用 CS_DROPSHADOW 类样式,可用因为Windows XP中,创建一个下拉阴影:

wndClass.Style = wndClass.Style | CS_DROPSHADOW;

出现阴影,但阴影围绕原始矩形窗口,并且不考虑由分层窗口提供的窗口的透明度:

有谁知道神奇的选项我在什么地方错过,这将使阴影兑现非矩形分层窗口?


的出现这个问题,即另一个例子是当不包括在6像素填充/余量。如从Windows®主题绘制的提示窗口非矩形。这留下一个小的可见间隙,其中窗口是透明的,但阴影不会出现:

“替代文字”

微软已设法使其工作,因为你可以从Internet Explorer,这提示看:

“替代文字”


寻找在一个Windows tooltips类提示窗口更接近。使用 SpyXX - 我能得到它的窗口RECT和类样式:

SpyXX表示:

Rectangle:     (440, 229)-(544, 249), 104x20
Restored Rect: (440, 229)-(544, 249), 104x20
Client Rect:   (0, 0)-(104, 20), 104x20

所以一切点,窗口本身是104x20像素,与该窗口本身外的阴影。 (这与CS_DROPSHADOW一致。)

接下来,我可以看一下样式的tooltips窗口类的:

Windows Styles:     94000001

    WS_POPUP        80000000
    WS_VISIBLE      10000000
    WS_CLIPSIBLINGS  4000000
    TTS_ALWAYSTIP          1

Extended Styles:    00080088

    WS_EX_LAYERED      80000
    WS_EX_TOOLWIN         80
    WS_EX_TOPMOST          8

有趣的是,它不使用 CS_SAVEBITS 0x800);这对小的,短暂的,窗是有用的。

也不使用CS_DROPSHADOW0x20000)。所以,现在我不知道怎么回事了自己的窗外拉?

注意:透明分层窗口被记录为在区域中的优选的技术

编辑:分层窗口已经出现在Windows 2000与XP添加CS_DropShadow

有帮助吗?

解决方案

  

透明分层窗口被记录为在区域中的优选的技术。

然而,CS_DROPSHADOW的关注区域。如果您裁剪或以其它方式使用区域塑造你的窗口,下拉式阴影将遵循新大纲。

幸运的是,你的可以的有分层的窗口,并通过结合两个用地区得到你要寻找的效果。

BTW:tooltips_class32的的使用CS_DROPSHADOW - 你不会看到它的窗口风格,因为它是一个类的风格,而不是一个窗口样式

其他提示

你为什么不使用LWA_ALPHA和构建阴影到图像?

编辑在向效应初探您的评论:

A)使用α不停止你引导PNG仅一个阴影。 BLT的2个图像一起并且作为一个单一的图像使用。结果 B)它不是很难产生阴影。在图像,你公布了3个不同的α值黑色。结果 C),但它不工作,不是吗?即时间得到创造性。结果 d)那就不要试图让窗口做一些事情也不会为你做。结果 E)是完全不相干的。分层的窗口搞定你。点击

我强烈建议您了解更多有关分层的窗口,因为他们可以帮你你的目标。

EDIT2:你的位图。它很容易扫描整个图像,并发现该位将是色彩键控(通过识别黑色自己)和母鸡修改有0的阿尔法这里一切将有255(不阿尔法:您可能需要转换图像从一个较低的颜色格式的32位图像,你可以通过创建一个新的DC和复制图像)做到这一点。这会给你LWA_ALPHA与LWA_COLORKEY同样的效果。从那里它相当容易在边缘处,以识别所述像素,其中的颜色变化到(R = 0,G = 0,B = 0,A = 0)。然后,改变第一像素以具有192正α,它的一个打击128和一个下面〜64现在具有图像下方的alpha'd灰度,将看起来像的阴影。您可以调整阿尔法得到你想要的效果。

CS_DROPSHADOW只适用于标准的矩形窗口。 WS_EX_LAYERED窗口不支持一切。他们是一个比较低的水平,自助方法来绘制正是你想要的。

要得到一个阴影,你将有机会从图像中的alpha通道的下拉式隐藏你自己。

scroll top