对于没有标题栏的Shell,默认是不支持鼠标拖动位置的。不过要想让它支持也是很简单的。如下:
final Point p = new Point(-1, -1);
Listener l = new Listener() {
public void handleEvent(Event arg0) {
switch (arg0.type) {
case SWT.MouseDown:
p.x = arg0.x;
p.y = arg0.y;
break;
case SWT.MouseMove:
if (p.x == -1) {
break;
}
Point point = shell.toDisplay(arg0.x, arg0.y);
shell.setLocation(point.x - p.x, point.y - p.y);
break;
case SWT.MouseUp:
p.x = -1;
p.y = -1;
break;
default:
break;
}
}
};
shell.addListener(SWT.MouseDown, l);
shell.addListener(SWT.MouseMove, l);
shell.addListener(SWT.MouseUp, l);
这其实做了以下几件事:
1。在鼠标按下时,记住鼠标的相对位置
2。在鼠标是按下状态,移动时,获取新的鼠标位置,与相对位置做计算后,设置新的窗口位置
3。最后释放