MFC的Tab Control属性页中添加右键菜单事件
在MFC中,如果想要给Tab Control的某一个属性页添加右键菜单,那么首先要在资源里添加菜单内容,并给菜单内容设置事件处理。
然后在属性页的类中添加右键事件
void CBatchConvert::SetPopMenu(int nIndex) { CMenu dMenu; if(!dMenu.LoadMenu(IDR_POPMENU)) AfxThrowResourceException(); CMenu* pPopMenu=dMenu.GetSubMenu(nIndex); ASSERT(pPopMenu!=NULL); POINT pt; ::GetCursorPos(&pt); pPopMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, pt.x, pt.y, this); } void CBatchConvert::OnNMRclickBatchFile(NMHDR *pNMHDR, LRESULT *pResult) { // TODO: 在此添加控件通知处理程序代码 NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; *pResult = 0; int nItem=pNMListView->iItem; if(nItem==-1) SetPopMenu(0); else SetPopMenu(1); *pResult = 0; }
在代码pPopMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, pt.x, pt.y, this);中最后一个参数必须为this才能在该属性页类里收到右键事件。
//菜单事件 void CBatchConvert::OnAddFile() { // TODO: 在此添加命令处理程序代码 UpdateData(TRUE); CFileDialog dlg(true); dlg.m_ofn.lpstrFilter = _T("ZV File(*.zv)\0 *.zv\0MPG File(*.mpg)\0 *.mpg\0MPEG4 File(*.mpeg4)\0 *.mpeg4\0H264 File(*.264)\0 *.264\0All File(*.*)\0 *.*\0"); if (IDOK == dlg.DoModal()) { //m_strSrcFile = dlg.GetPathName(); } UpdateData(FALSE); }