Как вставить файл из буфера обмена в мою аппликуху
От: andreyDM  
Дата: 07.10.02 10:48
Оценка:
У меня в аппликухе имеется лист вьюшка в которой отображаются какие то файлы (если быть точнее то IShellBrowser)
я реализовал копирование файлов из нее в буфер обмена т.е могу вставлять их куда угодно в проводнике
а как сделать еще что бы можно было вставлять файл скопированный в проводнике в мою аппликуху
Re: Как вставить файл из буфера обмена в мою аппликуху
От: Patalog Россия  
Дата: 07.10.02 11:24
Оценка:
Здравствуйте andreyDM, Вы писали:

DM>У меня в аппликухе имеется лист вьюшка в которой отображаются какие то файлы (если быть точнее то IShellBrowser)

DM>я реализовал копирование файлов из нее в буфер обмена т.е могу вставлять их куда угодно в проводнике
DM>а как сделать еще что бы можно было вставлять файл скопированный в проводнике в мою аппликуху


if(OpenClipboard()) {
    const UINT cf = RegisterClipboardFormat(CFSTR_PREFERREDDROPEFFECT);
    HGLOBAL g_dropeffect = GetClipboardData(cf);
    if(g_dropeffect) {
        DWORD drop_effect = *reinterpret_cast<DWORD*>(GlobalLock(g_dropeffect));
        GlobalUnlock(g_dropeffect);
    }
        
    HGLOBAL g_drop = GetClipboardData(CF_HDROP);
    if(g_drop) {
        HDROP drop = reinterpret_cast<HDROP>(GlobalLock(g_drop));
        const int file_count = DragQueryFile(drop, 0xFFFFFFFF, NULL, 0);
        for (int i = 0; i < file_count; ++i) {
            const int buf_size = DragQueryFile(drop, i, NULL, 0);
            CString path; //Tyt можно что-нибудь полезное...
            LPTSTR path_ptr = path.GetBuffer(buf_size + 1);
            DragQueryFile(drop, i, path_ptr, buf_size + 1);
            path.ReleaseBuffer();
        }

        GlobalUnlock(drop);
    }

    CloseClipboard();
}


ЗЫ А вообще лутше юзать IDataObject\IDropTarget
Почетный кавалер ордена Совка.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.