日本国产亚洲-日本国产一区-日本国产一区二区三区-日本韩国欧美一区-日本韩国欧美在线-日本韩国欧美在线观看

當(dāng)前位置:雨林木風(fēng)下載站 > 技術(shù)開(kāi)發(fā)教程 > 詳細(xì)頁(yè)面

Visual C++剪貼板設(shè)置不完全攻略

Visual C++剪貼板設(shè)置不完全攻略

更新時(shí)間:2021-11-16 文章作者:未知 信息來(lái)源:網(wǎng)絡(luò) 閱讀次數(shù):

    經(jīng)常在論壇上見(jiàn)到一些使用者詢(xún)問(wèn)如何在Visual C++中如何實(shí)現(xiàn)對(duì)剪貼板的操作,其實(shí)在VC++/MFC中是相當(dāng)簡(jiǎn)單的。本文主要介紹了如下內(nèi)容:
1、文本內(nèi)容的操作
2、WMF數(shù)據(jù)的操作
3、位圖的操作
4、設(shè)置使用自定義格式
5、感知剪貼板內(nèi)容的改變
6、自動(dòng)將數(shù)據(jù)粘貼到另一應(yīng)用程序窗口

一、文本內(nèi)容的操作
下面的代碼示范了如何將文本內(nèi)容復(fù)制到剪貼板:

Cstring source;
//文本內(nèi)容保存在source變量中
if(openClipboard())
{
HGLOBAL clipbuffer;
char * buffer;
EmptyClipboard();
clipbuffer = GlobalAlloc(GMEM_DDESHARE, dource.GetLength()+1);
buffer = (char*)GlobalLock(clipbuffer);
Strcpy(buffer, LPCSTR(source));
GlobalUnlock(clipbuffer);
SetClipboardData(CF_TEXT,clipbuffer);
CloseClipboard();
}

下面的代碼顯示了如何從剪貼板上獲得文本內(nèi)容:

char * buffer = NULL;
//打開(kāi)剪貼板
CString fromClipboard;
if ( OpenClipboard() )
{
HANDLE hData = GetClipboardData(CF_TEXT);
char * buffer = (char*)GlobalLock(hData);
fromClipboard = buffer;
GlobalUnlock(hData);
CloseClipboard();
}

二、WMF數(shù)據(jù)的操作

  在剪貼板上讀寫(xiě)圖象數(shù)據(jù)是非常有用的功能,并且實(shí)現(xiàn)起來(lái)也很簡(jiǎn)單。下面的代碼顯示了如何將擴(kuò)展圖元文件復(fù)制到剪貼板:

if(OpenClipboard());
{
EmptyClipboard();

//創(chuàng)建圖元文件DC
CMetaFileDC * cDC = new CMetaFileDC();
cDC->CreateEnhanced(GetDC(),NULL,NULL,"the_name");

//調(diào)用繪圖例程

//關(guān)閉CMetafileDC并獲得它的句柄
HENHMETAFILE handle = cDC->CloseEnhanced();

//復(fù)制到剪貼板
SetClipBoardData(CF_ENHMETAFILE,handle);
CloseClipboard();

//刪除dc
delete cDC;
}

下面的代碼演示了從剪貼板獲得圖元文件并將其繪制到client DC上:

if(OpenClipboard())
{
//獲得剪貼板數(shù)據(jù)
HENMETAFILE handle = (HENMETAFILE)GetClipboardData(CF_ENHMETAFILE);

//顯示
CClientDC dc(this);
CRect client(0,0,200,200);
dc.PlayMetaFile(handle,client);

//關(guān)閉剪貼板
CloseClipboard();
}
三、位圖的操作


位圖的操作稍微復(fù)雜一點(diǎn),下面這個(gè)例子顯示了如何在剪貼板保存位圖:

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"));

//復(fù)制數(shù)據(jù)到剪貼板
SetClipboardData(CF_BITMAP,junk->m_hObject);
CloseClipboard();

delete junk;
}

下面的代碼顯示了如何從剪貼板上獲得位圖數(shù)據(jù):

if(OpenClipboard())
{
//獲得剪貼板數(shù)據(jù)
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();
}

四、設(shè)置并使用自定義格式

使用RegisterClipboardFormat()函數(shù),可以復(fù)制和粘貼任何你需要的數(shù)據(jù)類(lèi)型。比如我們有以下一個(gè)數(shù)據(jù)類(lèi)型:

struct MyFormatData
{
long val1;
int val2;
};

我們要把它復(fù)制到剪貼板,可以使用如下的代碼:

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 = (MyFormatData*)GlobalLock(clipbuffer);

//保存到內(nèi)存
*buffer = data;

//保存到剪貼板
GlobalUnlock(clipbuffer);
SetClipboardData(format,clipbuffer);
CloseClipboard();
}

讀取數(shù)據(jù)使用以下代碼:

UINT format = RegisterClipboardFormat("MY_CUSTOM_FORMAT");
MyFormatData data;
if(Openclipboard())
{
HANDLE hData =GetClipboardData(format);
MyFormatData * buffer = (MyFormatData*)GlobalLock(hData);

data = *buffer;

GlobalUnlock(hData);
CloseClipboard();
}

五、感知剪貼板內(nèi)容的改變

通過(guò)Windows消息可以感知剪貼板內(nèi)容是否發(fā)生改變,代碼如下:

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

六、自動(dòng)將數(shù)據(jù)粘貼到另一應(yīng)用程序窗口

只需獲得相應(yīng)窗口的句柄,并發(fā)送一個(gè)消息就可以了:

SendMessage(m_hTextWnd, WM_PASTE, 0, 0);

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類(lèi)教程下載

系統(tǒng)下載排行

主站蜘蛛池模板: 国产亚洲精品视频中文字幕 | 久久精品亚洲日本波多野结衣 | 曰本在线观看 | 久久国产精品最新一区 | 国产一区二区三区不卡在线观看 | 福利盒子手机看片 | 热久久综合网 | 亚洲精品亚洲人成在线 | 国自产精品手机在线视频香蕉 | 久久一次| 日韩欧美小说 | 99久久久国产精品免费牛牛四川 | 狠狠入 | 男女性高爱潮免费看 | 国产欧美一区二区成人影院 | 久久国产一片免费观看 | 99pao成人国产永久免费视频 | 欧美日韩亚洲国产一区二区三区 | 视频国产精品 | 欧美国产日韩1区俺去了 | 私人毛片免费高清影视院 | 日韩在线观看一区二区不卡视频 | 国产精品极品美女自在线观看免费 | 欧美色视频免费高清播放 | 天天操夜夜夜 | 最新国产在线播放 | 免费精品久久久久久中文字幕 | 日本xxx在线观看 | 欧美一级片观看 | 国产精品福利久久久久久小说 | 日本高清在线观看视频www | 国产在线小视频 | 日韩欧美在线观看视频一区二区 | 在线播放 亚洲 | 久久精品国产精品青草不卡 | 九九久久国产精品免费热6 九九久久精品 | 国产中的精品一区的 | 久久精品亚洲精品国产色婷 | 日韩精品在线免费观看 | 欧美日韩一区二区视频图片 | 啪啪免费视频网站 |