使用拖放功能

【勇芳软件工作室】汉化HomePreviousNext

当应用程序实现【拖放】功能时,用户可以在文件管理器中选择一个或多个文件,将其拖动到打开的应用程序中,并将其放在那里。删除文件的应用程序接收到一个消息,可以用来检索文件名以及删除文件点的坐标。

可以从File Manager接受丢弃的文件的应用程序为其一个或多个窗口调用DragAcceptFiles功能。当用户释放鼠标按钮来删除在DragAcceptFiles的调用中指定的窗口中的文件时,文件管理器会向应用发送一条WM_DROPFILES消息。(文件管理器不会向应用程序发送WM_DROPFILES消息,除非应用程序调用{??989796016})。WM_DROPFILES包含一个应用程序可以查询的结构的句柄,以检索删除文件的名称,当文件为下降。应用程序可以使用DragQueryFile函数来检索已删除的文件的计数及其名称。当用户释放鼠标按钮时,DragQueryPoint函数返回光标的窗口坐标。

要释放系统为WM_DROPFILES消息分配的内存,应用程序在完成后会调用DragFinish函数。

例如,应用程序在启动时可以调用DragAcceptFiles函数,并在接收到WM_DROPFILES消息时调用拖放功能,如以下示例所示。

case WM_CREATE:

DragAcceptFiles(hwnd, TRUE);

break;

case WM_DROPFILES:

DragFunc(hwnd, wParam); /* application-defined function */

break;

case WM_DESTROY:

DragAcceptFiles(hwnd, FALSE);

break;

以下示例使用DragQueryPoint函数来确定开始写入文本的位置。第一次调用DragQueryFile函数确定删除的文件数。循环写入每个文件的名称,从DragQueryPoint返回的点开始。

POINT pt;

WORD cFiles, a;

char lpszFile[80];

DragQueryPoint((HANDLE) wParam, &pt);

cFiles = DragQueryFile((HANDLE) wParam, 0xFFFF, (LPSTR) NULL, 0);

for(a = 0; a < cFiles; pt.y += 20, a++) {

DragQueryFile((HANDLE) wParam, a, lpszFile, sizeof(lpszFile));

TextOut(hdc, pt.x, pt.y, lpszFile, lstrlen(lpszFile));

}

DragFinish((HANDLE) wParam);