Копирование строки в буфер обмена, только один символ записывается при вставке - PullRequest
2 голосов
/ 15 февраля 2010

Я был базовым кодом из этого кода , также упомянутого в моем другом вопросе . Эта версия заставляет тип символа 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 содержит скопированную строку, как и ожидалось. Но когда я вставляю их в любое приложение, вставляется только первый символ.

Что не так?

1 Ответ

5 голосов
/ 15 февраля 2010

Ваш комментарий Unicode в комментарии предыдущего вопроса говорит. Если у вас есть строка широких символов с символом низкого ASCII, в UTF-16 она будет кодироваться как байт низкого ASCII, за которым следует NULL. Используйте CF_UNICODETEXT вместо CF_TEXT .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...