对剪贴板的内容的进行读取和设置

本文介绍了如何在Windows环境下利用`coledataobject`和`coledatasource`对剪贴板的内容进行读取和设置。首先创建`coledataobject`对象来读取剪贴板上的格式,通过遍历可用格式并获取数据的`hglobal`。然后,使用`colestreamfile`读取文件内容,并创建`coledatasource`对象来设置剪贴板内容,将文件数据写入剪贴板并注册指定的剪贴板格式。
摘要由CSDN通过智能技术生成
2007年12月07日 16:20:00

读剪贴板:
coledataobject *pdo = new coledataobject;
assert ( afxisvalidaddress ( pdo, sizeof(coledataobject) ));

if ( !pdo- return;

// determine how many formats are available on the clipboard.
pdo-
while ( pdo- {

if ( !pdo- continue;

// get an hglobal of the data.
hgdata = pdo- if ( null != hgdata )

delete pdo;

设置剪贴板:
clipformat cfformat;
coledatasource* psource = new coledatasource();
colestreamfile file;
sf.openstream(strfilename,file);//strfilename为你的文件
dword len = file.getlength();
hglobal hg = globalalloc ( gmem_moveable | gmem_share,len);
void* pv = globallock ( hg );
assert(pv != null);
file.read(pv,len);
::globalunlock(hg);

::openclipboard(null);
cfformat = ::registerclipboardformat(name);
::closeclipboard();

psource-

拷贝与粘贴文本
下边的源代码演示了如何将文本(包含在CString对象“source”中)拷贝到剪贴板上。
CString source; 
//put your text in source
if(OpenClipboard())
{
     
         HGLOBAL clipbuffer;
         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;
//open the clipboard
CString fromClipboard;
if ( OpenClipboard() ) 
{
                     
         HANDLE hData = GetClipboardData( CF_TEXT );
         char * buffer = (char*)GlobalLock( hData );
         fromClipboard = buffer;
         GlobalUnlock( hData );
         CloseClipboard();
}
                           
                           
                           

拷贝与粘贴WMF(enhanced)数据
你想在你的程序中往剪贴板上“画”以及向剪贴板读取图形吗?请放心,这个――不难!示范代码如下,其实现的是往剪贴板上写一enhanced metafile。
if ( OpenClipboard() )
{
                             
         EmptyClipboard();
 
         //create the metafile DC
         CMetaFileDC * cDC = new CMetaFileDC();
         cDC-
                                  
                                  
                                   
                                   
 
         //call draw routine here that makes GDI calls int cDC
 
         //close meta CMetafileDC and get its handle
         HENHMETAFILE handle = cDC-
                                        
                                        
                                         
                                         
 
         //place it on the clipboard
         SetClipboardData(CF_ENHMETAFILE,handle);
         CloseClipboard();
 
         //delete the dc
         delete cDC;
}
                                                 
                                                 
                                               
好啦,该演示反过来怎么做的代码了。我们从剪贴板上取得metafile并将其画到自己的应用程序的客户区DC(设备上下文)上(仅仅是个试验而已,实际上你可能更想将它拷贝一份儿)。
if ( OpenClipboard() )
{
                                                 
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值