将 ListBox 复制到剪贴板,返回载体未保存

Posted

技术标签:

【中文标题】将 ListBox 复制到剪贴板,返回载体未保存【英文标题】:Copy ListBox to Clipboard, return carrier not conserved 【发布时间】:2013-11-11 15:43:06 【问题描述】:

在使用 MFC 的 C++ 应用程序中,我希望能够将整个 CListBox 内容复制到剪贴板。

我发现了一个复制内容的功能,但是返回的载体没有保存。 我用 HexEditor 看,它似乎是 $0A 而不是 $0D&$0A。

这是我的代码:

CListBox * myListBox = (CListBox *)GetDlgItem(IDC_LIST_RESULT);
CString sContents = _T("");
CString temp = _T("");
int NumberOfSelections = 0;

NumberOfSelections = myListBox->GetCount();
for(int Selection = 0; Selection <= NumberOfSelections-1; Selection++)

    myListBox->GetText(Selection, temp);
    sContents += temp;
    sContents +="\n";


if (OpenClipboard())

    HGLOBAL clipbuffer;
    char * buffer;

    if (EmptyClipboard())
    
        clipbuffer = GlobalAlloc(GMEM_DDESHARE, sContents.GetLength() + 1);
        buffer = (char*)GlobalLock(clipbuffer);
        CStringA ansiString(sContents); 
        size_t cbString = strlen(ansiString) + 1;
        strcpy_s(buffer, cbString, ansiString);
        GlobalUnlock(clipbuffer);

        if (SetClipboardData(CF_TEXT, clipbuffer) == NULL)
        
            CString msg;
            msg.Format(_T("Unable to set Clipboard data, error: %d"), GetLastError());
            AfxMessageBox(msg);
        
        else
            AfxMessageBox(_T("Successfully copied selected laps to clipboard"));
    
    else
        AfxMessageBox(_T("Unable to empty Clipboard"));
    CloseClipboard();

else
AfxMessageBox(_T("Unable to open Clipboard"));
// TODO: ajoutez ici le code de votre gestionnaire de notification de contrôle

我在 Visual Studio 2013 中使用 unicode 配置。

有人有什么想法吗?

非常感谢,

最好的问候,

尼克斯

【问题讨论】:

【参考方案1】:

只有一个\n,因为这是您在剪贴板中输入的内容。

sContents +="\n";

应该是

sContents +="\r\n";

【讨论】:

以上是关于将 ListBox 复制到剪贴板,返回载体未保存的主要内容,如果未能解决你的问题,请参考以下文章

vim 全选并复制到系统剪切板

异步剪贴板 API“ClipboardItem 未定义” - Reactjs 将图像复制到剪贴板

Tkinter 之ListBox列表标签

是否可以将画布图像复制到剪贴板?

从禁用的文本框复制到剪贴板

Angular 5 - 复制到剪贴板