【问题标题】:wxToolBar with dropdown menu: no reaction on selected item带有下拉菜单的 wxToolBar:对所选项目没有反应
【发布时间】:2017-11-14 23:09:35
【问题描述】:

我正在使用 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 没有任何区别,仍然没有事件......

【问题讨论】:

    标签: c++ events wxwidgets


    【解决方案1】:

    我没有在代码中看到任何明显错误,因此,与往常一样,最好的办法是尽可能简化它和/或尝试在工具栏示例中执行相同的操作以查看如果你能在那里重现问题。

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

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

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

    【讨论】:

    • 通过 SetId() 设置 ID 是原因 - 在创建菜单项时它工作顺利 - 谢谢!使用 Connect() 是因为这个应用程序还需要在我仍然在 2.8 版本的某些平台上编译...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-21
    • 2012-07-25
    • 1970-01-01
    相关资源
    最近更新 更多