我编写了一个具有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;
}
答案 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。