我想在我的网站上弹出一个Vista/7-aero-glass风格的效果,它需要是动态的.我很好,这不是一个跨浏览器的效果,只要该网站仍适用于所有现代浏览器.
我的第一次尝试是使用类似的东西
#dialog_base {
background:white;
background:rgba(255,255,255,0.8);
filter:blur(4px);
-o-filter:blur(4px);
-ms-filter:blur(4px);
-moz-filter:blur(4px);
-webkit-filter:blur(4px);
}
Run Code Online (Sandbox Code Playgroud)
但是,正如我所料,这导致对话框的内容模糊,背景保持清晰.有没有办法使用CSS来模糊半透明元素的背景而不是其内容?
使用GDI +绘制各种颜色:
brush = new SolidBrush(color);
graphics.FillRectangle(brush, x, y, width, height);
Run Code Online (Sandbox Code Playgroud)
您会注意到在玻璃上没有显示不透明的颜色:
我如何在玻璃上画出纯色?
您还会注意到完全不透明的颜色会根据颜色的不同而有所不同:
有人能指出我在桌面合成器上的文档,解释了如何处理不同的颜色?
您还会注意到FillRectangle
行为与以下不同FillEllipse
:
FillEllipse
不透明的颜色会产生不透明的颜色FillRectangle
不透明的颜色部分(或完全)透明请解释非感性行为.
Alwayslearning建议我改变合成模式.来自MSDN:
CompositingMode枚举
该CompositingMode枚举指定如何呈现的颜色与背景颜色组合.此枚举由使用
Graphics::GetCompositingMode
和"图形:: SetCompositingMode"的方法图形类.Run Code Online (Sandbox Code Playgroud)CompositingModeSourceOver
指定在渲染颜色时,它与背景颜色混合.混合由要渲染的颜色的alpha分量确定.
Run Code Online (Sandbox Code Playgroud)CompositingModeSourceCopy
指定在渲染颜色时,它会覆盖背景颜色.此模式不能与TextRenderingHintClearTypeGridFit一起使用.
从描述来看CompositingModeSourceCopy
,听起来这不是我想要的选择.从它所施加的限制来看,它听起来像我想要的选项.并且通过禁用合成或透明度,它不是我想要的选项,因为它执行SourceCopy而不是SourceBlend:
幸运的是,这不是一个我必须考虑的邪恶,因为它不能解决我的实际问题.构建我的graphics
对象后,我尝试更改合成模式:
graphics = new Graphics(hDC);
graphics.SetCompositingMode(CompositingModeSourceCopy); //CompositingModeSourceCopy = 1
Run Code Online (Sandbox Code Playgroud)
结果对输出没有影响:
有关使用Qt和DWM的示例,请参阅在Windows上使用Blur Behind.替代文字http://labs.trolltech.com/blogs/wp-content/uploads/2009/09/blurbehind2.png
我想用Qt创建一个Windows Aero Glass窗口,现在它看起来像这样:
但在调用一些my_window->repaint()
我的窗口后,标签就会破碎:
但现在,如果我稍微调整窗口大小,它会重新正确重新绘制.
问题是:如何擦除窗口背景,以便小部件在干净的玻璃上绘画?
重现问题的简短代码是(Vista with Aero):
class Window(QWidget):
def __init__(self, *args):
QWidget.__init__(self, *args)
self.setLayout(QVBoxLayout())
self.layout().addWidget(QLabel("This is the text"))
# let the whole window be a glass
self.setAttribute(Qt.WA_NoSystemBackground)
from ctypes import windll, c_int, byref
windll.dwmapi.DwmExtendFrameIntoClientArea(c_int(self.winId()), byref(c_int(-1)))
def mousePressEvent(self, event):
self.repaint()
Run Code Online (Sandbox Code Playgroud)
您可以立即单击该窗口,也可以单击Alt-Tab
几次.
无论如何,使用带有Aero Glass的标签并不是我所需要的,因为QLabel不知道如何用一缕光线(如窗口的标题)来绘制自己.我需要的是清洁"玻璃"的一般方法.
在Windows 10上使用未记录的SetWindowCompositionAttribute
API,可以为窗口启用玻璃.玻璃是白色或透明的,如截图所示:
但是,Windows 10"开始"菜单和通知中心(均使用玻璃)都与强调色混合,如下所示:
它是如何做到的?
以下示例中的重点颜色为浅紫色 - 这是设置应用程序中的屏幕截图:
此示例代码中定义的AccentPolicy结构具有重音状态,标志和渐变颜色字段:
AccentPolicy = packed record
AccentState: Integer;
AccentFlags: Integer;
GradientColor: Integer;
AnimationId: Integer;
end;
Run Code Online (Sandbox Code Playgroud)
并且州可以具有以下任何值:
ACCENT_ENABLE_GRADIENT = 1;
ACCENT_ENABLE_TRANSPARENTGRADIENT = 2;
ACCENT_ENABLE_BLURBEHIND = 3;
Run Code Online (Sandbox Code Playgroud)
请注意,前两个是在这个github gist上找到的.
第三个工作正常 - 这使玻璃.其他两个,
所以这就越来越近了,它似乎是像音量控制小程序一样使用的一些弹出窗口.
这些值不能一起排序,并且GradientColor字段的值除了必须为非零之外没有任何效果.
直接在玻璃窗口上绘图会导致非常奇怪的混合.这里用红色填充客户区(ABGR格式为0x000000FF):
任何非零的alpha,例如0xAA0000FF,都不会产生任何颜色:
既不匹配"开始"菜单或通知区域的外观.
这些窗户是如何做到的?
我正在寻找学习使用Win32/GDI API的好资源,或者使用Win32 API直接绘制和绘制到玻璃表格的任何东西.
当我使用Delphi时,我将其标记为Delphi或Visual C++.您可以找到任何代码示例和文章,我们将不胜感激.MSDN文章似乎没有写到这一点.
作为一个目标,让我们想象你想要:(a)重现谷歌Chrome的功能(标签作为玻璃框架的一部分)(b)重现MS Office 2010的功能(保存在MFC上的玻璃框架上的按钮VS 2010,作为"快速访问工具栏"(见下图).
我没有使用MFC,但如果检查MFC源是一个很好的信息来源,我很想知道在MFC源或BCG原始源(我有两者)中的哪些地方实现了快速访问工具栏渲染/绘制代码.
更新:以下答案之一的相关neato链接显示NC(非客户端)Paint消息,以及如何在玻璃框架上绘制时处理它,以及此处的MSDN文章.
我正在使用Delphi XE2,我喜欢玻璃效果,我想在Windows 7平板电脑工具中"切割"玻璃.如果你也知道如何切一个按钮,如果你告诉我如何,我会很高兴.
谢谢
我正在尝试在Windows 7中的Delphi应用程序中实现Google Chrome样式选项卡.
这个元素是:
我发现我必须克服的挑战是:
我已经测试了几种解决方法,用css禁用恼人的放大镜,但是在我的iOS9流星线上构建它会出现一段时间并在几毫秒之后淡出.
它正在iOS 8上运行,但现在没有在iOS 9上使用这个css代码:
body, body * {
-webkit-user-select: none !important;
user-select: none !important;
-webkit-user-callout: none !important;
-webkit-touch-callout: none !important;
}
input, textarea {
-webkit-user-select: text !important;
user-select: text !important;
-webkit-user-callout: default !important;
-webkit-touch-callout: default !important;
}
*{
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-webkit-touch-callout: none;
-webkit-user-select: none;
-moz-user-select: none; /* Firefox all */
-ms-user-select: none; /* IE 10+ */
user-select: none;
-webkit-user-drag: none;
-webkit-user-modify: none;
}
Run Code Online (Sandbox Code Playgroud)
我错过了iOS 9的东西?
如你所见,Y!信使11使用了一些技巧来绘制一个漂亮的标题栏.它的窗口就像Win 7中的普通窗口一样,但有一个特殊的标题.这是一个玻璃框架吗?我该如何创建一个这样的?
我认为有一个自定义的窗口样式Windows 7
.像这样 :
正如您所看到的,它与普通风格不同:
如何创建一个具有您在第一张图片中可以看到的样式的窗口?
aero-glass ×10
delphi ×5
dwm ×4
aero ×2
css ×2
windows-7 ×2
caption ×1
coding-style ×1
cordova ×1
draw ×1
loupe ×1
meteor ×1
popup ×1
pyqt ×1
visual-c++ ×1
winapi ×1
window ×1
windows ×1
windows-10 ×1