я работаю в C ++ приложение Win32 и я реализую DragAndDrop
операция, я могу перетащить файлы и папки из проводника в мое приложение, используя WndProc
звонки с WM_DROPFILES
, Сейчас я пытаюсь для DragAndDrop файлы и папки из приложения Win32 в проводнике.
Я пишу пример кода для перетаскивания текста из приложения в проводник с помощью Drag-and-Drop C Карлссона Библиотека прекрасно работает для удаления текста, но мое требование — перетаскивать файлы и папки из приложения win32 в проводник. ниже приведен пример кода для удаления текста.
case WM_LBUTTONDOWN:
{
char* text = "Hello, World! This is the drop source.";
HANDLE text_on_heap;
PMYDROPSOURCE text_drop_source;
CLIPFORMAT cf[1] = { CF_TEXT };
text_on_heap = GlobalAlloc(GMEM_FIXED, strlen(text) + 1);
if (NULL == text_on_heap) break;
strcpy((char*)text_on_heap, text);
text_drop_source = CreateMyDropSource(FALSE, cf, &text_on_heap, 1);
if (NULL != text_drop_source)
{
/* Drop source created, so begin the drag. This will block. */
MyDragDropSource(text_drop_source);
/* Drag-drop is done so destroy the drop source. */
FreeMyDropSource(text_drop_source);
}
/* Free up the buffer; drag-drop is finished. */
GlobalFree(text_on_heap);
return TRUE;
}
Чтобы Explorer мог принимать перетаскиваемые файлы, все, что нам нужно сделать, — это создать некоторые данные CF_HDROP и поместить их в объект данных. Таким образом, вы должны использовать IDropSource и IDropTarget.
Итак, вам нужна структура DROPFILES. Это немного сложно создать (так как это не всегда один и тот же размер).
Чем вам нужно создать IDataSource и выполнить DoDragDrop.
Вы найдете обзор в MSDN
Вот полный пример, который показывает работу с MFC. Посмотрите в последний раздел.
Код для простой версии Win32 Вот. Он использует небольшую публичную библиотеку на SourceForge
Других решений пока нет …