六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

Visual C++剪貼板設置不完全攻略

[摘要]經常在論壇上見到一些使用者詢問如何在Visual C++中如何實現對剪貼板的操作,其實在VC++/MFC中是相當簡單的。本文主要介紹了如下內容:1、文本內容的操作2、WMF數據的操作3、位圖的操作4...
    經常在論壇上見到一些使用者詢問如何在Visual C++中如何實現對剪貼板的操作,其實在VC++/MFC中是相當簡單的。本文主要介紹了如下內容:
1、文本內容的操作
2、WMF數據的操作
3、位圖的操作
4、設置使用自定義格式
5、感知剪貼板內容的改變
6、自動將數據粘貼到另一應用程序窗口

一、文本內容的操作
下面的代碼示范了如何將文本內容復制到剪貼板:

Cstring source;
//文本內容保存在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();
}

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

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

二、WMF數據的操作

  在剪貼板上讀寫圖象數據是非常有用的功能,并且實現起來也很簡單。下面的代碼顯示了如何將擴展圖元文件復制到剪貼板:

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

//創建圖元文件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())
{
//獲得剪貼板數據
HENMETAFILE handle = (HENMETAFILE)GetClipboardData(CF_ENHMETAFILE);

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

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


位圖的操作稍微復雜一點,下面這個例子顯示了如何在剪貼板保存位圖:

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

//復制數據到剪貼板
SetClipboardData(CF_BITMAP,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,0,200,200,&dc,0,0,SRCCOPY);

CloseClipboard();
}

四、設置并使用自定義格式

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

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

//保存到內存
*buffer = data;

//保存到剪貼板
GlobalUnlock(clipbuffer);
SetClipboardData(format,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消息可以感知剪貼板內容是否發生改變,代碼如下:

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

六、自動將數據粘貼到另一應用程序窗口

只需獲得相應窗口的句柄,并發送一個消息就可以了:

SendMessage(m_hTextWnd, WM_PASTE, 0, 0);


主站蜘蛛池模板: 奇米网狠狠网 | 在线综合亚洲欧美网站天堂 | 亚洲欧美在线一区二区 | 午夜免费看片 | 日韩风月片 | 天天曰天天| 视频一区二区三区蜜桃麻豆 | 四虎影视最新 | 亚洲成a人片77777kkkk | 午夜色a大片在线观看免费 午夜骚片 | 日日搞夜夜操 | 天美蜜桃精东乌鸦果冻麻豆 | 日本色影院 | 一本久道久久综合婷婷 | 日本黄色动态图 | 天天爽天天色 | 一级激情视频 | 亚洲国产精品久久久天堂麻豆 | 日本乱人伦片中文字幕三区 | 深夜福利欧美 | 亚洲精品国产综合久久一线 | 日本高清视频在线免费观看 | 日本欧美一区二区三区 | 一级做性色a爰片久久毛片 一级做受视频免费是看美女 | 亚洲成片 | 天堂在线网站 | 天天躁日日躁狠狠躁一级毛片 | 思思久久99热只有精品 | 亚洲人成激情在线播放 | 啪啪免费网 | 性刺激性色爽爱小说 | 午夜国产精品理论片久久影院 | 日韩亚洲欧美在线 | 特黄色片 | 色综合88| 视频h在线| 手机看片国产欧美日韩高清 | 在线观看视频污 | 全国男人的天堂网站 | 天天综合网在线 | 亚洲国产精品成人午夜在线观看 |