?? 17.1.2 數(shù)據(jù)接收.txt
字號:
17.1.2 數(shù)據(jù)接收
現(xiàn)在開始編寫接收端的程序。雙擊 Clipboard程序主界面對話框資源上的【接收】按鈕, VC++將為
我們自動(dòng)創(chuàng)建該按鈕的單擊命令響應(yīng)函數(shù): OnBtnRecv,然后在此函數(shù)中添加代碼以實(shí)現(xiàn)從剪貼板接
收數(shù)據(jù)的功能,結(jié)果如例 17-2所示。
例17-2
void CClipboardDlg : :OnBtnRecv()
// TODO : Add your control notification handler code here
if(OpenClipboard())
if(IsClipboardFormatAvailable(CF_TEXT) )
HANDLE hClip ;
char *pBuf ;
hClip=GetClipboardData(CF_TEXT) ;
pBuf= (char*)GlobalLock(hClip) ;
GlobalUnlock(hClip) ;
SetDlgItemText(IDC_EDIT_RECV, pBuf) ;
CloseClipboard() ;
同樣地,在接收端也需要調(diào)用 OpenClipboard函數(shù)打開剪貼板。但要注意,在接收端不應(yīng)調(diào)用
EmptyClipboard函數(shù),因?yàn)檫@時(shí)是從剪貼板中得到數(shù)據(jù)。在獲得數(shù)據(jù)之前,應(yīng)該查看一下剪貼板中
是否有我們想要的特定格式的數(shù)據(jù),這可以通過調(diào)用 IsClipboardFOI matAvailable函數(shù)實(shí)現(xiàn),該
函數(shù)的原型聲明如下所示 :
BOOLIsClipboardFormatAvailable(UINT format} ;
IsClipboardFormatAvailable函數(shù)用來檢測剪貼板上是否包含了參數(shù)format指定的特定格式的數(shù)
據(jù)。如果剪貼板上的數(shù)據(jù)格式可用,那么該函數(shù)返回非O值:否則返回O值。因此在OnBtnRecv函數(shù)中
通過調(diào)用IsClipboardFmmatAvailable函數(shù),判斷剪貼板上文本格式的數(shù)據(jù)是否可用,若可用,再接
收剪貼板上的數(shù)據(jù)。
從剪貼板上獲得數(shù)據(jù)應(yīng)該調(diào)用GetClipboardData函數(shù),該函數(shù)將從剪貼板中獲得指定格式的數(shù)據(jù),
當(dāng)然,前提是當(dāng)前已經(jīng)打開了剪貼板。 GetClipboardData函數(shù)的原型聲明如下所示:
HANDLE GetClipboardData(UINT uFormat) ;
GetClipboardData函數(shù)根據(jù)參數(shù) uFormat指定的格式,返回一個(gè)以指定格式存在的剪貼板對象的句
柄。所以,上述 OnBtnRecv函數(shù)中定義一個(gè)句柄變量:hClip,然后調(diào)用 GetClipboardData函數(shù)得到
文本格式 CCFTEXT)的數(shù)據(jù),并把該數(shù)據(jù)句柄保存到 hClip變量中。
同樣,如果想要使用指針類型的內(nèi)存地址,仍然需要調(diào)用GlobalLock函數(shù)進(jìn)行一個(gè)轉(zhuǎn)換,即把句柄
ChClip)轉(zhuǎn)換為地址CpBuf)。接著,就可以調(diào)用GlobalUnlock函數(shù)對內(nèi)存對象進(jìn)行解鎖。然后,可以
調(diào)用SetDlgltemText函數(shù)將從剪貼板中獲得的數(shù)據(jù)放置到接收編輯框控件中。
最后,一定要記住調(diào)用CloseClipboard函數(shù)關(guān)閉剪貼板。,
Build井運(yùn)行Clipboard程序,首先,在窗口左邊的編輯框中任意輸入一些數(shù)據(jù)。之后,單擊【發(fā)送】
按鈕,接著單擊【接收】按鈕,可以看到,這時(shí)窗口右邊的編輯框中就收到了發(fā)送的數(shù)據(jù),程序運(yùn)
行結(jié)果如圖 17.3所示。
圖 17.3在同一個(gè)進(jìn)程中利用剪貼板實(shí)現(xiàn)數(shù)據(jù)發(fā)送和接收功能
另外,我們也可以在記事本程序中輸入一些數(shù)據(jù),并復(fù)制該數(shù)據(jù),然后,在本程序中單擊【接收】
按鈕,這時(shí),在窗口右邊的編輯框中也可以看到從記事本程序中復(fù)制的數(shù)據(jù)。讀者可以自行測試一
下。
因?yàn)榧糍N板是系統(tǒng)提供的,所有進(jìn)程都可以訪問它,所以可以采用剪貼板作為進(jìn)程間
通信的一種方式,并且正如讀者所看到的這樣,采用這種方式實(shí)現(xiàn)進(jìn)程間的通信,代碼的編寫比較
簡單。
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -