我正在使用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;
}
答案 0 :(得分:1)
要让Explorer接受拖动的文件,我们所要做的就是创建一些CF_HDROP数据并将其放在数据对象中。所以你必须使用IDropSource和IDropTarget。
所以你需要DROPFILES结构。创建起来有点棘手(因为它的大小并不总是相同)。
您必须创建一个IDataSource并执行DoDragDrop。
您可以在MSDN
中找到概述以下是显示MFC操作的完整示例。查看最后一节。
普通Win32版本的代码是here。它在sourceforge
上使用了一个小型图书馆