当前位置: 首页 > 知识库问答 >
问题:

使用Areo捕捉、阴影、最小化动画和抖动的无边界窗口

强才捷
2023-03-14

我正在制作一个在Windows上具有无边界窗口的应用程序。然而,由于窗口是无边界的,我没有areo阴影、捕捉、最小化动画或抖动。我环顾四周,没有找到解释如何实现这一点的网站。然而,我知道这是可能的,因为Office 2013、Visual Studio 2012和Steam都具有这些功能,并且没有边界。我专门使用QT和C,但如果您已经为另一个窗口库解决了这个问题,我也想听听您的解决方案。任何一个我所说的areo阴影并不是指在两侧放置阴影,我指的是所有活动的本机areo windows应用程序的所有侧面上的发光阴影。

共有3个答案

都才俊
2023-03-14

我已经创建了一个响应为photoshop。

现代图形用户界面

国盛
2023-03-14

感谢melak47的回答。

对于那些正在寻找C/Qt示例的人来说,这个GitHub profect基于melak47代码完成了这项工作,非常有魅力(感谢deimos1877)!https://github.com/deimos1877/BorderlessWindow

请确保使用visual studio编译器(

司空胤
2023-03-14

在使用Spy检查Steam的窗口(它的窗口样式,它如何回复窗口消息)并尝试匹配它所做的一切之后,结合来自这个C#无边界窗口行为的DWMAPI调用,我相信我弄清楚了。

要隐藏窗口的边框,请在WindowProc中处理WM_NCCALCSIZE消息:

case WM_NCCALCSIZE: {
    if (window->is_borderless) {
        return 0;
    } else {
        return DefWindowProc(hwnd, msg, wparam, lparam);
    }
}

要启用阴影,您需要做的就是:

MARGINS borderless = {1,1,1,1};
DwmExtendFrameIntoClientArea(hwnd, &borderless);

要将其关闭,请恢复默认的边距窗口={0,0,0,0} 。可能会抛出一个设置窗口pos(hwnd,0,0,0,0,0,SWP\u NOZORDER | SWP\u NOOWNERZORDER | SWP\u NOACTIVATE | SWP\u FRAMECHANGED | SWP\u ASYNCWINDOWPOS | SWP\u NOSIZE | SWP\u NOMOVE) 同时,确保重新绘制帧。

但是,这似乎并不适用于所有窗口样式,显然您的窗口样式不能包含标题栏。 标题栏工作正常,添加一个似乎可以启用最小化动画。

我使用的阴影最简单的窗口样式是WS\u POPUP | WS\u THICKFRAME,也可以获得aero snap、Maximize、minimize和我使用的平滑最小化动画。

更改DWMWA_NCRENDERING_POLICYDWMWA_ALLOW_NCPAINT通过DwmSetWindowAtcm似乎不是必需的,默认设置似乎可以工作。

需要注意的是:DwmExtendFrameIntoClientArea完全按照其名称进行操作,因此,如果您使用alpha通道将图像直接绘制到客户端区域(例如使用opengl、direct3d/2d),则可以通过它看到一个小帧:

因此,您可能需要在透明元素后面放置一个不透明的小部件、笔刷或其他东西。

如果一切顺利,它应该是这样的:

这是一个小示例项目,F11切换无边界/窗口模式,F12切换无边界阴影的开和关。

 类似资料:
  • 最近,我(主要出于好奇)制作了一个无边界表单。在制作了我自己的标题栏后,它包括标题和三个按钮(最小化、最大化和关闭),就像每个普通的Windows程序一样。我还为这些按钮编写了代码(只要问一下你是否想看到代码)。 但是,我注意到没有动画。我的意思是,例如,如果我单击最小化按钮,没有动画,程序立即消失(它不关闭,按钮工作,但没有动画)。这种情况在所有情况下都会发生:当我打开程序时,它会立即出现,当我

  • 问题内容: 用jQuery 动画 box-shadow 属性的正确语法是哪一种? 问题答案: 直接回答 使用埃德温·马丁的 jQuery插件影子动画,它扩展了方法,你可以简单地使用正常的语法与“boxShadow”的每一个方面- 颜色 ,在 x轴和y偏移 时, 模糊半径_和 _传播半径 -变得活跃起来。它包括多个阴影支持。 改用CSS动画 jQuery通过更改DOM元素的属性进行动画处理,这可能会

  • 我想将阴影视图设置为某些坐标(目标视图)的动画。 我在用D 我不想从源位置动画视图,但想从DROP位置做。 我尝试了很多方法,但都无效。我如何才能访问?这也不起作用: 我认为应该可以做到这一点,但我需要在D期间访问“阴影”视图

  • 我使用JavaSelenium项目进行网页自动化。网页包含了许多多级的影子根DOM元素,我无法使用selenium方法与它们交互。 深度css(不适用于最新的chrome浏览器) 执行人。(这真的很乏味,维护起来也很复杂) 如果你知道除了上面列出的任何其他解决方案,我可以在SeleniumJava框架中实现,请传递解决方案。提前感谢!。

  • 本文向大家介绍使用 electron 实现类似新版 QQ 的登录界面效果(阴影、背景动画、窗体3D翻转),包括了使用 electron 实现类似新版 QQ 的登录界面效果(阴影、背景动画、窗体3D翻转)的使用技巧和注意事项,需要的朋友参考一下 现在什么都讲究追赶潮流,觉得 QQ 登录窗口做的效果不错,既然刚学习 electron ,那么就用 electron 模仿一下。其实主要用到的就是 CSS3

  • 问题内容: 他们是否是使特定窗口在Linux上无边界的标准方法?我相信窗口边框是由您的窗口管理器绘制的,所以可能我只需要使用一个特定的窗口管理器(可以找到,我只需要知道哪个窗口管理器即可)…我希望是所有的窗口管理器都可能遵循一些标准,使我能够以编程方式执行此操作… 问题答案: 使用Xlib和old : 这些天NETWM / EWMH提示是首选,但据我所知,所有现代的窗口管理器还支持这一点。