将ListBox复制到剪贴板,返回载体不守恒

时间:2013-11-11 15:43:07

标签: c++ visual-studio-2010 visual-studio mfc clipboard

在使用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配置。

任何人都有一些想法?

非常感谢,

致以最诚挚的问候,

Nixeus

1 个答案:

答案 0 :(得分:2)

只有\n,因为这是你放在剪贴板中的内容。

sContents +="\n";

应该是

sContents +="\r\n";