1、建立一个基于对话框的应用程序,界面如下:
2、对两个按钮进行消息响应:
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 }
3、在上边的文本框中输入数据,然后单击SetClipboardData按钮打开剪贴板,将该文本框中数据写入剪贴板,最后关闭剪贴板;
而单击下面的GetClipboardData按钮将打开剪贴板,从剪贴板内读取数据,显示到下面的文本框中,最后关闭剪贴板。
为了显示操作结果的细节,可以打开Word的剪贴板观看过程,效果如下: