MFC剪贴板通信

1、建立一个基于对话框的应用程序,界面如下:

MFC剪贴板通信

2、对两个按钮进行消息响应:

 void CChipBoardOperateDlg::OnBnClickedBtnCopycb()
{
// TODO: 在此添加控件通知处理程序代码
if( !OpenClipboard() )
{
AfxMessageBox( _T("Cannot open the Clipboard!") );
return;
} // 将剪贴板内容清空,释放数据资源,然后指定当前打开剪贴板的窗口为剪贴板的所有制
if( !EmptyClipboard() )
{
AfxMessageBox( _T("Cannot empty the Clipboard!") );
return;
} // 取回当前控件的数据,hData开辟全局内存区域,存放数据
CStringW str;
this->GetDlgItemTextW( IDC_EDIT_COPYCB, str );
size_t cbStr = (str.GetLength()+)*sizeof(TCHAR);
HGLOBAL hData = GlobalAlloc(GMEM_MOVEABLE, cbStr);
memcpy_s( GlobalLock(hData), cbStr, str.LockBuffer(), cbStr );
GlobalUnlock( hData );
str.UnlockBuffer(); // 选择合适的格式
UINT uiFormat = (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;
} // 选择合适的格式(读取的时候不用获得剪贴板的拥有权)
UINT uiFormat = (sizeof(TCHAR)==sizeof(WCHAR) ? CF_UNICODETEXT : CF_TEXT );
HANDLE hData = ::GetClipboardData( uiFormat );
if( NULL == hData )
{
AfxMessageBox( _T("Unable to get Clipboard data!") );
CloseClipboard();
return;
}
CStringW str;
LPCTSTR lpdata = (LPCTSTR)GlobalLock(hData);
this->SetDlgItemTextW( IDC_EDIT_PASTECB, lpdata );
GlobalUnlock( hData );
CloseClipboard();
}

3、在上边的文本框中输入数据,然后单击SetClipboardData按钮打开剪贴板,将该文本框中数据写入剪贴板,最后关闭剪贴板;

而单击下面的GetClipboardData按钮将打开剪贴板,从剪贴板内读取数据,显示到下面的文本框中,最后关闭剪贴板。

为了显示操作结果的细节,可以打开Word的剪贴板观看过程,效果如下:

MFC剪贴板通信

上一篇:函数传参传的是啥的思考【java Python】


下一篇:Kafka集群中 topic数据的分区 迁移到其他broker