【MFC】CListCtrl列表控件右键复制内容到粘贴板

环境

VS版本:VS2010

字符集:多字符集

 

步骤

1、列表框初始化。

在OnInitDialog()函数中加入列表初始化代码。

m_lstAisMsg.SetExtendedStyle(m_lstAisMsg.GetExtendedStyle() 
| LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);

k = 0;
	
m_lstAisMsg.InsertColumn(k ++, _T("序号"), LVCFMT_LEFT, 50);
m_lstAisMsg.InsertColumn(k ++, _T("时间"), LVCFMT_LEFT, 150);
m_lstAisMsg.InsertColumn(k ++, _T("消息号"), LVCFMT_LEFT, 50);
m_lstAisMsg.InsertColumn(k ++, _T("消息内容"), LVCFMT_LEFT, 500);
m_lstAisMsg.InsertColumn(k ++, _T("告警内容"), LVCFMT_LEFT, 500);

 

2、添加Menu菜单资源。

 

3、在列表控件属性中,增加对NM_RCLICK消息处理。

 

 

4、在OnNMRClickListAisMsg()函数中添加下列代码。

void CMobStatus::OnNMRClickListAisMsg(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMITEMACTIVATE	pNMIA;
    int					nItem;
    int					nSubItem;
    CMenu				Menu;
    CMenu				*pSubMenu;
    CPoint				p;

    //LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);

    pNMIA = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);

    nItem = -1;
    nSubItem = -1;

    if (pNMIA)
    {
        nItem = pNMIA->iItem;
        nSubItem = pNMIA->iSubItem;
    }

    if (nItem == -1)
    {

        return;
    }

    //鼠标点的屏幕坐标
    GetCursorPos(&p);
    Menu.LoadMenu(IDR_MENU_2);
    pSubMenu = Menu.GetSubMenu(0);

    pSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, p.x, p.y, this);

    Menu.Detach();
    Menu.DestroyMenu();

    *pResult = 0;
}

5、复制按钮代码如下。

void CMobStatus::OnCopyAisMsg()
{
	CString				strAisMsg;
	int					nItem;
	
	TCHAR				*pszData;
	HGLOBAL				hClipboardData;
	
	nItem = m_lstAisMsg.GetSelectionMark();

	if (nItem != -1)
	{
		strAisMsg = m_lstAisMsg.GetItemText(nItem, 3);
	}

	//复制剪切板
	if (!strAisMsg.IsEmpty())
	{
		if (OpenClipboard())
		{
			EmptyClipboard();
			hClipboardData = GlobalAlloc(GMEM_DDESHARE, (strAisMsg.GetLength() + 1) * sizeof(TCHAR));
			if (hClipboardData)
			{
				pszData = (TCHAR *)GlobalLock(hClipboardData);
				_tcscpy(pszData, strAisMsg);
				GlobalUnlock(hClipboardData);
				SetClipboardData(CF_TEXT, hClipboardData);  
			}

			CloseClipboard();
		}
	}

}

 

6、从列表复制,然后粘贴到记事本。

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值