VC++ 剪贴板编程
新建一个对话框工程;
双击按钮,让你输入单击的成员函数名称,然后进入代码编辑;
void CJieqieDlg::OnButton1()
{
// TODO: Add your control notification handler code here
if( !OpenClipboard() )
{
AfxMessageBox( _T("Cannot open the Clipboard!") );
return;
}
if( !EmptyClipboard() )
{
AfxMessageBox( _T("Cannot empty the Clipboard!") );
return;
}
// 取回当前控件的数据,hData开辟全局内存区域,存放数据
CString str;
this->GetDlgItemText( IDC_EDIT1, str );
size_t cbStr = (str.GetLength()+1)*sizeof(TCHAR);
HGLOBAL hData = GlobalAlloc(GMEM_MOVEABLE, cbStr);
//memcpy_s( GlobalLock(hData), cbStr, str.LockBuffer(), cbStr );
memcpy( GlobalLock(hData), 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 CJieqieDlg::OnButton2()
{
// TODO: Add your control notification handler code here
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;
}
CString str;
LPCTSTR lpdata = (LPCTSTR)GlobalLock(hData);
this->SetDlgItemText( IDC_EDIT2, lpdata );
GlobalUnlock( hData );
CloseClipboard();
}
运行如下;在第一个框随便输入,单击按钮1,然后单击按钮2,内容拷贝到第二个框;在二个程序之间也可以操作;先打开剪贴板,然后操作,然后关闭剪贴板;剪贴板编程通常会用到GlobalAlloc函数;
还没有评论,来说两句吧...