2024年5月11日发(作者:)
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, gth()+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);


发布评论