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

    测试效果

    
    
    赌上我的人生为梦想,即使是臭名远扬,也要我的名字响彻天堂
  • 相关阅读:
    C++文件读写详解(ofstream,ifstream,fstream)
    C++ char*,const char*,string,int 的相互转换
    Properties --- C++读配置信息的类
    值得推荐的C/C++框架和库
    leetcode 264: Ugly Number II
    几种Tab的实现方法
    HBase数据存储格式
    粗略。。Java项目设计模式之笔记----studying
    开放的平台、向上的文化——揭秘万达电商(4)
    RecyclerView
  • 原文地址:https://www.cnblogs.com/ye-ming/p/7107625.html
Copyright © 2020-2023  润新知