如何获取SWT托盘或TrayItem的位置

| 有什么想法如何通过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, 0)
将null用作映射到“显示”坐标空间的“至”控件。     

要回复问题请先登录注册