有关如何使用SWT获取系统托盘(托盘)或项目(TrayItem)的位置的任何想法?从显示器获取界限只会给我整个屏幕的界限。即
item.getDisplay().getBounds();
会在我的Windows框上给我(0,0,1024,1024)。
我还想知道系统托盘位置(左,右,顶部,底部)是否可以根据位置猜测。 这就是我可以在系统托盘附近弹出消息。
这是此post的副本,但我想提供赏金(并控制我认为正确的答案)。
答案 0 :(得分:2)
如果您只想在托盘项目附近显示对用户事件做出反应的shell(就我的情况而定)。通过托盘项触发事件时,您可以获取指针位置:
trayItem.addSelectionListener (new SelectionListener () {
@Override public void widgetDefaultSelected (SelectionEvent aEvent) {
widgetSelected (aEvent);
}
@Override public void widgetSelected (SelectionEvent aEvent) {
if (mWindow.isVisible ()) {
Shell wnd = mWindow;
mWindow = new Shell (mDisplay);
wnd.close ();
}
else {
mWindow.setLocation (mDisplay.getCursorLocation ());
mWindow.open ();
}
}
});
您可以找到整个源代码here。
如果你想通知其他一些事件(不是由用户输入产生),我猜你最好的选择就是使用SandT在上一个答案中指出的工具提示。
祝你好运!!!答案 1 :(得分:1)
widget.getDisplay()
始终返回用于指定窗口小部件的显示,因此永远不会有效。
就我所看到的Win32和MacOS而言,你不会在项目本身的第一个鼠标事件之前得到位置; - (
如果您愿意添加一些与体系结构相关的代码,可以尝试以下代码......
对于MacOS - 虽然没有经过测试:
TrayItem
(请记得覆盖checkSubClass()
)getLocation()
返回商品的当前位置对于Win32 - 再次未经测试 - 您可以尝试相同但这次覆盖messageProc(...)
。第一条消息之一将允许您查询句柄的当前位置...
答案 2 :(得分:0)
从API猜测,看起来没有这样的选项(与例如ToolItem
相反)。 :(
答案 3 :(得分:0)
您可以使用Display.map从一个坐标系映射到另一个坐标系。您可以通过执行以下操作将项目的0,0(左上角)映射到显示坐标:
Display.map(item, null, 0, 0)
使用null作为“to”控件以映射到Display坐标空间。
答案 4 :(得分:0)
感谢那些试图回答的人。然而,和其他post一样,我认为这是不可能的,所以我在否定地回答我自己的问题:(