如何从Win32应用程序拖动文件和文件夹拖放在资源管理器
问题描述:
我在C++ Win32应用程序工作,我实现DragAndDrop
操作,我可以能够从资源管理器中的文件和文件夹拖放到使用WndProc
电话与WM_DROPFILES
我的应用程序,现在我尝试从Win32应用程序到资源管理器的DragAndDrop文件和文件夹。如何从Win32应用程序拖动文件和文件夹拖放在资源管理器
我写了一个示例代码,将文本从应用程序拖动到资源管理器,使用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;
}
答
要让Explorer接受拖动的文件,我们所要做的就是创建一些CF_HDROP数据并将其放入数据对象中。所以你必须使用IDropSource和IDropTarget。
所以你需要DROPFILES结构。创建有点棘手(因为它不总是相同的大小)。
比你必须创建一个IDataSource并执行DoDragDrop。
您发现MSDN
概述这里是一个完整的示例,演示与MFC操作。看看最后一节。
一个普通的Win32版本的代码是here。它在sourceforge上使用一个小型图书馆
您的代码在这里不会尝试使用文件操作 –
@DavidHeffernan是的。它的拖放文本的示例代码,所以我正在寻找拖放文件和文件夹。同样的方式,我尝试了CF_HDROP,但它不工作。 – Krish
为什么不做一些研究。如果有的话有很多例子。 –