我有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不完整的功能,如果有任何开放的错误,更重要的是,如果有任何解决方案显示停靠栏中最小化图标的弹出菜单项,并处理菜单的点击事件。
提前致谢。
答案 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上的工作方式相同(尽管没有提到的特定点击处理程序)。