2016-04-18 13 views
0

Ich möchte Overlay über mehrere Monitore zeichnen, sollte es jede Taskleiste abdecken, im Grunde jedes Element. Ich benutze SWT in Version 4.5.2.Zeichnen Overlay über mehrere Monitore

Was habe ich bisher gemacht?

shell = new Shell(display.getActiveShell(), SWT.ON_TOP | SWT.DOUBLE_BUFFERED); 
shell.setBounds(display.getBounds()); 

Diese Lösung funktioniert perfekt auf meinem Debian (Stretch). Es gibt Probleme mit Windows, ich habe Windows 10 getestet und es zeichnet Overlay aber Taskleisten sind auf der Oberseite.

Ich denke über N getrennte Schalen mit aktiviertem Vollbild auf N Monitoren, aber ich denke nicht, dass es möglich ist, Vollbild auf mehr als einer Schale zu aktivieren.

Hat jemand eine Idee? Vielleicht sollte ich versuchen, eine andere Bibliothek zu benutzen?

Antwort

1

Gesamt spitball, aber

Rectangle rect = new Rectangle(0, 0, 0, 0); 
Stream.of(shell.getDisplay().getMonitors()).map(Monitor::getBounds).forEach(p->rect.add(p)); 
shell.setBounds(rect); 
+0

mein Problem ist nicht Grenzen von Displays, weil es Overlay zieht aber Taskleisten auf win10 deckt es:/Ich weiß nicht, ob es Beschränkung der swt oder Fenster ist, danken sowieso Sie um zu versuchen, zu helfen –

+0

'Display d = Display.getDefault(); \t \t endgültige Shell s1 = neue Shell (Display.getCurrent(), SWT.ON_TOP | SWT.DOUBLE_BUFFERED); \t \t s1.setBounds (d.getBounds()); \t \t s1.setLayout (neues FillLayout()); \t \t Schaltfläche b = neue Schaltfläche (s1, SWT.NONE); \t \t b.setText ("getBounds()"); \t \t b.addListener (SWT.Selection, e -> { \t \t \t s1.dispose(); \t \t}); \t \t s1.open(); \t \t während { \t \t \t wenn { \t \t \t \t d.sleep() (s1.isDisposed()!) (D.readAndDispatch()!); \t \t \t} \t \t} ' Dies funktioniert unter Windows 7 64-bit JRE 1.8.0_77 ausgeführt wird. Deckt den gesamten Bildschirm, Taskleiste enthalten – pretzalcoatl

+0

@pretzalcoatl OPs Original-Lösung funktioniert auch auf Windows 7. Windows 10 scheint hier das Problem zu sein. – Baz