窗口支持文件拖入功能
来源:互联网 发布:json null 转为空 编辑:程序博客网 时间:2024/06/18 13:36
我们经常看到很多应用程序支持文件拖入功能,个人感觉很酷,碰巧本人毕设做的是一个多媒体播放器,刚好可以用到这个技术。所以查了下相关的资料。
首先,我们要先熟悉下三个相关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窗口支持文件拖入
- 支持文件拖拽功能的windows窗口
- Flex Air 窗口 接受文件拖入
- 文件拖拽功能窗口实现
- 支持换肤功能的窗口实例
- 支持换肤功能的窗口实例
- VC编程支持窗口拖拽打开文件
- VC编程支持窗口拖拽打开文件
- 接收文件拖入
- 鼠标拖入文件
- TextBox的扩展,支持文件夹和各类文件的拖入,同时可设置过滤文件格式!
- TextBox的扩展,支持文件夹和各类文件的拖入,同时可设置过滤文件格式!
- 对于MFC中窗口接受文件的拖拽功能
- MFC中窗口实现拖拽文件功能
- VS2012 MFC 对话框支持文件拖拽功能
- the Meta
- DotNet应用调试(1)——ANTS Memory Profile学习
- [IOS开发]上传APP遇到Invalid Binary怎么办?
- VMware虚拟机上网络连接三种模式
- 通过Silverlight中Calendar控件的扩展学习XAML(下)
- 窗口支持文件拖入功能
- 非常齐全的营销推广方案
- Python 中文乱码解决方法
- 问答:AVAudioPlayer 一边播放一边缓存Data
- ASP.NET的事件模型
- 浅谈状态压缩的应用
- Android应用程序实现欢迎引导页面的方法实现
- Java URLClassLoader实现插件功能开发
- 第7章 图——图的深、广搜遍历