【问题标题】:wxFrame and wxTaskBarIcon taskbar event Mac OSX : callback not being triggeredwxFrame 和 wxTaskBarIcon 任务栏事件 Mac OSX:未触发回调
【发布时间】:2015-01-21 21:05:16
【问题描述】:

我有一个wxFrame (MyFrame) 的派生类(对于 OSX - Yosemite 平台),它调用: 绑定(wxEVT_TASKBAR_RIGHT_DOWN), &HandleTaskBarEvent, this);

问题是当我右键单击 Dock 中的图标时,HandleTaskBarEvent 没有被调用。

我看到 Mac 的通用右键单击菜单(登录时打开、保留在 Dock 中等)用于 Dock 中的主图标。

另外,我创建了一个wxTaskBarIcon。我猜这将在框架最小化后用于停靠栏中的最小化图标。

systemIcon = new wxTaskBarIcon(); //declared in header
systemIcon.Bind(wxEVT_TASKBAR_RIGHT_DOWN, &HandleTaskBarEvent, this);
Popup = new wxMenu(); //declared in header
QuitMenu = new wxMenuItem(Popup, wxID_ANY, wxString(wxT("Quit")), wxEmptyString, wxITEM_NORMAL); //declared in header
Popup->Append(QuitMenu)
Popup->Bind(wxEVT_COMMAND_MENU_SELECTED, &CloseFunc, this, QuitMenu->GetId());

这是在同一个派生类(MyFrame)中。

我在 MyFrame 相同的函数中调用 Iconize(),它按预期工作。它最小化了窗口。

这是HandleTaskBarEvent 函数(虚拟)

void MyFrame::HandleTaskBarEvent(wxTaskBarIconEvent& event)
{
    if(event.GetEventType() == wxEVT_TASKBAR_RIGHT_DOWN)
    {
        systemIcon->PopupMenu(Popup);
    }
}

我看到了这个帖子:Mouse Events of WxPython TaskBarIcon on Mac OSX are not triggering 并且似乎有一个错误。但我无法在线找到该错误或其状态。有人提到问题出在 wxPython 上,但似乎与我的问题有关。

我还为 wxTaskBarIcon 创建了一个派生类,并覆盖了 CreatePopupMenu 并将 systemIcon 作为 MyTaskBarIcon 的一个实例,但是该函数不会被任何点击(左、右等)触发。主 wxFrame 的 Bind 回调(HandleTaskBarEvent)也没有被触发,因此 systemIcon 无法弹出菜单。

我没有在我的 Mac 上使用鼠标(而是使用触控板)。不确定它是否应该对右键单击代码产生任何影响,但无论如何都要在此处添加信息。

所以我认为这可能是 wxWidget-OSX 特有的问题,因为代码可以在 Windows 上按预期运行。

有谁知道这是否纯粹是 wxWidget-OSX 不完整的功能,是否有任何未解决的错误,更重要的是,是否有任何解决方案可以在 Dock 中显示最小化图标的弹出菜单项,并处理菜单的点击事件。

提前致谢。

【问题讨论】:

  • &HandleTaskBarEvent 应该被编译器拒绝。编译时没有收到任何诊断消息吗?
  • 不,在编译期间没有在该行中收到警告或错误。我也在使用 &MyFrame::HandleTaskBarEvent。抱歉错过了前面的类说明符。

标签: c++ macos wxwidgets


【解决方案1】:

这是 OS X wxTaskBarIcon 实现的限制。请参阅wxTaskBarIcon on OSX - two-finger click does not send mouse event 和相关/链接问题。

我知道的唯一方法(在 OS X 上)是覆盖 wxTaskBarIcon::CreatePopupMenu()

你应该能够拥有类似的东西:

我的应用程序::wxApp/ MyTaskBarIcon::wxTaskBarIcon(覆盖CreatePopupMenu(),返回一个新的wxMenu)

这是我在一些应用程序中使用的模型,它在 Windows 和 OS X 上的工作方式相同(尽管没有提到特定的点击处理程序)。

【讨论】:

  • 嗨,我遇到了这个问题,并为 wxTaskBarIcon 覆盖了 CreatePopupMenu,但是主 Frame(wxFrame 的派生类) 的任务栏事件绑定方法本身不起作用。
  • 正确 - 它们中的大多数在 OS X 上不起作用(即:未实现)。请参阅链接的错误。
猜你喜欢
  • 1970-01-01
  • 2023-03-20
  • 2018-01-01
  • 2011-10-09
  • 2018-03-17
  • 1970-01-01
  • 2015-04-13
  • 2015-07-18
  • 1970-01-01
相关资源
最近更新 更多