[英]SWT - how to listen for mouse events, and retrieve their absolute position?
我通过添加Filter来捕获具有Composites的shell内的鼠标事件。
目前,事件相对于复合材料定位,它们发生在那里。
如何检索MouseEvents的绝对位置? (绝对位置是显示屏左上角的0,0位置)。
parentShell.getDisplay().addFilter(SWT.MouseDown, new Listener() {
@Override
public void handleEvent(Event event) {
//do not know the absolute position here
}
});
保存了我的一天:
System.out.println("Click: " + parentShell.getDisplay().getCursorLocation());
您可以使用Control#toDisplay(int, int)
转换任何相对坐标以显示相对绝对值。
public void handleEvent(Event event) {
if (event.widget instanceof Control) {
Point absolutePos = ((Control) event.widget).toDisplay(event.x, event.y);
...
}
}
如果您收到的事件是鼠标事件,则上述操作将在您的示例中使用。 如果您手头没有鼠标事件,您也可以在任何时候使用Display#getCursorLocation()
来获得绝对鼠标位置。
我能想到的唯一方法是使用getLocation()方法来获取窗口小部件与其父级的侦听器的相对位置。 递归使用该方法,直到到达顶部合成和/或显示。 添加事件的相对坐标以获取绝对坐标。 但这只是猜测。
尝试这个:
parentShell.getDisplay().addFilter(SWT.MouseDown, new Listener() {
@Override
public void handleEvent(Event event) {
Point p = Display.getCurrent().map(null, null, event.x, event.y);
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.