BCB剪贴板的操作

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Clipboard 问答集 1999.11.23 [Beginner] 平台: VC5, NT4 SP5

By Randy More

翻译:陈贵敏(efoxxx)

声明:此译文仅供网友们学习之用!您可以随意转载此译文,希望您转载时保留作译

者和此声明。如有翻译不当之处,敬请指正:mailto:efoxxx@。近期,我会在《剪贴板大观园》系列中补充大量新的文章,希望与您交流,共同提高!

在我们自己的VC++ / MFC应用程序中增加剪贴板功能其实是很简单的事情。为了让你

的程序可以与剪贴板对话,本文就其实现中的一些基本问题做一些实例讲解。

拷贝与粘贴文本

下边的源代码演示了如何将文本(包含在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-CreateEnhanced(GetDC(),NULL,NULL,"the_name");

//call draw routine here that makes GDI calls int cDC

//close meta CMetafileDC and get its handle

HENHMETAFILE handle = cDC-CloseEnhanced();

//place it on the clipboard

SetClipboardData(CF_ENHMETAFILE,handle);

CloseClipboard();

//delete the dc

delete cDC;

}

好啦,该演示反过来怎么做的代码了。我们从剪贴板上取得metafile并将其画到自己的应用程序的客户区DC(设备上下文)上(仅仅是个试验而已,实际上你可能更想将它拷贝一份儿)。

if ( OpenClipboard() )

{

//Get the clipboard data

HENHMETAFILE handle =

(HENHMETAFILE)GetClipboardData(CF_ENHMETAFILE);

//play it into a DC (our own DC in this example)

CClientDC dc(this);

CRect client(0,0,200,200);

dc.PlayMetaFile(handle,client);

//close the clipboard

CloseClipboard();

}

拷贝与粘贴一张位图(BitMap)

拷贝和粘贴位图可是需要一些微妙的处理的,不过基本的思想还是一样。请看下面的代码。if ( OpenClipboard() )

{

EmptyClipboard();

//create some data

CBitmap * junk = new CBitmap();

CClientDC cdc(this);

CDC dc;

dc.CreateCompatibleDC(cdc);

CRect client(0,0,200,200);

junk-CreateCompatibleBitmap(cdc,client.Width(),client.Height()); dc.SelectObject(junk);

//call draw routine here that makes GDI calls

DrawImage(dc,CString("Bitmap"));

//put the data on the clipboard

SetClipboardData(CF_BITMAP,junk-m_hObject);

CloseClipboard();

//copy has been made on clipboard so we can delete

delete junk;

}

如下示例代码是从剪贴板上取得一张位图,将它粘贴到客户区DC中。

if ( OpenClipboard() )

{

相关文档
最新文档