MFC的Tab Control属性页中添加右键菜单事件

在MFC中,如果想要给Tab Control的某一个属性页添加右键菜单,那么首先要在资源里添加菜单内容,并给菜单内容设置事件处理。

然后在属性页的类中添加右键事件

[php]
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;
}
[/php]

在代码pPopMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, pt.x, pt.y, this);中最后一个参数必须为this才能在该属性页类里收到右键事件。

[php]
//菜单事件
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);
}
[/php]

Comments are closed.