Объединение эффектов Aero Glass и SWT

Как проект для домашних животных, я играл с концепцией интеграции эффектов Aero Glass в мое приложение SWT. Лукаш Милевски имеет отличный пост в блоге , объясняющий, как это можно сделать, что в значительной степени сводится к следующему:

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

Последующий пост также демонстрирует, как это сделать. но требует изменения библиотеки SWT. (По крайней мере, я так считаю, потому что закрытые функции SWT переопределяются с помощью @Override .)

Как избежать прозрачности элементов управления? Еще лучше: как я могу извлечь выгоду из прозрачности (например, разместить на ней изображения , например, ), но использовать ее разумным образом?

6
задан Paul Lammertsma 2 September 2010 в 13:43
поделиться