wxFrame 和 wxTaskBarIcon 任务栏事件 Mac OSX:未触发回调

wxFrame and wxTaskBarIcon taskbar event Mac OSX : callback not being triggered

本文关键字:回调 OSX Mac wxTaskBarIcon 任务栏 事件 wxFrame      更新时间:2023-10-16

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

问题是当我右键单击扩展坞中的图标时HandleTaskBarEvent未被调用。

我看到Mac为扩展坞中的主图标提供的通用右键单击菜单(登录时打开,保留在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);
    }
}

我看到这篇文章:Mac OSX上WxPython TaskBarIcon的鼠标事件没有触发而且似乎有一个关于它的错误。但是我无法在网上找到该错误或其状态。有人提到问题与wxPython有关,但似乎与我的问题有关。

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

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

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

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

提前谢谢。

这是

OS X wxTaskBarIcon实现的限制。请参阅 OSX 上的 wxTaskBarIcon - 双指单击不会发送鼠标事件和相关/链接问题。

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

您应该能够拥有以下内容:

  我的应用::wx应用/   MyTaskBarIcon::wxTaskBarIcon (override CreatePopupMenu(),返回一个新的 wxMenu)

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