一、創建一個基於對話框的應用程序,界面以下:ui
二、對兩個按鈕進行消息響應:this
1 void CChipBoardOperateDlg::OnBnClickedBtnCopycb() 2 { 3 // TODO: 在此添加控件通知處理程序代碼 4 if( !OpenClipboard() ) 5 { 6 AfxMessageBox( _T("Cannot open the Clipboard!") ); 7 return; 8 } 9 10 // 將剪貼板內容清空,釋放數據資源,而後指定當前打開剪貼板的窗口爲剪貼板的全部制 11 if( !EmptyClipboard() ) 12 { 13 AfxMessageBox( _T("Cannot empty the Clipboard!") ); 14 return; 15 } 16 17 // 取回當前控件的數據,hData開闢全局內存區域,存放數據 18 CStringW str; 19 this->GetDlgItemTextW( IDC_EDIT_COPYCB, str ); 20 size_t cbStr = (str.GetLength()+1)*sizeof(TCHAR); 21 HGLOBAL hData = GlobalAlloc(GMEM_MOVEABLE, cbStr); 22 memcpy_s( GlobalLock(hData), cbStr, str.LockBuffer(), cbStr ); 23 GlobalUnlock( hData ); 24 str.UnlockBuffer(); 25 26 // 選擇合適的格式 27 UINT uiFormat = (sizeof(TCHAR)==sizeof(WCHAR)) ? CF_UNICODETEXT : CF_TEXT; 28 if(::SetClipboardData( uiFormat, hData ) == NULL ) 29 { 30 AfxMessageBox(_T("Unable to set Clipboard data")); 31 CloseClipboard(); 32 return; 33 } 34 CloseClipboard(); 35 } 36 37 38 void CChipBoardOperateDlg::OnBnClickedBtnPastecb() 39 { 40 if( !OpenClipboard() ) 41 { 42 AfxMessageBox( _T("Cannot open the Clipboard!") ); 43 return; 44 } 45 46 // 選擇合適的格式(讀取的時候不用得到剪貼板的擁有權) 47 UINT uiFormat = (sizeof(TCHAR)==sizeof(WCHAR) ? CF_UNICODETEXT : CF_TEXT ); 48 HANDLE hData = ::GetClipboardData( uiFormat ); 49 if( NULL == hData ) 50 { 51 AfxMessageBox( _T("Unable to get Clipboard data!") ); 52 CloseClipboard(); 53 return; 54 } 55 CStringW str; 56 LPCTSTR lpdata = (LPCTSTR)GlobalLock(hData); 57 this->SetDlgItemTextW( IDC_EDIT_PASTECB, lpdata ); 58 GlobalUnlock( hData ); 59 CloseClipboard(); 60 }
三、在上邊的文本框中輸入數據,而後單擊SetClipboardData按鈕打開剪貼板,將該文本框中數據寫入剪貼板,最後關閉剪貼板;spa
而單擊下面的GetClipboardData按鈕將打開剪貼板,從剪貼板內讀取數據,顯示到下面的文本框中,最後關閉剪貼板。code
爲了顯示操做結果的細節,能夠打開Word的剪貼板觀看過程,效果以下:orm