2010-02-15 114 views
2

我是基本的一些代碼關閉此code,也在我的其他question中提到。該版本強制字符類型爲char*,這會破壞我的unicode項目的編譯。所以,我做了如下調整:複製字符串到剪貼板,只有一個字符粘貼時寫

void SetClipboardText(CString & szData) 
{ 
    HGLOBAL h; 
    LPTSTR arr; 

    size_t bytes = (szData.GetLength()+1)*sizeof(TCHAR); 
    h=GlobalAlloc(GMEM_MOVEABLE, bytes); 
    arr=(LPTSTR)GlobalLock(h); 
    ZeroMemory(arr,bytes); 
    _tcscpy_s(arr, szData.GetLength()+1, szData); 
    szData.ReleaseBuffer(); 
    GlobalUnlock(h); 

    ::OpenClipboard (NULL); 
    EmptyClipboard(); 
    SetClipboardData(CF_TEXT, h); 
    CloseClipboard(); 
} 

的複製看起來很好 - 在調試器Visual Studio中運行的告訴我arr包含複製串預期。 但是當我粘貼到任何應用程序時,只粘貼第一個字符。

怎麼回事?

回答

5

您在上一個問題的評論中的Unicode評論是有說服力的。如果您的字符串寬度較低且字符串較低,那麼在UTF-16中,它將被編碼爲低位ASCII字節,然後是NULL。 Use CF_UNICODETEXT instead of CF_TEXT

+0

好的,我從來沒有想過那個2nd-byte-is-zero的情況。 – 2010-02-15 11:36:50

相關問題