带下拉菜单的wxToolBar:对所选项目没有反应

wxToolBar with dropdown menu: no reaction on selected item

我正在使用 wxToolBar,它使用带有以下代码(简化)的下拉菜单:

g_toolBar1->AddTool(TOOLBAR_CMD_CONTROL_DROPDOWN,_("Control elements"),MainWin::getBitmap(gearsXPM,"gears"),wxNullBitmap,wxITEM_DROPDOWN);
custParent->Connect(TOOLBAR_CMD_CONTROL_DROPDOWN,wxEVT_COMMAND_TOOL_CLICKED,wxCommandEventHandler(DrawCanvasSwitcher::OnToolbar),NULL,g_drawCanvas);

wxMenu *controlMenu=new wxMenu;

// following is repeated several times to have more than onw drop-down item
// (*it) is an iterator to an container holding the required data
wxMenuItem *item=new wxMenuItem(controlMenu,wxID_ANY,(*it)->m_entityParams.m_name,(*it)->m_entityParams.m_shorthelp);
controlMenu->Append(item);
item->SetBitmap(*(*it)->m_entityParams.m_bmToolbar);
item->SetId((*it)->m_wxID);
custParent->Connect(item->GetId(),wxEVT_COMMAND_TOOL_DROPDOWN_CLICKED,wxCommandEventHandler(DrawCanvasSwitcher::OnMenu),NULL,g_drawCanvas);

g_toolBar1->SetDropdownMenu(TOOLBAR_CMD_CONTROL_DROPDOWN,controlMenu);

g_toolBar1->Realize();

所以第一个 Connect() 是成功的,当单击顶部工具栏项时,我最终进入 DrawCanvasSwitcher::OnToolbar()。第二个 Connect() - 它只是从同一文件中的不同位置复制而来,并且它在正常菜单项中工作正常 - 不起作用,我在选择工具栏下拉时从未在 DrawCanvasSwitcher::OnMenu() 中收到事件-下项。事件类型与 wxWidgets 3.1 附带的 toolbar-sample 中使用的相同。 g_drawCancas 和 custParent 都有效(并且适用于普通菜单项)。

那么,我不接收点击下拉项的事件的原因是什么?

编辑:使用 wxEVT_COMMAND_MENU_SELECTED 而不是 wxEVT_COMMAND_TOOL_DROPDOWN_CLICKED 没有任何区别,仍然没有事件...

我没有在代码中看到任何明显的错误,所以,一如既往,最好的办法是尽可能地简化它 and/or尝试在代码中做同样的事情工具栏示例,看看您是否可以在那里重现该问题。

我想尝试的一件事是在创建菜单项时立即指定 (*it)->m_wxID,而不是稍后设置。当然,应该 像写的那样工作,但是这样做并不常见,所以可能某处存在错误。

如果您设法重现了工具栏示例中的问题(例如,只需删除 MyFrame::OnToolDropdown() 的事件 table 条目并改用 Connect()),请执行 report it 作为错误,提及您的平台。

最后,虽然它与你的问题完全无关,但实际上没有任何理由在 wxWidgets 3.x 中使用 Connect() 而不是 Bind(),你真的应该切换到后者是为了更好的编译时安全性和灵活性。