西西軟件下載最安全的下載網站、值得信賴的軟件下載站!

首頁編程開發(fā)VC|VC++ → VC++語言實現(xiàn)MFC剪貼板操作實例代碼

VC++語言實現(xiàn)MFC剪貼板操作實例代碼

相關軟件相關文章發(fā)表評論 來源:cplusplus時間:2013/4/14 21:25:12字體大。A-A+

作者:佚名點擊:0次評論:0次標簽: 剪貼板

ArsClip剪貼板輔助工具V4.12 綠色免費版
  • 類型:數(shù)據庫類大。1.8M語言:英文 評分:6.6
  • 標簽:
立即下載
本文主要介紹了VC++語句語言/MFC中如下內容的剪貼板操作:

1、文本內容的操作
2、WMF數(shù)據的操作
3、位圖的操作
4、設置應用自定義各式
5、感知剪貼板內容的改變
6、自動將數(shù)據粘貼到另一應用程式窗口

一、文本內容的操作
下面的代碼示范了怎能將文本內容復制到剪貼板(Unicode編碼的先轉化為ASCII):

CString source;
//文本內容保存在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();
}
下面的代碼呈現(xiàn)了怎能從剪貼板上獲得文本內容:

char * buffer = NULL;
//打開剪貼板
CString fromClipboard;
if ( OpenClipboard() )
{
HANDLE hData = GetClipboardData(CF_TEXT);
char * buffer = (char*)GlobalLock(hData);
fromClipboard = buffer;
GlobalUnlock(hData);
CloseClipboard();
}
二、WMF數(shù)據的操作
在剪貼板上讀寫圖象數(shù)據是非比尋常有用的功能,并且呈現(xiàn)起來也很簡單。下面的代碼呈現(xiàn)了怎能將擴展圖元文檔復制到剪貼板:

if(OpenClipboard());
{
EmptyClipboard();
//創(chuàng)建圖元文檔DC
CMetaFileDC * cDC = new CMetaFileDC();
cDC->CreateEnhanced(GetDC(),NULL,NULL,"the_name");
//調用繪圖例程
//關閉CMetafileDC并獲得它的句柄
HENHMETAFILE handle = cDC->CloseEnhanced();
//復制到剪貼板
SetClipBoardData(CF_ENHMETAFILE,handle);
CloseClipboard();
//刪除dc
delete cDC;
}
下面的代碼演示了從剪貼板獲得圖元文檔并將其繪制到client DC上:

if(OpenClipboard())
{
//獲得剪貼板數(shù)據
HENMETAFILE handle = (HENMETAFILE)GetClipboardData(CF_ENHMETAFILE);
//呈現(xiàn)
CClientDC dc(this);
CRect client(0,0,200,200);
dc.PlayMetaFile(handle,client);
//關閉剪貼板
CloseClipboard();
}
三、位圖的操作
位圖的操作稍微復雜一點,下面那個例子呈現(xiàn)了怎能在剪貼板保存位圖:

if(OpenClipboard())
{
EmptyClipboard();
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);
DrawImage(&dc,CString("Bitmap"));
//復制數(shù)據到剪貼板
SetClipboardData(CF_BITMAP,junk->m_hObject);
CloseClipboard();
delete junk;
}
下面的代碼呈現(xiàn)了怎能從剪貼板上獲得位圖數(shù)據:

if(OpenClipboard())
{
//獲得剪貼板數(shù)據
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()參數(shù),沒出國疑問復制和粘貼任何你需求的數(shù)據TYPE。比如咱們有以下唯一的數(shù)據TYPE:
struct MyFormatData
{
long val1;
int val2;
};

咱們要把它復制到剪貼板,沒出國疑問應用如下的代碼:

UINT format = RegisterClipBoardFormat("MY_CUSTOM_FORMAT");
if(OpenClipboard())
{
MyFormatData data;
data.val1 = 100;
data.val2 = 200;
HGLOBAL clipbuffer;
EmptyClipboard();
clipbuffer = GlobalAlloc(GMEM_DDESHARE, sizeof(MyFormatData));
MyFormatData * buffer = (MyFormat數(shù)據*)GlobalLock(clipbuffer);
//保存到內存
*buffer = data;
//保存到剪貼板
GlobalUnlock(clipbuffer);
SetClipboardData(format,clipbuffer);
CloseClipboard();
}
讀取數(shù)據應用以下代碼:

UINT format = RegisterClipboardFormat("MY_CUSTOM_FORMAT");
MyFormatData data;
if(Openclipboard())
{
HANDLE hData =GetClipboardData(format);
MyFormatData * buffer = (MyFormatData*)GlobalLock(hData);
data = *buffer;
GlobalUnlock(hData);
CloseClipboard();
}
五、感知剪貼板內容的改變
經過win界面消息沒出國疑問感知剪貼板內容也許除了改變,代碼如下:

//In your initialization code call:
SetClipboardViewer(); //將咱們的程式添加到剪貼板觀察鏈
//In your message map add:
ON_MESSAGE(WM_DRAWCLIPBOARD, OnClipChange) //添加Message handle
//Which is declared as:
afx_msg void OnClipChange();
Finally implement:
void CDetectClipboardChangeDlg::OnClipChange()
{
CTime time = CTime::GetCurrentTime();
SetDlgItemText(IDC_CHANGED_DATE,time.Format("%a, %b %d, %Y -- %H:%M:%S"));
DisplayClipboardText();

    相關評論

    閱讀本文后您有什么感想? 已有人給出評價!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

    發(fā)表評論 查看所有評論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字數(shù): 0/500 (您的評論需要經過審核才能顯示)
    推薦文章

    沒有數(shù)據

      沒有數(shù)據
    最新文章
      沒有數(shù)據