如何从Win32应用程序拖动文件和文件夹并下载到资源管理器

时间:2017-10-09 06:08:22

标签: c++ winapi drag-and-drop win32ole

我正在使用C ++ Win32应用程序并实施DragAndDrop操作,我可以使用WndProc使用WM_DROPFILES调用将文件和文件夹从资源管理器拖到我的应用程序中,现在我尝试对于从Win32应用程序到资源管理器的DragAndDrop文件和文件夹。

我编写了一个示例代码,使用Karlsson’s 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;
}

1 个答案:

答案 0 :(得分:1)

要让Explorer接受拖动的文件,我们所要做的就是创建一些CF_HDROP数据并将其放在数据对象中。所以你必须使用IDropSource和IDropTarget。

所以你需要DROPFILES结构。创建起来有点棘手(因为它的大小并不总是相同)。

您必须创建一个IDataSource并执行DoDragDrop。

您可以在MSDN

中找到概述

以下是显示MFC操作的完整示例。查看最后一节。

普通Win32版本的代码是here。它在sourceforge

上使用了一个小型图书馆
相关问题