在列表框中创建了弹出右键菜单的功能,并使用classwizard创建了对应菜单项的消息映射函数,但无法触发,请问是什么原因呢?

解决方案 »

  1.   

    添加以下函数
    void Cxxxdlg::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu)
    {
    if (!bSysMenu)
    {
    ASSERT(pPopupMenu != NULL); // check the enabled state of various menu items
    CCmdUI state;
    state.m_pMenu = pPopupMenu;
    ASSERT(state.m_pOther == NULL); state.m_nIndexMax = pPopupMenu->GetMenuItemCount();
    for (state.m_nIndex = 0; state.m_nIndex < state.m_nIndexMax;
     state.m_nIndex++)
    {
    state.m_nID = pPopupMenu->GetMenuItemID(state.m_nIndex);
    if (state.m_nID == 0)
    continue; // menu separator or invalid cmd - ignore it ASSERT(state.m_pOther == NULL);
    ASSERT(state.m_pMenu != NULL);
    if (state.m_nID == (UINT)-1)
    {
    // possibly a popup menu, route to first item of that popup
    state.m_pSubMenu = pPopupMenu->GetSubMenu(state.m_nIndex);
    if (state.m_pSubMenu == NULL ||
    (state.m_nID = state.m_pSubMenu->GetMenuItemID(0)) == 0 ||
    state.m_nID == (UINT)-1)
    {
    continue; // first item of popup can't be routed to
    }
    state.DoUpdate(this, FALSE);  // popups are never auto disabled
    }
    else
    {
    // normal menu item
    // Auto enable/disable if command is _not_ a system command
    state.m_pSubMenu = NULL;
    state.DoUpdate(this, state.m_nID < 0xF000);
    }
    }
    }
    }
      

  2.   

    添加一个对应菜单的消息映射机制就可以了
    在要使用右键菜单的类中添加如下部分
    oncommand(菜单资源名,对应处理函数名(如可以是myfunc))//添加到消息循环中
    然后再定义myfunc函数就可以了