如何将消息映射添加到MFC中的动态菜单项

时间:2009-12-22 12:03:01

标签: visual-studio mfc visual-c++ contextmenu popupmenu

我编写了一个具有listview控件的MFC。当用户右键单击任何项​​目时,我将生成一个动态菜单项,其中包含在listview中选择的文本。一切都正常显示,但我不知道如何将消息映射添加到该动态菜单项。

任何帮助?

void CMyListDlg::OnRclickList(NMHDR* pNMHDR, LRESULT* pResult) 
    {
        // TODO: Add your control notification handler code here


        int nIndex = m_List.GetSelectionMark();
        CString pString = m_List.GetItemText(nIndex,1);
        CMenu menu, * pSubMenu;
        int pos=0;
        menu.LoadMenu(IDR_MENU1);
        pSubMenu = menu.GetSubMenu (0);
        pSubMenu->DeleteMenu(0,MF_BYPOSITION);
        pSubMenu->InsertMenu(pos,MF_BYPOSITION,NULL,pString);
            CPoint oPoint;
        GetCursorPos (& oPoint);
        pSubMenu-> TrackPopupMenu (TPM_LEFTALIGN, oPoint.x, oPoint.y, this);






        *pResult = 0;
    }

3 个答案:

答案 0 :(得分:3)

当您插入ID = 0(NULL)的菜单项时。这样你无法弄清楚哪个命令被按下了。您必须为项目分配ID,最简单的是

#define WM_MYMESSAGE WM_USER + 1

然后你这样插入:

pSubMenu->InsertMenu(pos,MF_BYPOSITION,WM_MYMESSAGE,pString);

如果您为窗口覆盖OnCommand,则会将您的ID设为wParam。 要真正弄清楚发生了什么,将一些额外的信息存储在另一个类成员中,比如m_nLastItemClicked或者......你明白了吗?!

答案 1 :(得分:2)

检查MFCIE sample,它会从用户最喜欢的文件夹中生成收藏菜单,并在点击收藏的菜单项时导航到收藏的网址。

答案 2 :(得分:0)

只需在您的课程中添加ON_COMMAND(以及必要时ON_UPDATE_COMMAND_UI)处理程序即可获得菜单项ID。