我通过添加WS_EX_LAYERED扩展样式创建了一个分层窗口:
wndClass.ExStyle = wndClass.ExStyle | WS_EX_LAYERED;
Run Code Online (Sandbox Code Playgroud)
Windows将使用黑色作为色度键颜色值.我要留下一个黑色的大边框,以使问题显而易见:
替代文字http://i45.tinypic.com/2qs002q.jpg
构建窗口后,我告诉它使用黑色作为色度键颜色:
SetLayeredWindowAttributes(hwnd, 0x00000000, 255, LWA_COLORKEY);
Run Code Online (Sandbox Code Playgroud)
现在,弹出分层窗口显示为部分透明:
替代文字http://i48.tinypic.com/2cfta3o.jpg
问题是最后一步.我想使用自Windows XP以来可用的CS_DROPSHADOW类样式来创建一个阴影:
wndClass.Style = wndClass.Style | CS_DROPSHADOW;
Run Code Online (Sandbox Code Playgroud)
出现阴影,但阴影围绕原始矩形窗口,并没有考虑分层窗口提供的窗口透明度:
http://i49.tinypic.com/23lnnu9.jpg
有谁知道我错过了什么神奇的选项,将使投影荣耀非矩形分层窗口?
出现此问题的另一个示例是当您不包含6px填充/边距时.由Windows®主题绘制的提示窗口是非矩形的.这会留下一个小的可见间隙,窗口是透明的,但不会出现阴影:
替代文字http://i47.tinypic.com/30arsxk.png
正如您从Internet Explorer的提示中看到的那样,Microsoft已设法使其正常工作:
替代文字http://i46.tinypic.com/f104cj.jpg
仔细观察Windows tooltips类提示窗口.使用SpyXX - 我可以得到它的窗口rect和类样式:
http://i49.tinypic.com/f4pued.jpg
SpyXX说:
Rectangle: (440, 229)-(544, 249), 104x20
Restored Rect: (440, 229)-(544, 249), 104x20
Client Rect: (0, 0)-(104, 20), 104x20
Run Code Online (Sandbox Code Playgroud)
所以一切都指向窗口本身是104x20像素,窗口本身外面有阴影.(这符合CS_DROPSHADOW.)
接下来我可以看一下tooltips窗口类的样式:
Windows Styles: 94000001
WS_POPUP 80000000
WS_VISIBLE 10000000
WS_CLIPSIBLINGS 4000000
TTS_ALWAYSTIP 1 …Run Code Online (Sandbox Code Playgroud)