将缓冲区复制到剪贴板[新行错误]

时间:2018-09-24 16:34:01

标签: c++ winapi buffer clipboard copy-paste

我想知道如何将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 :(得分:1)

根据Standard Clipboard Formats文档:

  

CF_TEXT
  1

     

文本格式。 每行以回车/换行(CR-LF)组合结尾。空字符表示数据结束。将此格式用于ANSI文本。

     

...

     

CF_UNICODETEXT
  13

     

Unicode文本格式。 每行以回车/换行(CR-LF)组合结尾。空字符表示数据结束。

因此,您需要将所有裸LF(\n)字符替换为CRLF(\r\n)序列。

Text\r\nText text \r\ntext