ListCtrl添加右键菜单(ListCtrl类里编辑,给ListCtrl 发送NM_RCLICK消息)
在开发中会用到右键菜单,我们来一起学习一下。
假如,我们现在已经准备好了列表,就差右键处理了。
2、给要添加右键菜单的ListCtrl子类,添加消息
按 ctrl + shift + x 打开类向导,选择要添加的子类,在消息中找到 =NM_RCLICK消息,双击=NM_RCLICK,就会在右侧出现OnNMRClick,然后点击编辑代码即可
3、编辑代码
void CRunSerListCtr::OnNMRClick(NMHDR *pNMHDR, LRESULT *pResult) { LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR); // TODO: 在此添加控件通知处理程序代码 *pResult = 0; 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)); //这里是我们在1中定义的MENU的文件名称 CMenu* popup = menu.GetSubMenu(0); ASSERT(popup != NULL); popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this); //下面的两行代码主要是为了后面的操作为准备的 //获取列表视图控件中第一个被选择项的位置 POSITION m_pstion = GetFirstSelectedItemPosition(); //该函数获取由pos指定的列表项的索引,然后将pos设置为下一个位置的POSITION值 m_nIndex = GetNextSelectedItem(m_pstion); CString str; str.Format(L" m_nIndex = %d", m_nIndex); MessageBox(str, str, 0); } }
测试效果
赌上我的人生为梦想,即使是臭名远扬,也要我的名字响彻天堂