作为一个个人项目,我一直在探索将Aero Glass效果整合到我的SWT应用程序中的概念。Łukasz Milewski有一篇优秀的博客文章,解释了如何实现这一点,基本上归结为以下内容:
这个很好用,但是如果你想添加一个控件就会出现问题,会导致黑色保持透明状态:
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();
}
}
这个很好用,但是如果你想添加一个控件就会出现问题,会导致黑色保持透明状态:
一篇后续文章也展示了如何实现这一点,但需要修改SWT库。(至少我认为是这样,因为私有的SWT函数被@Override
覆盖。)
如何避免控件变得透明?更好的做法是:如何受益于透明度(例如,像这样放置图像),但以明智的方式使用它?
callWindowProc()
中设置一些常量和额外的情况,我才能让OpaqueText
确实显示不透明文本。我将在明天早上更新我的问题并附上我的当前代码。 - Paul Lammertsma