0

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

有什么帮助吗?

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;
    }
4

3 回答 3

3

目前您正在插入 ID = 0 (NULL) 的菜单项。这样你就无法确定按下了哪个命令。您必须为项目分配一个 ID,最简单的一个是

#define WM_MYMESSAGE WM_USER + 1

然后你像这样插入它:

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

如果您覆盖OnCommand您的窗口,您的 ID 为wParam. 要真正弄清楚发生了什么,请将一些附加信息存储在另一个班级成员中,比如m_nLastItemClicked或......你明白了吗?!

于 2009-12-22T18:48:00.473 回答
2

检查MFCIE 示例,它会从用户的收藏夹文件夹中生成收藏夹菜单,并在单击收藏夹菜单项时导航到收藏夹 URL。

于 2009-12-22T21:16:36.097 回答
0

只需为您的类中的菜单项 ID添加ON_COMMAND(如有必要)处理程序。ON_UPDATE_COMMAND_UI

于 2009-12-22T13:28:28.010 回答