剪贴板操作"/>
[转] MFC剪贴板操作
本文主要介绍了VC++语句语言/MFC中如下内容的剪贴板操作:
1、文本内容的操作
2、WMF数据的操作
3、位图的操作
4、设置应用自定义各式
5、感知剪贴板内容的改变
6、自动将数据粘贴到另一应用程式窗口
一、文本内容的操作
下面的代码示范了怎能将文本内容复制到剪贴板(Unicode编码的先转化为ASCII):
1 CString source; 2 //文本内容保存在source变量中 3 if( OpenClipboard() ) 4 { 5 HGLOBAL clipbuffer; 6 char * buffer; 7 EmptyClipboard(); 8 clipbuffer = GlobalAlloc(GMEM_DDESHARE, source.GetLength()+1); 9 buffer = (char*)GlobalLock(clipbuffer); 10 strcpy(buffer, LPCSTR(source)); 11 GlobalUnlock(clipbuffer); 12 SetClipboard数据(CF_TEXT,clipbuffer); 13 CloseClipboard(); 14 }
下面的代码呈现了怎能从剪贴板上获得文本内容:
1 char * buffer = NULL; 2 //打开剪贴板 3 CString fromClipboard; 4 if ( OpenClipboard() ) 5 { 6 HANDLE h数据 = GetClipboard数据(CF_TEXT); 7 char * buffer = (char*)GlobalLock(h数据); 8 fromClipboard = buffer; 9 GlobalUnlock(h数据); 10 CloseClipboard(); 11 }
二、WMF数据的操作
在剪贴板上读写图象数据是非比寻常有用的功能,并且呈现起来也很简单。下面的代码呈现了怎能将扩展图元文档复制到剪贴板:
1 if(OpenClipboard()); 2 { 3 EmptyClipboard(); 4 //创建图元文档DC 5 CMetaFileDC * cDC = new CMetaFileDC(); 6 cDC->CreateEnhanced(GetDC(),NULL,NULL,"the_name"); 7 //调用绘图例程 8 //关闭CMetafileDC并获得它的句柄 9 HENHMETAFILE handle = cDC->CloseEnhanced(); 10 //复制到剪贴板 11 SetClipBoard数据(CF_ENHMETAFILE,handle); 12 CloseClipboard(); 13 //删除dc 14 delete cDC; 15 }
下面的代码演示了从剪贴板获得图元文档并将其绘制到client DC上:
if(OpenClipboard()) {//获得剪贴板数据HENMETAFILE handle = (HENMETAFILE)GetClipboard数据(CF_ENHMETAFILE);//呈现CClientDC dc(this);CRect client(0,0,200,200);dc.PlayMetaFile(handle,client);//关闭剪贴板 CloseClipboard(); }
三、位图的操作
位图的操作稍微复杂一点,下面那个例子呈现了怎能在剪贴板保存位图:
1 if(OpenClipboard()) 2 { 3 EmptyClipboard(); 4 CBitmap * junk = new CBitmap(); 5 CClientDC cdc(this); 6 CDC dc; 7 dc.CreateCompatibleDC(&cdc); 8 CRect client(0,0,200,200); 9 junk->CreateCompatibleBitmap(&cdc,client.Width(),client.Height()); 10 dc.SelectObject(junk); 11 DrawImage(&dc,CString("Bitmap")); 12 //复制数据到剪贴板 13 SetClipboard数据(CF_BITMAP,junk->m_hObject); 14 CloseClipboard(); 15 delete junk; 16 }
下面的代码呈现了怎能从剪贴板上获得位图数据:
1 if(OpenClipboard()) 2 { 3 //获得剪贴板数据 4 HBITMAP handle = (HBITMAP)GetClipboard数据(CF_BITMAP); 5 CBitmap * bm = CBitmap::FromHandle(handle); 6 CClientDC cdc(this); 7 CDC dc; 8 dc.CreateCompatibleDC(&cdc); 9 dc.SelectObject(bm); 10 cdc.BitBlt(0,0,200,200,&dc,0,0,SRCCOPY); 11 CloseClipboard(); 12 }
四、设置并应用自定义各式
应用RegisterClipboardFormat()参数,没出国疑问复制和粘贴任何你需求的数据TYPE。比如咱们有以下唯一的数据TYPE:
struct MyFormat数据 {long val1;int val2; };
咱们要把它复制到剪贴板,没出国疑问应用如下的代码:
UINT format = RegisterClipBoardFormat("MY_CUSTOM_FORMAT"); if(OpenClipboard()) {MyFormat数据 data;data.val1 = 100;data.val2 = 200;HGLOBAL clipbuffer;EmptyClipboard();clipbuffer = GlobalAlloc(GMEM_DDESHARE, sizeof(MyFormat数据));MyFormat数据 * buffer = (MyFormat数据*)GlobalLock(clipbuffer);//保存到内存*buffer = data;//保存到剪贴板 GlobalUnlock(clipbuffer);SetClipboard数据(format,clipbuffer);CloseClipboard(); }
读取数据应用以下代码:
UINT format = RegisterClipboardFormat("MY_CUSTOM_FORMAT"); MyFormat数据 data; if(Openclipboard()) {HANDLE h数据 =GetClipboard数据(format);MyFormat数据 * buffer = (MyFormat数据*)GlobalLock(h数据);data = *buffer;GlobalUnlock(h数据);CloseClipboard(); }
五、感知剪贴板内容的改变
经过win界面消息没出国疑问感知剪贴板内容也许除了改变,代码如下:
1 //In your initialization code call: 2 SetClipboardViewer(); //将咱们的程式添加到剪贴板观察链 3 //In your message map add: 4 ON_MESSAGE(WM_DRAWCLIPBOARD, OnClipChange) //添加Message handle 5 //Which is declared as: 6 afx_msg void OnClipChange(); 7 Finally implement: 8 void CDetectClipboardChangeDlg::OnClipChange() 9 { 10 CTime time = CTime::GetCurrentTime(); 11 SetDlgItemText(IDC_CHANGED_DATE,time.Format("%a, %b %d, %Y -- %H:%M:%S")); 12 DisplayClipboardText(); 13 }
转载于:.html
更多推荐
[转] MFC剪贴板操作
发布评论