您的位置:首页 > 大数据 > 人工智能

怎么让你的窗口支持文件拖入功能

2009-05-10 15:16 495 查看
 

我们经常看到很多应用程序支持文件拖入功能,个人感觉很酷,碰巧本人毕设做的是一个多媒体播放器,刚好可以用到这个技术。所以查了下相关的资料。
 
    首先,我们要先熟悉下三个相关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);
}


上面实现的功能是,将文件拖入播放窗口,播放器就开始播放第一个拖入的文件,可以一次拖入多个文件。
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  null pair path api
相关文章推荐