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

时间:2017-06-13 09:06:20

标签: c++ events wxwidgets

我正在使用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附带的工具栏示例中使用的相同。 g_drawCancas和custParent都是有效的(适用于普通菜单项)。

那么为什么我不会在点击的下拉项目上显示事件呢?

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

1 个答案:

答案 0 :(得分:1)

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

我尝试的一件事是在创建菜单项时立即指定(*it)->m_wxID,而不是稍后再设置它。当然,应该以书面形式工作,但是这样做是很常见的,所以也许那里有一个错误。

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

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