【问题标题】:How to get a SWT Tray or TrayItem location如何获取 SWT Tray 或 TrayItem 位置
【发布时间】:2011-09-21 02:34:49
【问题描述】:

任何想法如何使用 SWT 获取系统托盘 (Tray) 或其上的项目 (TrayItem) 的位置?从显示器获取边界只会给我整个屏幕的边界。即

item.getDisplay().getBounds();

会在我的 Windows 机器上给我 (0, 0, 1024, 1024)。

我还想知道系统托盘的位置(左、右、上、下),但在给定位置时可能会猜到。 这样我就可以在系统托盘附近弹出一条消息

这是post 的副本,但我想提供赏金(并控制我认为正确的答案)。

【问题讨论】:

  • 这将非常适合实现也支持托盘的 GUI 测试。
  • 问题:你为什么不在你提到的其他帖子上开始赏金?
  • 它不会让我!我想我必须是所有者
  • 真的吗?我认为任何问题都可以悬赏?

标签: java eclipse swt eclipse-rcp jface


【解决方案1】:

您可以使用 Display.map 从一个坐标系映射到另一个坐标系。您可以通过执行以下操作将项目的 0,0(左上角)映射到显示坐标:

Display.map(item, null, 0, 0)

使用 null 作为映射到显示坐标空间的“to”控件。

【讨论】:

  • 这对 TrayItem 不起作用,因为它不是 Control 的子类。
【解决方案2】:

感谢那些试图回答的人。但是,与其他post 一样,我认为这是不可能的,所以我以否定的方式回答我自己的问题:(

【讨论】:

    【解决方案3】:

    如果您只想在托盘项目附近显示一个外壳来响应用户事件(就像我的情况一样)。当事件在托盘项上触发时,您可以获得指针位置:

    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

    如果您想通知其他事件(不是由用户输入生成的),我想您最好的选择是使用工具提示,正如 Sandman 在上一个答案中指出的那样。

    祝你好运!!!

    【讨论】:

      【解决方案4】:

      widget.getDisplay() 总是返回用于指定小部件的显示,所以这永远不会起作用。

      据我所知,对于 Win32 和 MacOS,您不会在项目本身的第一个鼠标事件之前获得位置;-(

      如果你愿意添加一些架构依赖的代码,可以试试下面...

      对于 MacOS - 虽然未经测试:

      • 子类TrayItem(记得覆盖checkSubClass()
      • 使用getLocation()返回项目的当前位置

      对于 Win32 - 再次未测试 - 您可以尝试相同但这次覆盖 messageProc(...)。第一条消息将允许您查询句柄的当前位置...

      【讨论】:

      • 谢谢,我会玩的。当我创建托盘项并仅与项 addData(...) 或类似项关联时,如何记录位置?你认为那里有什么选择吗?
      • 您最好看看是否可以通过其他方式访问相关信息。例如,通过查看注册表...不能期望上述解决方案适用于 SWT 的主要版本:-(
      • 无赖。关于我从该建议开始的任何指示? :S
      • 对不起...我完全没有想法 :-(
      【解决方案5】:

      从 API 猜测,似乎没有这样的选项(与 ToolItem 等对比)。 :(

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-01
        • 2018-08-29
        • 1970-01-01
        • 1970-01-01
        • 2013-05-10
        • 2012-09-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多