J'utilise un wxToolBar qui utilise un menu déroulant avec le code suivant (simplifié):wxToolBar avec menu déroulant: aucune réaction sur le point sélectionné
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();
La première Connect() est réussie et en cliquant sur l'élément de la barre d'outils supérieure, je finis dans DrawCanvasSwitcher :: OnToolbar(). Le deuxième Connect() qui est simplement copié à partir d'une position différente dans le même fichier et où il fonctionne bien pour les éléments de menu normal - ne fonctionne pas, je n'obtiens jamais un événement dans DrawCanvasSwitcher :: OnMenu() lors de la sélection d'une liste déroulante article. Le type d'événement est le même que celui utilisé dans l'exemple de barre d'outils fourni avec wxWidgets 3.1. g_drawCancas et custParent sont tous valides (et fonctionnent pour les éléments de menu simples).
Alors, quelle pourrait être la raison pour laquelle je ne révise pas les événements sur les éléments déroulants cliqués?
Edit: en utilisant wxEVT_COMMAND_MENU_SELECTED au lieu de wxEVT_COMMAND_TOOL_DROPDOWN_CLICKED ne
la définition de l'ID via SetId() était la raison - lorsque vous le faites lors de la création de l'élément de menu, cela fonctionne bien - merci! Connect() est utilisé car cette application doit aussi être compilée sur certaines plateformes où je suis encore en version 2.8 ... – Elmi