2010-02-12 6 views
7

Der Add-to-Clip-Board-Code, den wir in unserer Codebasis haben, ist ziemlich niedrig - Zuweisung von globalen Speicher und so weiter. Für den einfachen Fall, ich möchte nur ein paar Klartext in die Zwischenablage, gibt es irgendwelche Routinen, die all diese Sachen wickeln können?Bietet MFC eine schnelle Möglichkeit, Text in die Zwischenablage zu werfen?

Ein Beispiel ist, dass CRichEditCtrl hat Copy() & Cut() Methoden, die automatisch die aktuelle Auswahl in die Zwischenablage. Stellt MFC diese Funktionalität isoliert zur Verfügung?

aktualisieren: Erstellt new question ein basierend auf mwigdahl Antwort

+0

Nur ein Ich kenne ist http://msdn.microsoft.com/en-us/library/sze892zx%28VS.80%29.aspx, die ich nehme an, was Du benutzt es bereits. Selbst wenn es nicht viel gibt, gibt es kaum einen zusätzlichen Vorteil, da Sie fast sicher immer noch GlobalAlloc oder ähnliches anrufen müssen. – tyranid

Antwort

6

Nein, aber es ist nicht so schwer, es selbst zu wickeln. Angepasst von Frost Code (und ungetestet):

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

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

    ::OpenClipboard (NULL); 
    EmptyClipboard(); 
    SetClipboardData(CF_TEXT, h); 
    CloseClipboard(); 
} 
+0

Ich habe Ihren Code zum Kompilieren optimiert und stürzt nicht auf Unicode (Minor) ab und bekam ein anderes Problem. Bitte sehen Sie hier: http://stackoverflow.com/questions/2265382/win32-copying-string-to-clipboard-only-one-character-written-when-pasted –

+0

Oh, es war ein einfacher Fehler. Ich werde dies die akzeptierte Antwort :) –

+0

Vielen Dank! Froh, dass es geholfen hat! – mwigdahl