首页 >后端开发 >C++ >Qt/C 应用程序如何通过 Aero Snap、阴影和动画实现无边框窗口?

Qt/C 应用程序如何通过 Aero Snap、阴影和动画实现无边框窗口?

Linda Hamilton
Linda Hamilton原创
2024-10-26 01:53:02898浏览

How Can Qt/C   Applications Achieve Borderless Windows with Aero Snap, Shadow, and Animations?

在 Qt/C 中使用 Areo Snap、阴影和动画创建无边框窗口

在 Windows 中,无边框窗口需要妥协: Aero 阴影、捕捉和最小化动画等功能的丢失。但是,通过利用 Windows API,可以复制 Office 2013 和 Steam 等应用程序中的无缝体验。

隐藏边框

要隐藏窗口边框,请拦截窗口过程中的 WM_NCCALCSIZE 消息。

<code class="cpp">case WM_NCCALCSIZE: {
    if (window->is_borderless) {
        return 0;
    } else {
        return DefWindowProc(hwnd, msg, wparam, lparam);
    }
}</code>

启用 Aero Shadow

要在窗口周围显示发光阴影,请使用 DwmExtendFrameIntoClientArea 函数。

<code class="cpp">MARGINS borderless = {1,1,1,1};
DwmExtendFrameIntoClientArea(hwnd, &borderless);</code>

启用附加功能

观察像 Steam 这样的无边框窗口的行为,我们可以确定阴影在窗口样式 WS_POPUP | 下效果最好。 WS_THICKFRAME | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CAPTION。此样式还支持 Aero 捕捉、最大化和平滑最小化动画。

附加说明

  • 通过客户区域中的透明元素可以看到阴影,需要在后面有不透明的小部件或画笔。
  • 通常不需要 DwmSetWindowAttribute 中的 DWMWA_NCRENDERING_POLICY 和 DWMWA_ALLOW_NCPAINT 值。

示例项目

要进行实际演示,请下载提供的示例项目。按 F11 在无边框和窗口模式之间切换,而 F12 则激活或停用无边框阴影。

以上是Qt/C 应用程序如何通过 Aero Snap、阴影和动画实现无边框窗口?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn