问题描述
|
有什么想法如何通过SWT获取系统托盘(托盘)或项目托盘(TrayItem)的位置?从显示器获取边界只会给我整个屏幕的边界。即
item.getDisplay().getBounds();
将在我的Windows框中给我(0,0,1024,1024)。
我还想知道系统托盘的位置(左,右,上,下),但可以根据给定的位置进行猜测。这就是全部,因此我可以在系统托盘附近弹出一条消息。
这是这篇文章的副本,但我想提供赏金(因此控制我认为正确的答案)。
解决方法
如果您只是想在托盘项目附近显示一个外壳,以对用户事件做出反应(就像我的情况)。当事件在托盘项目上触发时,您可以获得指针的位置:
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 ();
}
}
});
您可以在此处找到整个源代码。
如果您想通知其他事件(不是由用户输入生成的),我猜您最好的选择是使用工具提示,就像Sandman在上一个答案中指出的那样。
祝好运!!!
, widget.getDisplay()
始终返回用于指定窗口小部件的显示,因此将永远无法使用。
据我所知,对于Win32和MacOS,在第一个鼠标事件之前,您将无法获得位置;-(
如果您愿意添加一些依赖于体系结构的代码,可以尝试以下操作...
对于MacOS-尽管未经测试:
子类别TrayItem
(记住要覆盖checkSubClass()
)
使用getLocation()
返回项目的当前位置
对于Win32-再次未经测试-您可以尝试相同的方法,但是这次覆盖messageProc(...)
。第一条消息之一将允许您查询句柄的当前位置...
, 从API猜测,似乎没有这样的选择(例如,与“ѭ7”相反)。 :(
, 感谢那些试图回答的人。但是,与其他帖子一样,我认为这是不可能的,因此我在否定的时候回答我自己的问题:(
, 您可以使用Display.map从一个坐标系映射到另一个坐标系。您可以通过以下操作将商品的0,0(左上角)映射到“显示”坐标中:
Display.map(item,null,0)
将null用作映射到“显示”坐标空间的“至”控件。