VC++文件拖拽功能实现
/转载请保留以下这段内容
//此文章为本人学习笔记和心得,仅供您学习参考,不能保证其正确性。
//您在阅读本篇文章是有什么意见或看法,需要和本人探讨或指出错误,请到本篇文章处给我留言
//来源:www.vcfans.com
//By Lonkil (lonkil_at_gmail.com)
//2008-11-8
Windows程序支持两种拖拽试式,一种文件拖拽,这正是我今天要演示的。一种是OLE拖拽,当你在VC中编辑代码,将代码从这个位置拖到另一个位置,就属于这种。拖拽功能给用户的操作带很大的方便,这一细节有助于提高软件的交互性和用户体验。这早已不是什么新技术,介绍给还不知道的朋友。
效果如下图:

主要步骤,我这里主要描述SDK的实现方式,MFC的请添加WM_DROPFILES消息映射:
- #include <shellapi.h>,需要处理的API在Shellapi.h中。
- 在窗口建好后使用DragAcceptFiles(hWnd,TRUE)打开窗口支持拖拽功能,也可以设置窗口的支持拖拽属性。
- 在回调中处理WM_DROPFILES消息,代码如下:
1 2 3 4 5 6 7 8
case WM_DROPFILES: {//当文件拖进来时 TCHAR szBuf[ MAX_PATH ]={0}; DragQueryFile((HDROP)wParam, 0, szBuf, MAX_PATH-1);//如果多个文件被拖拽的情况只取最后一个文件 MessageBox(hWnd, szBuf,_T("你拖拽的文件路径"), MB_ICONINFORMATION); DragFinish((HDROP)wParam); } break;
DragQueryFile的具体解释请查阅MSDN,我这里只是简要获取一个文件,也可以获取多个文件。
到这里文件拖拽基本结束了,但还要实现一个效果,就更完美了。当拖一个文件到应用程序到程序图标上,将用这个应用程序打开你所拖的文档,这个功能也很不错,就不用再启动程序后再打开文档了。这是怎么怎么的呢?其实Windows系统当你在拖一个文件到某个应该程序时,已经所拖拽的文件路径,以参数的形式传递给应用程序了。
也就是说可你在WinMain中使用lpCmdLine这个参数,这个参数就是被拖拽的文件路径。如果是MFC的话没能直接操作WinMain,那怎么办呢?实现起也很简单,只是麻烦了一点。你可以通过GetCommandLine取得传入的参数,不过注意的是需要自己提取你想要的数据。
drag.7z (5.0 KiB, 811 hits)
5 条评论
这不是全部代码呀? 只是一部分????????
可以在底部,下载代码。
要实现从程序拖到资源管理器又如何实现。。。。就是反过来拖。。。。
恩,站在巨人的肩膀上就是爽
thanks !