MFC应用实例:[63]粘贴板复制数据
1、新建一个基于对话框的应用程序,工程名为ClipBoardDemo。
![MFC应用实例:[63]粘贴板复制数据](https://exp-picture.cdn.bcebos.com/955ea0e434daf05e0fcd95c2751d96d81919e541.jpg)
2、界面设计如下,添加两个个按钮,两个列表框,两个文本控件。
![MFC应用实例:[63]粘贴板复制数据](https://exp-picture.cdn.bcebos.com/19587f20a7cd0c6eb61cee00fed7997bbaf4dd41.jpg)
3、对“复制到剪切板”按钮添加响应函数OnCopy() ,响应函数OnCopy() 代码如下:
void CClipBoardDemoDlg::OnCopy()
{
COleDataSource* pSource=new COleDataSource();
CSharedFile sf(GMEM_MOVEABLE|GMEM_DDESHARE|GMEM_ZEROINIT);
char* strText;
strText=new char[40];//存储从文件读取的数据
for(int i=0;i<m_booklist.GetCount();i++)
{
m_booklist.GetText(i,strText);//获取列表框数据
sf.Seek(40*i,CFile::begin);//定位文件指针
sf.Write(strText,40);//写文件数据
}
HGLOBAL hMem=sf.Detach();
if(!hMem)
return;
pSource->CacheGlobalData(CF_TEXT,hMem);
pSource->SetClipboard();//添加到剪切板中
}
![MFC应用实例:[63]粘贴板复制数据](https://exp-picture.cdn.bcebos.com/db196cdade49610fddb841b7a56817e950e1d241.jpg)
4、对“从剪切板粘贴数据”按钮添加响应函数OnPlaste() ,响应函数OnPlaste() 代码如下:
void CClipBoardDemoDlg::OnPlaste()
{
COleDataObject obj;
if(obj.AttachClipboard())
{
if(obj.IsDataAvailable(CF_TEXT))
{
HGLOBAL hmem=obj.GetGlobalData(CF_TEXT);
CMemFile mf((BYTE*)::GlobalLock(hmem),::GlobalSize(hmem));
char* strText;
strText=new char[40];//存储从文件读取的数据
int i=0;
mf.SeekToBegin();
while(mf.Read(strText,40)!=0)//读出的文件不为空
{
if((CString)strText=="")
return;
m_booklist2.AddString((CString)strText);
i++;
mf.Seek(40*i,CFile::begin);//定位文件指针
}
::GlobalUnlock(hmem);
}
}
}
![MFC应用实例:[63]粘贴板复制数据](https://exp-picture.cdn.bcebos.com/16a84fe10ef8585688d3449753e9ccd2ba66cd41.jpg)
5、程序运行如下:
![MFC应用实例:[63]粘贴板复制数据](https://exp-picture.cdn.bcebos.com/d9a8d2d2bb665159e6aefc998fe23ea23b42c741.jpg)