【vc++精品源码栏目提醒】:网学会员,鉴于大家对vc++精品源码十分关注,论文会员在此为大家搜集整理了“vc 编程技术600个大型项目源码(八) - 电子设计”一文,供大家参考学习!
拷贝与粘贴文本 下边的源代码演示了如何将文本包含在CString对象“source”中拷贝到剪贴板上。
CString source //put your text in source ifOpenClipboard HGLOBAL clipbuffer char buffer EmptyClipboard clipbuffer GlobalAllocGMEM_DDESHARE source.GetLength1 buffer charGlobalLockclipbuffer strcpybuffer LPCSTRsource GlobalUnlockclipbuffer SetClipboardDataCF_TEXTclipbuffer CloseClipboard 反过来下面的代码是用来实现从剪贴板上取得文本的。
char buffer NULL //open the clipboard CString fromClipboard if OpenClipboard HANDLE hData GetClipboardData CF_TEXT char buffer charGlobalLock hData fromClipboard buffer GlobalUnlock hData CloseClipboard 拷贝与粘贴WMFenhanced数据 你想在你的程序中往剪贴板上“画”以及向剪贴板读取图形吗请放心这个――不难示范代码如下其实现的是往剪贴板上写一enhanced metafile。
if OpenClipboard EmptyClipboard //create the metafile DC CMetaFileDC cDC new CMetaFileDC cDC-gtCreateEnhancedGetDCNULLNULLquotthe_namequot //call draw routine here that makes GDI calls int cDC //close meta CMetafileDC and get its handle HENHMETAFILE handle cDC-gtCloseEnhanced //place it on the clipboard SetClipboardDataCF_ENHMETAFILEhandle CloseClipboard //delete the dc delete cDC 好啦该演示反过来怎么做的代码了。
我们从剪贴板上取得metafile并将其画到自己的应用程序的客户区DC设备上下文上仅仅是个试验而已实际上你可能更想将它拷贝一份儿。
if OpenClipboard //Get the clipboard data HENHMETAFILE handle HENHMETAFILEGetClipboardDataCF_ENHMETAFILE //play it into a DC our own DC in this example CClientDC dcthis CRect client00200200 dc.PlayMetaFilehandleclient //close the clipboard CloseClipboard 拷贝与粘贴一张位图BitMap 拷贝和粘贴位图可是需要一些微妙的处理的不过基本的思想还是一样。
请看下面的代码。
if OpenClipboard EmptyClipboard //create some data CBitmap junk new CBitmap CClientDC cdcthis CDC dc dc.CreateCompatibleDCampcdc CRect client00200200 junk-gtCreateCompatibleBitmapampcdcclient.Widthclient.Height dc.SelectObjectjunk //call draw routine here that makes GDI calls DrawImageampdcCStringquotBitmapquot //put the data on the clipboard SetClipboardDataCF_BITMAPjunk-gtm_hObject CloseClipboard //copy has been made on clipboard so we can delete delete junk 如下示例代码是从剪贴板上取得一张位图将它粘贴到客户区DC中。
if OpenClipboard //Get the clipboard data HBITMAP handle HBITMAPGetClipboardDataCF_BITMAP CBitmap bm CBitmap::FromHandlehandle CClientDC cdcthis CDC dc dc.CreateCompatibleDCampcdc dc.SelectObjectbm cdc.BitBlt00200200ampdc00SRCCOPY CloseClipboard 建立并使用你自己定做的数据格式 如果你要拷贝、粘贴其它格式的数据可以用RegisterClipboardFormat API函数先将此格式注册然后就可以“为所欲为”了。
这简直是太有用了尤其是在我们自己的应用程序中拷贝资料。
假设我们有下面的结构 struct MyFormatData long val1 int val2 想将此结构的数据拷贝到剪贴板上。
可以这样实现 UINT format RegisterClipboardFormatquotMY_CUSTOM_FORMATquot ifOpenClipboard //make some dummy data MyFormatData data data.val1 100 data.val2 200 //allocate some global memory HGLOBAL clipbuffer EmptyClipboard clipbuffer GlobalAllocGMEM_DDESHARE sizeofMyFormatData MyFormatData buffer MyFormatDataGlobalLockclipbuffer