1.设置快捷菜单:为了首先我们需要在菜单项下插入一个菜单IDR_MENU1,并在此菜单下创建一个菜单项,此菜单项的名字可以随便取,比如:ab,然后在aa下面添加一个子菜单“删除”,将其ID号设置为ID_SC。(如果有需要的话还可以根据我们自己的需要添加其他的子菜单项,这里我们不再叙述,仅以“删除为例”)
1.1)在list control中添加快捷菜单:在list control中添加时要为list control添加事件处理程序,此时选中的消息类型为:NM_RCLICK,然后添加代码如下:
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; if(pNMListView->iItem != -1) { DWORD dwPos = GetMessagePos(); CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
CMenu menu; VERIFY( menu.LoadMenu( IDR_MENU1 ) );
CMenu* popup = menu.GetSubMenu(0); ASSERT( popup != NULL ); popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this ); }
*pResult = 0;
1.2)在单文档应用程序中加快捷菜单:在菜单中的IDR_MENU1中创建菜单项aa,在aa下添加子项“删除”;然后在CMenuView类中添加WM_RBUTTONDOWN消息响应函数,具体代码如下:
void CdfjklsDlg::OnRButtonDown(UINT nFlags, CPoint point) { CMenu menu; menu.LoadMenu(IDR_MENU1); CMenu* pPopup=menu.GetSubMenu(0); pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON ,point.x,point.y,GetParent());
CDialog::OnRButtonDown(nFlags, point); }
2.对快捷菜单下的“删除”菜单添加事件处理程序(对于在list control中删除而言),具体是代码如下:
int i,iState; int nItemSelected=m_list.GetSelectedCount(); int nItemCount=m_list.GetItemCount(); if(nItemSelected<1) return; for(i=nItemCount-1;i>=0;i--) { iState=m_list.GetItemState(i,LVIS_SELECTED); if(iState!=0) {
m_list.DeleteItem(i); } }
经过上面的1.1)以及2中的步骤就可以删除list control中选中的项。