加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

winapi – Win32:如何使阴影荣誉非矩形分层窗口?

发布时间:2020-12-13 20:59:29 所属栏目:Windows 来源:网络整理
导读:我通过添加 WS_EX_LAYERED扩展样式创建了一个 layered window: wndClass.ExStyle = wndClass.ExStyle | WS_EX_LAYERED; Windows将使用黑色作为色度键颜色值。我要离开一个黑色的大边框,使问题显而易见: alt text http://i45.tinypic.com/2qs002q.jpg 窗口
我通过添加 WS_EX_LAYERED扩展样式创建了一个 layered window:
wndClass.ExStyle = wndClass.ExStyle | WS_EX_LAYERED;

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

alt text http://i45.tinypic.com/2qs002q.jpg

窗口建成后,我告诉use black as a chroma-key color:

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

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

alt text http://i48.tinypic.com/2cfta3o.jpg

问题是最后一步。我想使用CS_DROPSHADOW类风格,从Windows XP开始,可以创建一个阴影:

wndClass.Style = wndClass.Style | CS_DROPSHADOW;

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

http://i49.tinypic.com/23lnnu9.jpg

有没有人知道我会错过什么神奇的选择,将使阴影荣耀非矩形分层窗口?

出现这个问题的另一个例子是当你不包括6px padding / margin。 Windows?主题绘制的提示窗口是非矩形的。这留下了一个小的可见的间隙,窗口是透明的,但是阴影没有出现:

alt text http://i47.tinypic.com/30arsxk.png

Microsoft已经设法使其工作,从Internet Explorer的这个提示可以看出:

alt text http://i46.tinypic.com/f104cj.jpg

看一下Windows工具提示类提示窗口。使用SpyXX – 我可以得到它的窗口和类样式:

http://i49.tinypic.com/f4pued.jpg

SpyXX说:

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

所以一切都指向窗口本身就是104×20像素,窗外本身就有阴影。 (与CS_DROPSHADOW一致)

接下来我可以看一下工具提示窗口类的样式:

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_DROPSHADOW(0x20000)。所以现在我想知道如何画出自己的窗口?

注意:透明分层窗口被记录为区域的首选技术。

编辑:Windows 2000中已分层Windows。CS_DropShadow已添加到XP。

Transparent layered windows is documented as the preferred technique over regions.

不过CS_DROPSHADOW确实注意地区。如果您使用区域裁剪或以其他方式塑造您的窗口,则阴影将遵循新轮廓。

幸运的是,您可以使用具有分层窗口的区域,并通过组合二者获得您要查找的效果。

BTW:tooltips_class32确实使用CS_DROPSHADOW – 您不会在窗口样式中看到它,因为它是一个类样式,而不是窗口样式。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读