【这是之前学习MFC的时候找到的一篇关于剪贴板简单应用的文章,具体出处当时没有记录,抱歉。。。】
1、 建立一个基于对话框的应用程序,界面如下:
2、 对两个按钮进行消息响应:
void CChipBoardOperateDlg::OnBnClickedBtnCopycb()
{
// TODO: 在此添加控件通知处理程序代码
if(!OpenClipboard() )
{
AfxMessageBox( _T("Cannot open the Clipboard!") );
return;
}
// 将剪贴板内容清空,释放数据资源,然后指定当前打开剪贴板的窗口为剪贴板的所有制
if(!EmptyClipboard() )
{
AfxMessageBox( _T("Cannot empty the Clipboard!") );
return;
}
// 取回当前控件的数据,hData开辟全局内存区域,存放数据
CStringWstr;
this->GetDlgItemTextW( IDC_EDIT_COPYCB, str );
size_tcbStr = (str.GetLength()+1)*sizeof(TCHAR);
HGLOBALhData = GlobalAlloc(GMEM_MOVEABLE, cbStr);
memcpy_s(GlobalLock(hData), cbStr, str.LockBuffer(), cbStr );
GlobalUnlock( hData );
str.UnlockBuffer();
// 选择合适的格式
UINTuiFormat = (sizeof(TCHAR)==sizeof(WCHAR)) ? CF_UNICODETEXT : CF_TEXT;
if(::SetClipboardData( uiFormat, hData ) == NULL )
{
AfxMessageBox(_T("Unable to set Clipboard data"));
CloseClipboard();
return;
}
CloseClipboard();
}
void CChipBoardOperateDlg::OnBnClickedBtnPastecb()
{
if(!OpenClipboard() )
{
AfxMessageBox( _T("Cannot open the Clipboard!") );
return;
}
// 选择合适的格式(读取的时候不用获得剪贴板的拥有权)
UINTuiFormat = (sizeof(TCHAR)==sizeof(WCHAR) ? CF_UNICODETEXT : CF_TEXT );
HANDLEhData = ::GetClipboardData( uiFormat );
if( NULL ==hData )
{
AfxMessageBox( _T("Unable to get Clipboard data!") );
CloseClipboard();
return;
}
CStringWstr;
LPCTSTRlpdata = (LPCTSTR)GlobalLock(hData);
this->SetDlgItemTextW( IDC_EDIT_PASTECB, lpdata );
GlobalUnlock( hData );
CloseClipboard();
}
3、 测试:
在上边的文本框中输入数据,然后单击SetClipboardData按钮,程序将打开剪贴板,将该文本框中数据写入剪贴板,最后关闭剪贴板;
而单击下面的GetClipboardData按钮,程序将打开剪贴板,从剪贴板内读取数据,显示到下面的文本框中,最后关闭剪贴板。
为了显示操作结果的细节,可以打开Word的剪贴板观看过程,效果如下: