怎么让你的窗口支持文件拖入功能
2009-05-10 15:16
633 查看
我们经常看到很多应用程序支持文件拖入功能,个人感觉很酷,碰巧本人毕设做的是一个多媒体播放器,刚好可以用到这个技术。所以查了下相关的资料。
首先,我们要先熟悉下三个相关API函数的使用。
1.VOID DragAcceptFiles(
HWND hWnd,
BOOL fAccept
);
这个函数的调用,表示你要让某个窗体能够接受文件的拖入。第一个参数指定是哪个窗口,第二个参数指定为true表示接受,否则表示不接受。
2.
UINT DragQueryFile(
HDROP hDrop,
UINT iFile,
LPTSTR lpszFile,
UINT cch
);
这个函数是获得拖入的文件信息的函数。在介绍这个函数之前,我们要先看个 消息。
WM_DROPFILES 我们必须处理这个消息,因为这个消息告诉我们 有文件拖入操作发生。最重要的是,
它传递给我们一个HDROP 的结构体,这个结构体正是你要在函数DragQueryFile里面要用到的第一个参数。
呵呵,第一个参数就结束完了。第二个参数,是个数字,如果你指定它为0xFFFFFFFF,那么函数的返回值就是文件
的个数。否则,这个参数表示你要获取的是第几个文件的路径名称。第三个参数,是一个字符串缓存,用来存放函数返回
给你的文件路径。如果这个参数被你指定为NULL,那么函数返回所需要的字符串缓存的大小。第四个参数,也就是你指定的
字符串缓存的大小了,呵呵。
3.VOID DragFinish(
HDROP hDrop
);
这个函数表示你对拖放操作已经处理完毕,系统可以释放文件信息结构了。
下面来看看例子:
1.首先在view视图类的OnCreate函数里面 调用DragAcceptFile,这里调用的是视图类的自己的DragAcceptFile函数
所以没有要求指定窗口。
int CVideoPlayerView::OnCreate(LPCREATESTRUCT lpCreateStruct) { //让view类支持文件拖入 DragAcceptFiles(TRUE); }
2.在CVideoPlayerView类中响应WM_DROPFILES 这个消息
void CVideoPlayerView::OnDropFiles(HDROP hDropInfo) { // TODO: 在此添加消息处理程序代码和/或调用默认值 //保存结构体 m_hdrop=hDropInfo; //查询拖入文件个数 int number=0; number=DragQueryFile(hDropInfo,0xFFFFFFFF,NULL,0); TRACE("number of files is:%d/n",number); //查询每个文件的名称 TCHAR szpathName[MAX_PATH]; CString pathName; CString fileName; DWORD dwSize; for (int i=0;i<number;i++) { dwSize=DragQueryFile(hDropInfo,i,NULL,0); DragQueryFile(hDropInfo,i,szpathName,dwSize+1); pathName=szpathName; //获得文件名 fileName=GetFileName(pathName); //加入播放文件列表 m_listbox.AddString(fileName); //加入map m_filelist.insert(make_pair(fileName,pathName)); //播放第一个影片 if (i==0) { DWORD dwIndex=0; dwIndex=m_listbox.GetCount(); m_listbox.SetCurSel(dwIndex-1); m_player.OpenAction(m_hWnd,pathName,m_rect_display); } } //完成拖入文件操作,让系统释放缓冲区 DragFinish(hDropInfo); CView::OnDropFiles(hDropInfo); }
上面实现的功能是,将文件拖入播放窗口,播放器就开始播放第一个拖入的文件,可以一次拖入多个文件。
相关文章推荐
- 窗口支持文件拖入功能
- MFC窗口支持文件拖入
- MFC窗口支持文件拖入
- MFC窗口支持文件拖入
- 支持文件拖拽功能的windows窗口
- c#保存窗口位置大小操作类(序列化和文件读写功能)
- 我手上有一个ASP文件,添加用户时,没有添加密码的功能,添加用户成功时,更换到添加的用户要输入密码,密码不能为空,不怎么么办!
- 对于MFC中窗口接受文件的拖拽功能
- vim的多文件编辑与多窗口功能
- java实现文件下载功能,自动弹出保存窗口
- WINHEX的比较、同步功能加上NTFS对稀疏文件的支持
- InstallShield 2012 Spring新功能试用(15): Suite/Advanced UI 和 Advanced UI工程支持动态链接安装包文件
- 怎样隐藏uploadify上传控件的按钮,然后通过其它控件的事项来触发uploadify控件的文件浏览窗口并现实文件上传功能
- Extjs 扩展Htmleditor,支持 图片上传 文件上传 插入flash 插入多媒体 插入层 插入横线等功能(2)
- 无法打开项目文件: .csproj,此安装不支持该项目类型,怎么解决?
- 怎样隐藏uploadify上传控件的按钮,然后通过其它控件的事项来触发uploadify控件的文件浏览窗口并现实文件上传功能
- 文件拖拽功能窗口实现
- 64bit下关闭启用文件重定向功能,支持多线程,简单易用
- 稳扎稳打Silverlight(67) - 5.0被信任的应用程序之访问本地文件系统, 支持多窗口, 被信任的程序在浏览器中运行, Call Windows API
- 20_Shell语言―――VIM编辑器基础知识三之窗口属性定制、配置文件及查找替换功能