ListControl中添加右键菜单

1.添加资源一个menu资源,并编辑菜单(第一个菜单的多个子菜单内容为具体操作项,如:添加、删除等)

2. list属性里添加一个右键单击事件,并写选中多行的函数

    void CDlgClient::OnNMRClickList1(NMHDR *pNMHDR, LRESULT *pResult)
    {
        LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
        // TODO: Add your control notification handler code here
       std::vector<CString> kSelectedItem; //多个选中项。
        CMenu menu ,* pSubMenu; //定义下面要用到的cmenu对象
        menu.LoadMenu(IDR_MENU1); //装载自定义的右键菜单
    
        pSubMenu = menu.GetSubMenu(0); //获取第一个弹出菜单,所以第一个菜单必须有子菜单
        CPoint oPoint; //定义一个用于确定光标位置的位置
        GetCursorPos( &oPoint); //获取当前光标的位置,以便使得菜单可以跟随光标
    
        m_ListControl.SetExtendedStyle(m_ListControl.GetExtendedStyle()|LVS_EX_FULLROWSELECT);
    
        POSITION sSelectedPos = m_ListControl.GetFirstSelectedItemPosition();  //获取首选中行位置
        if(sSelectedPos == NULL) 
        { 
            return; 
        } 
        //选中的1个或多个数据
        while(sSelectedPos)//获取首选中行位置
        {
            int nSelItem = -1;
            nSelItem = m_ListControl.GetNextSelectedItem(sSelectedPos);//获取选中行的索引,通过POSITION转化 
    
            if(nSelItem >= 0 && nSelItem < m_ListControl.GetItemCount())
            {
                CString sFullPath = m_ListControl.GetItemText(nSelItem, 1);
                //MessageBox(sFullPath ); //显示当前选中的路径
                kSelectedItem.push_back(sFullPath);            
            }
    
        }
    
        //在指定位置显示弹出菜单
        pSubMenu->TrackPopupMenu (TPM_LEFTALIGN, oPoint.x, oPoint.y, this);          
    
        *pResult = 0;
    }

 

 

3.在menu上添加handel事件,如:添加、删除等。

4.编辑具体的添加和删除的函数。

posted @ 2014-07-18 17:19  MATU  阅读(1028)  评论(0)    收藏  举报