作为一个宠物项目,我一直在玩将Aero Glass效果集成到我的SWT应用程序中的概念.
Łukasz Milewski has an excellent blog post解释了如何实现这一点,这几乎归结为:
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();
}
}
这很好用,直到你想添加一个控件.这导致黑色保持透明:
A follow-up post也演示了如何执行此操作,但需要修改SWT库. (至少,我相信,因为私有SWT函数被@Override覆盖.)
如何避免控制变得透明?更好的是:我如何从透明度中受益(例如在其上放置图像like so),但是以合理的方式使用它?