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.编辑具体的添加和删除的函数。

浙公网安备 33010602011771号