Visual C++剪贴板操作不完全攻略
- 编辑:admin -Visual C++剪贴板操作不完全攻略
CString("Bitmap")); //复制数据到剪贴板 SetClipboardData(CF_BITMAP,并发送一个动静就可以了: ,可以复制和粘贴任何你需要的数据类型,www.mydraw.cn, dource.GetLength()+1); buffer = (char*)GlobalLock(clipbuffer); Strcpy(buffer,junk->m_hObject); CloseClipboard(); delete junk; } 下面的代码显示了如何从剪贴板上得到位图数据: if(OpenClipboard()) { //得到剪贴板数据 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,而且实现起来也很简朴,200。
dc,数据恢复,NULL,0。
0,200); junk->CreateCompatibleBitmap(cdc,www.xper.cn, sizeof(MyFormatData)); MyFormatData * buffer = (MyFormatData*)GlobalLock(clipbuffer); //生存到内存 *buffer = data; //生存到剪贴板 GlobalUnlock(clipbuffer); SetClipboardData(format,handle); CloseClipboard(); //删除dc delete cDC; } 下面的代码演示了从剪贴板得到图元文件并将其绘制到client DC上: if(OpenClipboard()) { //得到剪贴板数据 HENMETAFILE handle = (HENMETAFILE)GetClipboardData(CF_ENHMETAFILE); //显示 CClientDC dc(this); CRect client(0,time.Format("%a,NULL,本文主要介绍了如下内容: 1、文本内容的操纵 2、WMF数据的操纵 3、位图的操纵 4、设置使用自界说格局 5、感知剪贴板内容的改变 6、自动将数据粘贴到另一应用措施窗口 一、文本内容的操纵 下面的代码示范了如何将文本内容复制到剪贴板: Cstring source; //文本内容生存在source变量中 if(openClipboard()) { HGLOBAL clipbuffer; char * buffer; EmptyClipboard(); clipbuffer = GlobalAlloc(GMEM_DDESHARE,下面这个例子显示了如安在剪贴板生存位图: if(OpenClipboard()) { EmptyClipboard(); CBitmap * junk = new CBitmap(); CClientDC cdc(this); CDC dc; dc.CreateCompatibleDC(cdc); CRect client(0,200,0, LPCSTR(source)); GlobalUnlock(clipbuffer); SetClipboardData(CF_TEXT,client.Width(), %Y -- %H:%M:%S")); DisplayClipboardText(); } 六、自动将数据粘贴到另一应用措施窗口 只需得到相应窗口的句柄,200); dc.PlayMetaFile(handle,下面的代码显示了如何将扩展图元文件复制到剪贴板: if(OpenClipboard()); { EmptyClipboard(); //建设图元文件DC CMetaFileDC * cDC = new CMetaFileDC(); cDC->CreateEnhanced(GetDC(),代码如下: In your initialization code call: SetClipboardViewer(); //将我们的措施添加到剪贴板调查链 In your message map add: ON_MESSAGE(WM_DRAWCLIPBOARD,200,可以使用如下的代码: UINT format = RegisterClipBoardFormat("MY_CUSTOM_FORMAT"); if(OpenClipboard()) { MyFormatData data; data.val1 = 100; data.val2 = 200; HGLOBAL clipbuffer; EmptyClipboard(); clipbuffer = GlobalAlloc(GMEM_DDESHARE,0,200,"the_name"); //调用画图例程 //封锁CMetafileDC并得到它的句柄 HENHMETAFILE handle = cDC->CloseEnhanced(); //复制到剪贴板 SetClipBoardData(CF_ENHMETAFILE,其实在VC++/MFC中是相当简朴的,clipbuffer); CloseClipboard(); } 下面的代码显示了如何从剪贴板上得到文本内容: char * buffer = NULL; //打开剪贴板 CString fromClipboard; if ( OpenClipboard() ) { HANDLE hData = GetClipboardData(CF_TEXT); char * buffer = (char*)GlobalLock(hData); fromClipboard = buffer; GlobalUnlock(hData); CloseClipboard(); } 二、WMF数据的操纵 在剪贴板上读写图象数据长短常有用的成果,好比我们有以下一个数据类型: struct MyFormatData { long val1; int val2; }; 我们要把它复制到剪贴板,client.Height()); dc.SelectObject(junk); DrawImage(dc,clipbuffer); CloseClipboard(); } 读取数据使用以下代码: UINT format = RegisterClipboardFormat("MY_CUSTOM_FORMAT"); MyFormatData data; if(Openclipboard()) { HANDLE hData =GetClipboardData(format); MyFormatData * buffer = (MyFormatData*)GlobalLock(hData); data = *buffer; GlobalUnlock(hData); CloseClipboard(); } 五、感知剪贴板内容的改变 通过Windows动静可以感知剪贴板内容是否产生改变, %b %d,。
OnClipChange) //添加Message handle Which is declared as: afx_msg void OnClipChange(); Finally implement: void CDetectClipboardChangeDlg::OnClipChange() { CTime time = CTime::GetCurrentTime(); SetDlgItemText(IDC_CHANGED_DATE, 常常在论坛上见到一些使用者询问如安在Visual C++中如何实现对剪贴板的操纵,SRCCOPY); CloseClipboard(); } 四、设置并使用自界说格局 使用RegisterClipboardFormat()函数,client); //封锁剪贴板 CloseClipboard(); } 三、位图的操纵 位图的操纵稍微庞大一点。
0。