tags:

views:

153

answers:

1

The add-to-clip-board code we have in our code base is quite low-level - allocating global memory and so on. For the simple case I just want to put some plain text on the clipboard, are there any routines which can wrap all that stuff?

An example is that CRichEditCtrl has Copy() & Cut() methods which automatically put the current selection on the clipboard. Does MFC make this kind of functionality available in isolation?

Update: Created a new question based on mwigdahl's response

+1  A: 

No, but it's not that hard to wrap it yourself. Adapted from Frost Code (and untested):

void SetClipboardText(CString & szData)
{
    HGLOBAL h;
    LPTSTR arr;

    h=GlobalAlloc(GMEM_MOVEABLE, szData.GetLength());
    arr=(LPTSTR)GlobalLock(h);
    strcpy_s((char*)arr, szData.GetLength(), szData.GetBuffer());
    szData.ReleaseBuffer();
    GlobalUnlock(h);

    ::OpenClipboard (NULL);
    EmptyClipboard();
    SetClipboardData(CF_TEXT, h);
    CloseClipboard();
}
mwigdahl
I tweaked your code to compile and not crash on Unicode (minor) and got another problem. Please see here: http://stackoverflow.com/questions/2265382/win32-copying-string-to-clipboard-only-one-character-written-when-pasted
John
Oh, it was a simple error. I'll mark this the accepted answer :)
John
Thanks! Glad it helped!
mwigdahl

related questions