您的位置:首页 > 其它

listcontrol 使用MENU菜单 复制列表控件某行某列到剪贴板

2014-12-25 13:56 399 查看
void CClientDlg::OnNMRClickListBox(NMHDR *pNMHDR, LRESULT *pResult)

{

// TODO: 在此添加控件通知处理程序代码;

*pResult = 0;

Invalidate();

CString copytext ;

//获得对话框内列表控件句柄;

HWND ListhWnd = ::GetDlgItem (m_hWnd,IDC_LIST_Box);

LPNMITEMACTIVATE temp = (LPNMITEMACTIVATE) pNMHDR;

//获取选中行号

int nItem = temp->iItem;

//获取选中列号

int nSubItem = temp->iSubItem;

if(nSubItem == 0 || nSubItem == -1 || nItem == -1)

{

return ;

}

//Retrieve the text of the selected subItem

//from the list

//得到内容放入

copytext = m_list_box.GetItemText(nItem ,nSubItem);

//弹出MENU菜单选项;

CPoint point;

::GetCursorPos(&point);

CMenu menu;

menu.LoadMenu(ID_MENU_LIST); //读取资源,IDR_MENU为弹出的菜单ID;

menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON, point.x,point.y,this);

}

//菜单下选项:”复制“ 的映射处理

void CClientDlg::OnCopy()

{

// TODO: 在此添加命令处理程序代码;

HGLOBAL hClip;

//定义一个HGLOBAL句柄变量用来指向分配的内存块;

if (OpenClipboard())

{

EmptyClipboard(); //将剪贴板内容清空;

hClip=GlobalAlloc(GMEM_MOVEABLE,copytext.GetLength()+1);

//定义指向字符型的指针变量;

char * buff;

//对分配的内存块进行加锁,将内存块句柄转化成一个指针,并将相应的引用计数器加1;

buff=(char*)GlobalLock(hClip);

//将用户输入的数据复制到指针变量中,实际上就是复制到分配的内存块中;

strcpy(buff,copytext);

//数据写入完毕,进行解锁操作,并将引用计数器数字减1;

GlobalUnlock(hClip);

//将存放有数据的内存块放入剪贴板的资源管理中;

SetClipboardData(CF_TEXT,hClip);

//关闭剪贴板,释放剪贴板资源的占用权;

CloseClipboard();

/* MessageBox(_T("已将数据存入剪贴板"));*/

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: