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

Comments are closed.