我需要获得当前最大化的shell的“未最大化”几何体。
如果我这样做
shell.setMaximized(false);
r = shell.getBounds();
...do something with r
“r”仍然是shell的最大边界。我想这是因为后来处理了对shell的“unmaximize”信号。所以问题是:如何强制系统首先处理信号并继续?
我在尝试读取边界之前尝试放置display.readAndDispatch()和/或shell.update(),但它不起作用。
提前致谢Luca。
答案 0 :(得分:0)
你可以试试这个:
shell.setMaximized(false);
Display.getCurrent().asyncExec(new Runnable() {
@Override
public void run() {
Rectangle r = shell.getBounds();
// ... do something with r
}
});
您可能还想尝试使用Shell#computeSize(SWT.DEFAULT, SWT.DEFAULT)
,看看是否有帮助。
答案 1 :(得分:0)
...好吧我解决了。
问题是OS窗口管理器可能会执行一些动画或其他东西以便最大化shell,所以我很早就开始阅读新的shell几何体。 在壳被处理的时候我也是这样做的。
所以我这样解决了。 在处理事件句柄时,我设置event.doit = false以防止在读取大小时放置我的shell。 然后我使用Timer让OS窗口管理器在读取未最大化的大小之前完成它的工作,最后我手动配置shell:
shell.setMaximized(false);
final Timer t = new Timer();
t.schedule(new TimerTask() {
@Override
public void run() {
display.asyncExec(new Runnable() {
@Override
public void run() {
t.cancel();
Rectangle r = shell.getBounds();
// ... do something with r
shell.dispose();
}
});
}
}, 1000);
好吧也许这不是最优雅的方式,但它最终会起作用。 任何更优雅的解决方案都很好! :)