作为一个宠物项目,我一直在玩将Aero Glass效果集成到我的SWT应用程序中的概念.ŁukaszMilewski有一篇很棒的博客文章,解释了如何实现这一点,这几乎归结为:
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new FormLayout());
final MARGINS margins = new MARGINS();
margins.cyTopHeight = -1;
final Composite c = new Composite(shell, SWT.NORMAL);
c.setBackground(new Color(shell.getDisplay(), new RGB(0, 0, 0)));
final FormData fd = new FormData();
fd.top = new FormAttachment(0, 0);
fd.left = new FormAttachment(0, 0);
fd.right = new FormAttachment(100, 0);
fd.bottom = new FormAttachment(100, 0);
c.setLayoutData(fd);
OS.DwmExtendFrameIntoClientArea(shell.handle, margins);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
Run Code Online (Sandbox Code Playgroud)
这很好用,直到你想添加一个控件.这导致黑色保持透明: …
我正在尝试使用DWM API在VB.NET 2010应用程序中查看Aero Glass的表单,但是正如函数调用所示,它将Frame的外观扩展到客户区,如果表单没有边框,则不会发生任何事情和形式将变得无形.那么,我可以在没有任何边框的情况下获得Aero玻璃吗?
我一直在考虑这个问题,但我认为我对Windows和wpf如何在内部工作以解决这个问题缺乏一些基本的了解.
问题是这样的:
我创建了一个窗口,可以让我在空中标题栏(如办公室)上绘制wpf控件.只要我不向窗口添加Hwndhost元素,这种方法就可以正常工作,在这种情况下,每当我调整框架大小并且HwndHost开始闪烁时(其他元素似乎正确渲染).我也尝试使用WPF Shell Integration库中的自定义框架窗口实现,结果是一样的,所以我认为这不完全是我的错.
以下代码是一个简单的可编译程序,可以重现该问题.样本在c#中,但答案不一定是.
using System;
using System.Runtime.InteropServices;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Interop;
using System.Windows.Media;
using System.Windows.Threading;
namespace DwmTest {
class Program {
[STAThread]
static void Main( ) {
var w = new CustomFrameWindow{ Content = new WindowHost() };
w.Show( );
((Border)VisualTreeHelper.GetChild( w, 0 )).Margin = new Thickness( 11, 33, 11, 11 );
Dispatcher.Run( );
}
}
public class CustomFrameWindow : Window {
const int resizeFrameWidth = 11;
const int captionHeight = 33;
public enum …
Run Code Online (Sandbox Code Playgroud) 我正试图让Aero Glass看上去JPanel
.有可能做这样的事吗?
如何添加Aero效果JFrame
- 就像这张照片?
我正在WPF中编写一个应用程序,我希望应用程序的顶部从颜色变为Aero玻璃,如Office 2010应用程序.
真的,它会在标题栏下方从玻璃到颜色逐渐消失.(我认为这可能是一种更好的描述方式).
有没有办法,并且任何教程,文章,样本都允许在运行时创建的每个新Label Control都有一个Glow,就像在Vista/7上一样?
谢谢
我正在尝试使用该方法创建一个Aero玻璃无边框和不可调整大小的 WPF窗口.但是,由于某些奇怪的原因,此窗口的玻璃颜色看起来好像窗口没有焦点.正如您在接下来的三张图片中看到的那样,带有边框的正常窗口(例如图1和图2)工作得很好并且按预期做出反应(焦点为深蓝色,失焦时为白色(=非活动)).DwmEnableBlurBehindWindow
DmwAPI
允许调整大小的无边框窗口显示相同的行为:
然而,不可调整大小的无边界窗口在它处于活动状态和非活动状态时总是看起来好像没有聚焦(如上图3所示).它总是看起来发白:
这是我如何设置玻璃样式的一些示例代码:
public MainWindow()
{
InitializeComponent();
WindowStyle = WindowStyle.None;
ResizeMode = ResizeMode.NoResize;
Height = 200;
Background = Brushes.Transparent;
Loaded += MainWindow_Loaded;
}
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
var windowInteropHelper = new WindowInteropHelper(this);
var handle = windowInteropHelper.Handle;
var mainWindowSrc = HwndSource.FromHwnd(handle);
if (mainWindowSrc != null)
if (mainWindowSrc.CompositionTarget != null)
mainWindowSrc.CompositionTarget.BackgroundColor = Color.FromArgb(0, 0, 0, 0);
var glassParams = new DwmApi.DwmBlurbehind
{
dwFlags = DwmApi.DwmBlurbehind.DWM_BB_ENABLE, …
Run Code Online (Sandbox Code Playgroud) 我尝试模拟鱼缸中的光反射、折射等,我需要水材质和玻璃材质。
实际上我没有使用水和 phong 材料作为玻璃,因为我现在还没有找到更好的,可以在这里看到测试演示:http : //ledohm.free.fr/test_webgl/
对于水,我不需要模拟波浪,这意味着我可以使用与玻璃相同的材料,但具有不同的不透明度、反射率和折射率值。
我发现这个例子似乎完美地模拟了玻璃,但我不明白如何根据我的需要调整材料。据我了解,折射是从 envMap 计算的,但我没有纹理。我只想要一堵玻璃墙,尽可能模拟反射/折射/......就像在现实中一样。我如何创建(或找到)这样的材料?
编辑1:
绿色:水全内反射
红色:玻璃反射
1:水折射
2:水+玻璃折射
3&4:消失
编辑2:
感谢本教程,我已经了解了着色器的工作原理,更具体地说是这个示例,但是,如果我理解正确,我无法使用着色器来模拟具有厚度的材质中的光,因为着色器仅适用于网格的表面,我是对的?
我正在使用Windows Server 2008 R2作为工作站,并希望启用Aero Glass进行一些软件开发.有没有办法在服务器上启用Aero Glass?
提前致谢,
NieAR