如何与资源管理器互动剪切/拷贝/粘贴文件
2010-07-15 20:45:16 来源:WEB开发网因此,我们可以通过
if(dwEffect & DROPEFFECT_COPY)
CopyFile(....);
else (dwEffect & DROPEFFECT_MOVE)
MoveFile(...);
来完成剪切/拷贝操作。
在我们取得uDropEffect状态之后,我们需要得到文件列表,得到拖放对象中的文件列表可以通过DragQueryFile来实现:
UINT DragQueryFile(HDROP hDrop, UINT iFile,LPTSTR lpszFile,UINT cch);
第二个参数是文件序列号,可以通过将iFile置为-1的方法来得到文件数量。
最后我们给出完整的例子:
#include <Shellapi.h>
#include <oleidl.h>
....
UINT uDropEffect=RegisterClipboardFormat("Preferred DropEffect");
if( OpenClipboard( hWnd)) {
HDROP hDrop = HDROP( GetClipboardData( CF_HDROP));
if( hDrop) {
DWORD dwEffect,*dw;
dw=(DWORD*)(GetClipboardData( uDropEffect));
if(dw==NULL)
dwEffect=DROPEFFECT_COPY;
else
dwEffect=*dw;
char Buf[4096];
Buf[0] = 0;
UINT cFiles = DragQueryFile( hDrop, (UINT) -1, NULL, 0);
POINT Point;
char szFile[ MAX_PATH];
for( UINT count = 0; count < cFiles; count++ ) {
DragQueryFile( hDrop, count, szFile, sizeof( szFile));
lstrcat(Buf,szFile);
lstrcat(Buf,"\n");
}
if(dwEffect & DROPEFFECT_MOVE) {
MessageBox(NULL,Buf,"Move Files",MB_OK);
} else if(dwEffect & DROPEFFECT_COPY) {
MessageBox(NULL,Buf,"Copy Files",MB_OK);
}
CloseClipboard();
}
}
更多精彩
赞助商链接