有以下代码,用于将剪贴板中CF_TEXT文本粘贴到一个编辑器。void CExtraEditCtrl::Paste()
{
if(!::OpenClipboard(NULL)) return ; HANDLE hData = NULL;
SIZE_T size = 0;
if( IsClipboardFormatAvailable(CF_TEXT))
{
hData = GetClipboardData(CF_TEXT);
size = GlobalSize(hData);
if(size != 0)
{
hData = NULL;
}
}
char * buffer = NULL;
if(hData) buffer = (char*)GlobalLock(hData); CloseClipboard();
if(buffer != NULL)
{
ReplaceSel(buffer);
} if(hData) GlobalUnlock(hData);
}以上代码在中文系统运行良好,但是在英文系统经常出现文本被粘贴为乱码(比如从outlook复制出来的内容),只是经常,不是必然(原因不明)。用剪贴板查看器clipbrd.exe查看剪贴板内容,发现剪贴板中Unicode内容正常,是被复制的文本,但是CF_TEXT内容显示为“????”。请问各位达人,剪贴板内为什么会出现这种错误的内容呢?是不是和系统的某些系统设置有关系。偶的整个应用程序都不是Unicode的,所以暂时不考虑直接取Unicode数据。
{
if(!::OpenClipboard(NULL)) return ; HANDLE hData = NULL;
SIZE_T size = 0;
if( IsClipboardFormatAvailable(CF_TEXT))
{
hData = GetClipboardData(CF_TEXT);
size = GlobalSize(hData);
if(size != 0)
{
hData = NULL;
}
}
char * buffer = NULL;
if(hData) buffer = (char*)GlobalLock(hData); CloseClipboard();
if(buffer != NULL)
{
ReplaceSel(buffer);
} if(hData) GlobalUnlock(hData);
}以上代码在中文系统运行良好,但是在英文系统经常出现文本被粘贴为乱码(比如从outlook复制出来的内容),只是经常,不是必然(原因不明)。用剪贴板查看器clipbrd.exe查看剪贴板内容,发现剪贴板中Unicode内容正常,是被复制的文本,但是CF_TEXT内容显示为“????”。请问各位达人,剪贴板内为什么会出现这种错误的内容呢?是不是和系统的某些系统设置有关系。偶的整个应用程序都不是Unicode的,所以暂时不考虑直接取Unicode数据。
HGLOBAL hGlobal; ::OpenClipboard(NULL);
if(hGlobal = GetClipboardData(CF_TEXT) )
{
pGlobal = (char*)GlobalLock(hGlobal);
if(pText)
{
free(pText);
pText = NULL;
}
pText = (char*)malloc(GlobalSize(hGlobal));
strcpy(pText,pGlobal);
}
CloseClipboard();
if(pText)
{
m_edit.ReplaceSel(pText);
} GlobalUnlock(hGlobal);
if(pText)free(pText);
但用CF_UNICODETEXT是可以的,不知英文环境如何