我正在创建像Windows任务管理器这样的程序。
工作环境是visual c ++ 6.0。
void CProcess01Dlg::OnRclickListCtrl(NMHDR* pNMHDR, LRESULT* pResult) {
CPoint ptInList, ptInSrceen;
GetCursorPos(&ptInSrceen);
ptInList = ptInSrceen;
m_ctrlList.ScreenToClient(&ptInList);
POSITION pos = m_ctrlList.GetFirstSelectedItemPosition();
int nListIndex = m_ctrlList.GetNextItem(-1, LVNI_SELECTED);
CMenu menu, *pMenu;
menu.LoadMenuA(IDR_MENU1);
CString str;
str.Format("%d",nListIndex);
GetDlgItem(IDC_EDIT1)->SetWindowText(str);
if( 0 <= nListIndex)
{
pMenu = menu.GetSubMenu(0);
}
else
{
}
pMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON, ptInSrceen.x, ptInSrceen.y, this);
}
上面的代码是在MFC中右键单击列表控件中的项目时处理事件的函数。
当我右键单击某个项目时出现上下文菜单时,我想在上下文菜单中添加一个事件。
告诉我们您是如何处理此事件的。
谢谢:)
答案 0 :(得分:1)
使用InsertMenu
和/或AppendMenu
向菜单添加更多项目。
CMenu menu;
menu.LoadMenu(IDR_MENU1);
CMenu* popup = menu.GetSubMenu(0);
popup->InsertMenu(MF_STRING, MF_BYPOSITION, ID_XXX1, "Insert");
popup->AppendMenu(MF_STRING, ID_XXX2, "Append");
popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON, ptInSrceen.x, ptInSrceen.y, this);
TrackPopupMenu
中的最后一个参数是窗口的句柄,它将接收菜单消息。您只需要处理对话框中的命令:
BEGIN_MESSAGE_MAP(CProcess01Dlg, CDialogEx)
ON_COMMAND(ID_FILE_NEW, onfilenew)
ON_COMMAND(ID_XXX1, foo)
...
END_MESSAGE_MAP()
CProcess01Dlg::foo()
{
...
}