单击右键弹出快捷菜单,并删除list control中的选中项



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中选中的项。

展开阅读全文

没有更多推荐了,返回首页