代码之家  ›  专栏  ›  技术社区  ›  Paul Lammertsma

结合航空玻璃效果和SWT

  •  6
  • Paul Lammertsma  · 技术社区  · 14 年前

    作为一个宠物项目,我一直在玩将空气玻璃效果集成到我的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();
        }
    }
    

    在您想要添加控件之前,这项工作非常出色。这将导致黑色保持透明:

    Transparent shell with control

    A follow-up post @Override .)

    如何避免控件变得透明?更妙的是:如何从透明度中获益(例如,在其上放置图像) like so ),但用一种明智的方式?

    3 回复  |  直到 14 年前
        1
  •  2
  •   the.duckman    14 年前

    重写的方法是“package private”。为了在没有编译时错误的情况下重写它们,您必须将类与超级类放在同一个包中,即。 org.eclipse.swt org.eclipse.swt.widgets 包裹。你引用的博客文章实际上在最后提到了这个实现细节,所以我不知道,这真的回答了你的问题。

        2
  •  0
  •   Vladimir    14 年前

    将控件放置在玻璃区域之外,或尝试对控件使用强制背景色。

        3
  •  0
  •   TK Gospodinov    14 年前

    推荐文章