Копировать буфер в буфер обмена [ошибка новой строки] - PullRequest
0 голосов
/ 24 сентября 2018

Мне интересно, как я могу скопировать буфер char* в буфер обмена Windows и получить правильный / требуемый вывод, как показано ниже?

Пример:

У меня есть char* буфер, в который я поместил это:

Text\nText text \ntext

Мы ожидаем, что когда мы скопируем его в буфер обмена и вставим в документ, он получится так:

Text
Text text 
text

Но когда я пытаюсь скопировать и вставить его, результат выглядит так:

TextText text text

Итак, что я могу сделать, чтобы получить желаемый результат?

Вот функцияЯ использую:

void clipBoard(const char* output)
{
    const size_t len = strlen(output) + 1;
    HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, len);
    memcpy(GlobalLock(hMem), output, len);
    GlobalUnlock(hMem);
    OpenClipboard(0);
    EmptyClipboard();
    SetClipboardData(CF_TEXT, hMem);
    CloseClipboard();
}

Называя это так:

clipBoard(buffer);

1 Ответ

0 голосов
/ 24 сентября 2018

По Стандартным форматам буфера обмена Документация:

CF_TEXT
1

Текстовый формат. Каждая строка заканчивается комбинацией возврата каретки / перевода строки (CR-LF) .Нулевой символ обозначает конец данных.Используйте этот формат для текста ANSI.

...

CF_UNICODETEXT
13

Текстовый формат Unicode. Каждая строка заканчивается комбинацией возврата каретки / перевода строки (CR-LF) .Нулевой символ означает конец данных.

Таким образом, вам нужно заменить все символы голой НЧ (\n) на последовательности CRLF (\r\n).

Text\r\nText text \r\ntext
...