VC 剪贴板操作

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

VC剪贴板操作本文主要介绍了VC++/MFC中如下内容的剪贴板操作:1、文本内容的操作2、WMF数据的操作3、位图的操作4、设置使用自定义格式5、感知剪贴板内容的改变6、自动将数据粘贴到另一应用程序窗口一、文本内容的操作下面的代码示范了如何将文本内容复制到剪贴板(Unicode编码的先转化为ASCII):CStringsource;//文本内容保存在source变量中if(OpenClipboard()){HGLOBALclipbuffer;char*buffer;EmptyClipboard();clipbuffer=GlobalAlloc(GMEM_DDESHARE,source.GetLength()+1);buffer=(char*)GlobalLock(clipbuffer);strcpy(buffer,LPCSTR(source));GlobalUnlock(clipbuffer);SetClipboardData(CF_TEXT,clipbuffer);CloseClipboard();}下面的代码显示了如何从剪贴板上获得文本内容:char*buffer=NULL;//打开剪贴板CStringfromClipboard;if(OpenClipboard()){HANDLEhData=GetClipboardData(CF_TEXT);char*buffer=(char*)GlobalLock(hData);fromClipboard=buffer;GlobalUnlock(hData);CloseClipboard();}二、WMF数据的操作在剪贴板上读写图象数据是非常有用的功能,并且实现起来也很简单。下面的代码显示了如何将扩展图元文件复制到剪贴板:if(OpenClipboard());{EmptyClipboard();//创建图元文件DCCMetaFileDC*cDC=newCMetaFileDC();cDC-CreateEnhanced(GetDC(),NULL,NULL,the_name);//调用绘图例程//关闭CMetafileDC并获得它的句柄HENHMETAFILEhandle=cDC-CloseEnhanced();//复制到剪贴板SetClipBoardData(CF_ENHMETAFILE,handle);CloseClipboard();//删除dcdeletecDC;}下面的代码演示了从剪贴板获得图元文件并将其绘制到clientDC上:if(OpenClipboard()){//获得剪贴板数据HENMETAFILEhandle=(HENMETAFILE)GetClipboardData(CF_ENHMETAFILE);//显示CClientDCdc(this);CRectclient(0,0,200,200);dc.PlayMetaFile(handle,client);//关闭剪贴板CloseClipboard();}三、位图的操作位图的操作稍微复杂一点,下面这个例子显示了如何在剪贴板保存位图:if(OpenClipboard()){EmptyClipboard();CBitmap*junk=newCBitmap();CClientDCcdc(this);CDCdc;dc.CreateCompatibleDC(&cdc);CRectclient(0,0,200,200);junk-CreateCompatibleBitmap(&cdc,client.Width(),client.Height());dc.SelectObject(junk);DrawImage(&dc,CString(Bitmap));//复制数据到剪贴板SetClipboardData(CF_BITMAP,junk-m_hObject);CloseClipboard();deletejunk;}下面的代码显示了如何从剪贴板上获得位图数据:if(OpenClipboard()){//获得剪贴板数据HBITMAPhandle=(HBITMAP)GetClipboardData(CF_BITMAP);CBitmap*bm=CBitmap::FromHandle(handle);CClientDCcdc(this);CDCdc;dc.CreateCompatibleDC(&cdc);dc.SelectObject(bm);cdc.BitBlt(0,0,200,200,&dc,0,0,SRCCOPY);CloseClipboard();}四、设置并使用自定义格式使用RegisterClipboardFormat()函数,可以复制和粘贴任何你需要的数据类型。比如我们有以下一个数据类型:structMyFormatData{longval1;intval2;};我们要把它复制到剪贴板,可以使用如下的代码:UINTformat=RegisterClipBoardFormat(MY_CUSTOM_FORMAT);if(OpenClipboard()){MyFormatDatadata;data.val1=100;data.val2=200;HGLOBALclipbuffer;EmptyClipboard();clipbuffer=GlobalAlloc(GMEM_DDESHARE,sizeof(MyFormatData));MyFormatData*buffer=(MyFormatData*)GlobalLock(clipbuffer);//保存到内存*buffer=data;//保存到剪贴板GlobalUnlock(clipbuffer);SetClipboardData(format,clipbuffer);CloseClipboard();}读取数据使用以下代码:UINTformat=RegisterClipboardFormat(MY_CUSTOM_FORMAT);MyFormatDatadata;if(Openclipboard()){HANDLEhData=GetClipboardData(format);MyFormatData*buffer=(MyFormatData*)GlobalLock(hData);data=*buffer;GlobalUnlock(hData);CloseClipboard();}五、感知剪贴板内容的改变通过Windows消息可以感知剪贴板内容是否发生改变,代码如下://Inyourinitializationcodecall:SetClipboardViewer();//将我们的程序添加到剪贴板观察链//Inyourmessagemapadd:ON_MESSAGE(WM_DRAWCLIPBOARD,OnClipChange)//添加Messagehandle//Whichisdeclaredas:afx_msgvoidOnClipChange();Finallyimplement:voidCDetectClipboardChangeDlg::OnClipChange(){CTimetime=CTime::GetCurrentTime();SetDlgItemText(IDC_CHANGED_DATE,time.Format(%a,%b%d,%Y--%H:%M:%S));DisplayClipboardText();}六、自动将数据粘贴到另一应用程序窗口只需获得相应窗口的句柄,并发送一个消息就可以了:SendMessage(m_hTextWnd,WM_PASTE,0,0);分享到:上一篇:位域排序structendian

1 / 4
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功