环境
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、从列表复制,然后粘贴到记事本。


4021

被折叠的 条评论
为什么被折叠?



