今天调试代码的时候遇到了一个奇怪的问题,粘贴功能出异常了,无法进行粘帖操作了。于是查阅了相关的代码,才发现原因:使用OpenClipboard打开剪切板后,没有调用CloseClipboard把剪切板关闭掉。所以在做剪切板相关编程时,一定要注意在打开剪切板,执行操作后一定要将剪切板关闭掉。
// 是否是文件复制,如果是,则要执行发送文件的操作
BOOL32 CChatDlg::IsFilePasted()
{
BOOL32 bFilePasted = FALSE;
if( ::OpenClipboard( NULL ) ) // 打开剪切板
{
HDROP hDrop = HDROP( ::GetClipboardData( CF_HDROP ) ); // 检测剪切板中复制的是否是文件或文件夹信息
if( hDrop == NULL )
{
::CloseClipboard(); // 加上这句就可以了
return FALSE;
}
// 通过检测剪切样式判断是否是在资源管理器中是否copy了待发送的文件,要与截图粘贴操作区分开来
HANDLE hHandle = ::GetClipboardData( m_dwPreferredClipFormat );
if ( hHandle != NULL )
{
bFilePasted = TRUE;
}
::CloseClipboard();
}
return bFilePasted;
}