c++怎样将字符串数组内容复制到剪贴板,我每次复制后粘贴只能粘贴一条数据,不知怎么回事,请大家帮帮忙。
voidCOutputList::OnEditCopy(){intindex=COutputList::GetCount();CString*str=newCString...
void COutputList::OnEditCopy()
{
int index = COutputList::GetCount();
CString *str= new CString[index];
for (int i=index-1;i>=0;i--)
{
COutputList::GetText(i,str[i]);
}
//定义字符型变量用来保存用户输入的数据
//CString str;
HGLOBAL *hClip = new HGLOBAL[index];
//定义一个HGLOBAL句柄变量用来指向分配的内存块
if (OpenClipboard())
{
EmptyClipboard(); //将剪贴板内容清空
for (int i=0;i<index;i++)
{
hClip[i]=GlobalAlloc(GMEM_MOVEABLE,str[i].GetLength()+1); //在堆上分配可移动的内存块,程序返回一个内存句柄
char * buff = NULL; //定义指向字符型的指针变量
buff=(char*)GlobalLock(hClip[i]);//对分配的内存块进行加锁,将内存块句柄转化成一个指针,并将相应的引用计数器加1
strcpy(buff,str[i]); //将用户输入的数据复制到指针变量中,实际上就是复制到分配的内存块中
GlobalUnlock(hClip[i]); //数据写入完毕,进行解锁操作,并将引用计数器数字减1
SetClipboardData(CF_TEXT,hClip[i]);//将存放有数据的内存块放入剪贴板的资源管理中
}
CloseClipboard();
//关闭剪贴板,释放剪贴板资源的占用权
//MessageBox("已将数据存入剪贴板");
}
delete []str;
delete []hClip;
} 展开
{
int index = COutputList::GetCount();
CString *str= new CString[index];
for (int i=index-1;i>=0;i--)
{
COutputList::GetText(i,str[i]);
}
//定义字符型变量用来保存用户输入的数据
//CString str;
HGLOBAL *hClip = new HGLOBAL[index];
//定义一个HGLOBAL句柄变量用来指向分配的内存块
if (OpenClipboard())
{
EmptyClipboard(); //将剪贴板内容清空
for (int i=0;i<index;i++)
{
hClip[i]=GlobalAlloc(GMEM_MOVEABLE,str[i].GetLength()+1); //在堆上分配可移动的内存块,程序返回一个内存句柄
char * buff = NULL; //定义指向字符型的指针变量
buff=(char*)GlobalLock(hClip[i]);//对分配的内存块进行加锁,将内存块句柄转化成一个指针,并将相应的引用计数器加1
strcpy(buff,str[i]); //将用户输入的数据复制到指针变量中,实际上就是复制到分配的内存块中
GlobalUnlock(hClip[i]); //数据写入完毕,进行解锁操作,并将引用计数器数字减1
SetClipboardData(CF_TEXT,hClip[i]);//将存放有数据的内存块放入剪贴板的资源管理中
}
CloseClipboard();
//关闭剪贴板,释放剪贴板资源的占用权
//MessageBox("已将数据存入剪贴板");
}
delete []str;
delete []hClip;
} 展开
2个回答
展开全部
你可以把这一段
CString *str= new CString[index];
for (int i=index-1;i>=0;i--)
{
COutputList::GetText(i,str[i]);
}
改成
CString *str= new CString[index];
CString all;
for (int i=index-1;i>=0;i--)
{
COutputList::GetText(i,str[i]);
all += str[i]+"\r\n";
}
这样你就只需要把all这一个字符串的内容放到剪贴板里面就可以了。
CString *str= new CString[index];
for (int i=index-1;i>=0;i--)
{
COutputList::GetText(i,str[i]);
}
改成
CString *str= new CString[index];
CString all;
for (int i=index-1;i>=0;i--)
{
COutputList::GetText(i,str[i]);
all += str[i]+"\r\n";
}
这样你就只需要把all这一个字符串的内容放到剪贴板里面就可以了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询