我使用wxToolBar這使得使用一個下拉菜單的用下面的代碼(簡化):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();
所以第一連接()是成功的並在單擊頂部工具欄項時,我最終在DrawCanvasSwitcher :: OnToolbar()。第二個Connect() - 它只是從同一個文件中的不同位置複製而來,並且對於普通菜單項可以正常工作 - 不起作用,我從來沒有在DrawCanvasSwitcher :: OnMenu()中選擇一個工具欄下拉菜單項目。事件類型與wxWidgets 3.1附帶的工具欄樣例中使用的相同。 g_drawCancas和custParent全部都是有效的(並且適用於普通菜單項)。
那麼,爲什麼我不會在單擊的下拉項目上感受事件呢?
編輯:使用wxEVT_COMMAND_MENU_SELECTED代替wxEVT_COMMAND_TOOL_DROPDOWN_CLICKED沒有任何區別,仍然沒有事件......
通過SetId()設置ID是原因 - 當創建菜單項時,它可以順利運行 - 謝謝!使用Connect()是因爲此應用程序還需要在某些平臺上進行編譯,而我仍處於2.8版本中...... – Elmi