




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MFC中对剪切板的各种操作 2009-10-30 21:02:14标签:C+ 拷贝与粘贴文本 下边的源代码演示了如何将文本(包含在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() ) /Get the clipboard data HBITMAP handle = (HBITMAP)GetClipboardData(CF_BITMAP); CBitmap * bm = CBitmap:FromHandle(handle); CClientDC cdc(this); CDC dc; dc.CreateCompatibleDC(&cdc); dc.SelectObject(bm); cdc.BitBlt(0,0,200,200,&dc,0,0,SRCCOPY); CloseClipboard(); - 建立并使用你自己定做的数据格式 如果你要拷贝、粘贴其它格式的数据,可以用RegisterClipboardFormat() API函数先将此格式注册,然后就可以“为所欲为”了。这简直是太有用了,尤其是在我们自己的应用程序中拷贝资料。假设我们有下面的结构: struct MyFormatData long val1; int val2; ; 想将此结构的数据拷贝到剪贴板上。可以这样实现: UINT format = RegisterClipboardFormat(MY_CUSTOM_FORMAT); if(OpenClipboard() /make some dummy data MyFormatData data; data.val1 = 100; data.val2 = 200; /allocate some global memory HGLOBAL clipbuffer; EmptyClipboard(); clipbuffer = GlobalAlloc(GMEM_DDESHARE, sizeof(MyFormatData); MyFormatData * buffer = (MyFormatData*)GlobalLock(clipbuffer); /put the data into that memory *buffer = data; /Put it on the clipboard GlobalUnlock(clipbuffer); SetClipboardData(format,clipbuffer); CloseClipboard(); 想把它从剪贴板上读下来的话,也容易: /第二次调用时,此格式已经注册过了,读下来就行了 UINT format = RegisterClipboardFormat(MY_CUSTOM_FORMAT); MyFormatData data; if ( OpenClipboard() ) /get the buffer HANDLE hData = GetClipboardData(format); MyFormatData * buffer = (MyFormatData *)GlobalLock( hData ); /留一份儿当地拷贝 data = *buffer; GlobalUnlock( hData ); CloseClipboard(); 取得剪贴板变化通知(Getting notified of clipboard changes) 一旦剪贴板上的内容发生改变,我们都希望能够获知(经由windows消息),这是很有用的。你可以用函数SetClipboardViewer()来捕获WM_DRAWCLIPBOARD消息。 在你的初始化代码中调用: SetClipboardViewer(); /add us to clipboard change notification chain 在你的消息映射(message map)中添加: ON_MESSAGE(WM_DRAWCLIPBOARD, OnClipChange) /clipboard change notification 将其定义为: afx_msg void OnClipChange(); /clipboard change notification 实现为: void CDetectClipboardChangeDlg:OnClipChange() /do something here, for example CTime time = CTime:GetCurrentTime(); SetDlgItemText(IDC_CHANGED_DATE,time.Format(%a, %b %d, %Y - %H:%M:%S); D
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 创意类比赛活动方案
- 北城街道环保活动方案
- 公司月度会议策划方案
- 公司职工合唱团活动方案
- 公司暑期献爱心活动方案
- 公司新春团拜会活动方案
- 公司特色活动方案
- 公司气排球活动方案
- 公司社工活动方案
- 公司经营业务策划方案
- 行业特定市场调研方法与技巧分享
- 2025年高考数学全国二卷试题真题解读及答案详解
- 2025山煤国际井下操作技能人员招聘150人(山西)笔试参考题库附带答案详解析集合
- 大骨节考试题及答案
- 2025年小学五年级数学期末冲刺卷:数学基础知识巩固
- CSCO恶性血液病诊疗指南(2025)解读
- T/CHTS 20036-2023公路桥梁用硬聚氯乙烯声测管
- 软式内镜清洗消毒技术规范2025
- 《动物保定技术》课件
- 北京市朝阳区2023-2024学年四年级下学期语文期末考试卷(含答案)
- 上样合作协议合同协议
评论
0/150
提交评论