【MFC】CListCtrl列表控件右键复制内容到粘贴板 |
您所在的位置:网站首页 › 利用鼠标右键拖动能实现文件复制吗 › 【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(pNMHDR); pNMIA = reinterpret_cast(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、从列表复制,然后粘贴到记事本。
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |