剪贴板:
一、将数据送到剪贴板
<1>、内存配置
HGLOBAL hGlobal ;
hGlobal = GlobalAlloc (GHND | GMEM_SHARE,(lstrlen (pText) + 1) * sizeof (TCHAR)) ;
为什么不用malloc: 在Windows中执行的应用程序之间必须要共享剪贴簿所储存的内存块
<2>、锁定刚分配的内存
PTSTR pGlobal ;
pGlobal = (TCHAR*)GlobalLock (hGlobal);
为什么要锁定?Windows将固定虚拟内存中的地址,不再移动那块内存
<3>、写入数据
lstrcpy (pGlobal, pText) ;
<4>、解锁定
GlobalUnlock (hGlobal) ;
这将使Windows可以在虚拟内存中移动内存块.(不要把锁定的内存句柄交给剪贴簿)
<5>、打开剪贴簿并把它清空
OpenClipboard () ;
EmptyClipboard () ;
<6>、利用CF_TEXT标识符把内存句柄交给剪贴簿,关闭剪贴簿:
SetClipboardData (CF_TEXT, hGlobal) ;
CloseClipboard () ;
二、从剪贴簿获取数据
<1>、打开剪贴簿
OpenClipboard () ;
<2>、确定剪贴簿是否含有文字
HGLOBAL hGlobal ;
if( hGlobal = GetClipboardData(CF_TEXT) )
{
}
如果hGlobal为NULL则说明 剪贴簿中没有文字. 得到的句柄并不属于使用者程序-它属于剪贴簿
<3>、锁定剪贴簿
PTSTR pGlobal ;
pGlobal = (TCHAR*)GlobalLock (hGlobal);
<4>、配置一块与剪贴簿数据块大小相同的内存块,并配置一个指向该块的指标:
PTSTR pText;
pText = (TCHAR*) malloc (GlobalSize (hGlobal)) ;
<5>、读出数据
lstrcpy (pText, pGlobal) ;
<6>、解锁定
GlobalUnlock (hGlobal) ;
<7>、关闭剪贴簿
CloseClipboard () ;