我正在尝试在客户区构建一个带有玻璃效果的漂亮 GUI。
所以我按照这里的描述实现了它。
我成功了,并且有漂亮的玻璃框架,但只要窗户没有最大化。当我最大化窗口时,它只是黑色:-(
通过一些谷歌搜索和实验,我发现,当我使窗口无效以响应WM_WINDOWPOSCHANGING
这样的情况时:
case WM_WINDOWPOSCHANGING: {
WINDOWPOS* pWindowPos = (WINDOWPOS*)lParam;
if (pWindowPos->flags & SWP_FRAMECHANGED) {
InvalidateRect(hWnd, NULL, TRUE);
}
}
当我最大化窗口时,我也会得到玻璃效果。
现在奇怪的是,这只有在我双击标题栏或窗口右上角的最大化按钮时才有效。但是,如果我将窗口移动到屏幕顶部,让它在那里捕捉以最大化窗口(Aero Snap),窗口就会变成黑色。
有谁知道这是如何正确完成的?
(我正在 Windows 7 64 位下开发。)
编辑:
我还应该提到我想删除标准标题栏,我通过返回0
响应WM_NCCALCSIZE
消息来做到这一点。没有这个,一切正常。
编辑:
在另一个基本相同的系统上进行的测试是成功的。唯一显着的区别是有另一个显卡,AMD Radeon HD 4300 而不是 AMD Radeon HD 5870。这可能是显卡驱动程序的问题吗?