ListCtrl添加右键菜单(ListCtrl类里编辑,给ListCtrl 发送NM_RCLICK消息)

在开发中会用到右键菜单,我们来一起学习一下。

假如,我们现在已经准备好了列表,就差右键处理了。

1、在资源视图中的添加一个MENU,如图

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);
	}

}

测试效果


赌上我的人生为梦想,即使是臭名远扬,也要我的名字响彻天堂
原文地址:https://www.cnblogs.com/ye-ming/p/7107625.html