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

时间:2015-01-21 21:05:17

标签: c++ macos wxwidgets

我有wxFrame(MyFrame)的派生类(对于OSX - Yosemite平台),它调用:     绑定(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);
    }
}

我看过这篇文章:Mouse Events of WxPython TaskBarIcon on Mac OSX are not triggering 似乎有一个关于它的错误。但我无法在网上找到该bug或其状态。有人提到问题出在wxPython上,但似乎与我的问题有关。

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

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

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

有没有人知道这是否纯粹是wxWidget-OSX不完整的功能,如果有任何开放的错误,更重要的是,如果有任何解决方案显示停靠栏中最小化图标的弹出菜单项,并处理菜单的点击事件。

提前致谢。

1 个答案:

答案 0 :(得分:0)

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

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

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

  MyApp::wxApp/
    MyTaskBarIcon::wxTaskBarIcon (override CreatePopupMenu(), return a new wxMenu)

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