您的位置:首页 > 其它

CListBox多选并把多选的内容拷贝到剪贴板

2012-11-23 16:15 295 查看
int nCount = GetSelCount();

if(0 == nCount) return;

CArray<int,int> aryListBoxSel;
// 数组用来保存选择的项目的索引

aryListBoxSel.SetSize(nCount);

GetSelItems(nCount, aryListBoxSel.GetData());

CString strSelAll=_T("");

CString strText;

for(int i=0; i<nCount; i++){

int nIndex = aryListBoxSel.GetAt(i); // 取得选择的项目的索引

GetText(nIndex,strText); // 根据索引获得选择的字符串

strSelAll += strText;

strSelAll += _T("\r\n");

}

// 复制到剪贴板

HGLOBAL hClip;

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

if (OpenClipboard())

{

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

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

//在堆上分配可移动的内存块,程序返回一个内存句柄

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

buff=(char*)GlobalLock(hClip);

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

strcpy(buff,strSelAll);

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

GlobalUnlock(hClip);

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

SetClipboardData(CF_TEXT,hClip);

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

CloseClipboard();

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

GlobalFree(hClip);

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