原理
在CListCtrl上鼠标右键的时候,判断当前CListCtrl是否有选中项目,如果有选中项,立即执行弹出菜单的操作,否则不响应。
相关代码
void CXXXDLG::OnNMRClickListObType(NMHDR *pNMHDR, LRESULT *pResult) { LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR); *pResult = 0; //如果当前没有选中的行,右键菜单不显示 POSITION pos = m_ObjectTypeListCtrl.GetFirstSelectedItemPosition(); int CurSel = m_ObjectTypeListCtrl.GetNextSelectedItem(pos); //取得当前行号 if(CurSel==-1)return;//如果没有选中的项目,返回 //显示弹出菜单 CPoint point; GetCursorPos(&point); CMenu menu; menu.LoadMenu(IDR_MENU_SET);//获取菜单的资源 CMenu* popup = menu.GetSubMenu(0);//只获取第一个列菜单的指针 //弹出菜单显示 popup->TrackPopupMenu(TPM_RIGHTBUTTON|TPM_LEFTALIGN,point.x,point.y,this); }
上面的操作是在CListCtrl的右键消息中完成的,其菜单的响应消息和普通菜单一致。
转载请注明:悠然品鉴 » 【MFC】CListCtrl右键菜单操作