1.列表控件
在列表控件所在类的Class Wizard里添加NM_RCLICK消息响应函数
void CPara2::OnRclickAtslist(NMHDR* pNMHDR, LRESULT* pResult)
{
POSITION pos = m_atslist.GetFirstSelectedItemPosition(); //m_atslist列表控件名
if(pos == NULL)
{
return;
}
int nId;
nId = (int)m_atslist.GetNextSelectedItem(pos);
CString str = m_atslist.GetItemText(nId , 1);
CMenu pMenu;
CPoint pt(0,0);
GetCursorPos(&pt);
if(!pMenu.LoadMenu(IDR_MENU_HJ))//菜单栏ID
return;
pMenu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN,pt.x ,pt.y,this);
*pResult = 0;
}
2.picture控件,也适用于其他控件
在控件所在类的Class Wizard里添加WM_CONTEXMENU消息响应函数
void CPara1::OnContextMenu(CWnd* /*pWnd*/, CPoint point)
{
CRect rect;//定义矩形区域
GetDlgItem(IDC_STATIC)->GetWindowRect(&rect);//获取控件区域的矩形 picture控件ID
if(rect.PtInRect(point))
{
CMenu menu;
VERIFY(menu.LoadMenu(IDR_MENU_HJ)); //菜单栏ID
CMenu* pPopup=menu.GetSubMenu(0);
ASSERT(pPopup!=NULL);
pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON,point.x,point.y,this); //在鼠标当前位置显示指定菜单
}
}