Предоставляет ли MFC быстрый способ выбросить текст в буфер обмена? - PullRequest
7 голосов
/ 12 февраля 2010

Код add-to-clipboard, который мы имеем в нашей кодовой базе, довольно низкоуровневый - выделяет глобальную память и так далее. Для простого случая я просто хочу поместить в буфер обмена простой текст, есть ли подпрограммы, которые могут обернуть все это?

Примером является то, что CRichEditCtrl имеет методы Copy () и Cut (), которые автоматически помещают текущий выбор в буфер обмена. Предоставляет ли MFC такую ​​функциональность в отдельности?

Обновление : Создан новый вопрос на основе ответа mwigdahl

1 Ответ

6 голосов
/ 12 февраля 2010

Нет, но это не так сложно, завернуть его самостоятельно. Адаптировано с Код Мороза (и не проверено):

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();
}
...