欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
VC 剪貼板操作_knightzwy

拷貝與粘貼文本

下邊的源代碼演示了如何將文本(包含在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();
}
 

反過(guò)來(lái),下面的代碼是用來(lái)實(shí)現從剪貼板上取得文本的。

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)數據

你想在你的程序中往剪貼板上“畫(huà)”以及向剪貼板讀取圖形嗎?請放心,這個(gè)――不難!示范代碼如下,其實(shí)現的是往剪貼板上寫(xiě)一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;
}

好啦,該演示反過(guò)來(lái)怎么做的代碼了。我們從剪貼板上取得metafile并將其畫(huà)到自己的應用程序的客戶(hù)區DC(設備上下文)上(僅僅是個(gè)試驗而已,實(shí)際上你可能更想將它拷貝一份兒)。

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)

拷貝和粘貼位圖可是需要一些微妙的處理的,不過(guò)基本的思想還是一樣。請看下面的代碼。

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;
}
 
如下示例代碼是從剪貼板上取得一張位圖,將它粘貼到客戶(hù)區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函數先將此格式注冊,然后就可以“為所欲為”了。這簡(jiǎn)直是太有用了,尤其是在我們自己的應用程序中拷貝資料。假設我們有下面的結構:

struct MyFormatData
{
          long val1;
          int val2;
};

想將此結構的數據拷貝到剪貼板上??梢赃@樣實(shí)現:

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();
}

想把它從剪貼板上讀下來(lái)的話(huà),也容易:

//第二次調用時(shí),此格式已經(jīng)注冊過(guò)了,讀下來(lái)就行了
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)

一旦剪貼板上的內容發(fā)生改變,我們都希望能夠獲知(經(jīng)由windows消息),這是很有用的。你可以用函數SetClipboardViewer()來(lái)捕獲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
 
實(shí)現為:
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"));
 
          DisplayClipboardText();
}

將數據粘貼到其它應用程序窗口中的方法

我覺(jué)得如果能把文本拷貝到剪貼板上(參見(jiàn)上面的代碼),然后再在另外一個(gè)應用程序中將這些文本粘貼過(guò)來(lái),那樣才有用。我寫(xiě)了一個(gè)很不錯的本地應用程序,此程序使用了含有此技術(shù)的第三方的語(yǔ)言翻譯包。很簡(jiǎn)單,僅是取得目標窗口的句柄,并向它發(fā)送“PASTE”消息就OK了。

          SendMessage(m_hTextWnd, WM_PASTE, 0, 0);
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Visual C++剪貼板操作不完全攻略
UI自動(dòng)化控制微信發(fā)送文件【解決了一個(gè)無(wú)人回答的難題,Pywin32設置文件到剪切板】
VC++ MFC 使用剪切板的方法
mfc剪切板總結
復制任意文件或文件夾到剪貼板
【MoreWindows工作筆記12】WM
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久