长期以来,我似乎都没有对知识进行总结,寄希望于博客吧。
早上闲着没事,想起来一篇关于拖拽的文章,第一次见到还是借助于Google大侠,搜了n久才发现该文章,如今已经满地都是中文版本了。
本人坚持自力更生的原则,自己做一遍吧,不想只抄袭人家的内容,然后保存一下就再也不看了。想把知识运用起来。
废话少说,入正题。先做个简单的,实现窗口接受拖放到上面的文件,输出其全路径。
用到了如下三个函数:
VOID DragAcceptFiles( HWND hWnd, BOOL fAccept);
UINT DragQueryFile(HDROP hDrop, UINT iFile, LPTSTR lpszFile,UINT cch);
VOID DragFinish(HDROP hDrop);
函数更详细的解释参看MSDN。需要处理WM_DROPFILES消息。
剩下的就简单了。
第一步,当需要开始接受文件拖拽时,调用DragAcceptFiles。(一般是在窗口的初始化函数中。)
第二步,在WM_DROPFILES消息中调用DragQueryFile函数获取文件列表,并在结束处理后调用DragFinish释放系统分配的内存就可以了。
LRESULT OnInitDialog(...)
{
...
DragAcceptFiles(...);
...
return TRUE;
}
LRESULT on_drop_files_msg(...)
{
HDROP hdrop = (HDROP)wParam;
UINT ufc = DragQueryFile(hdrop,0xffffffff,0,0);
char buf[MAX_PATH];
for(UINT i=0; i<fc; ++i)
{
DragQueryFile(hdrop,i,buf,MAX_PATH);
...
}
DragFinish(hdrop);
return 0;
}
代码大概如此,已经能接收到拖拽到窗口上的文件了,DragQueryFile得出的是文件的全路径,之所以要循环调用,
是因为拖放操作可能同时拖了n个文件。
另有一函数DragQueryPoint类似于DragQueryFile,不过它的出的是松开鼠标时鼠标的坐标。并不难用。
好了,先到这。
早上闲着没事,想起来一篇关于拖拽的文章,第一次见到还是借助于Google大侠,搜了n久才发现该文章,如今已经满地都是中文版本了。
本人坚持自力更生的原则,自己做一遍吧,不想只抄袭人家的内容,然后保存一下就再也不看了。想把知识运用起来。
废话少说,入正题。先做个简单的,实现窗口接受拖放到上面的文件,输出其全路径。
用到了如下三个函数:
VOID DragAcceptFiles( HWND hWnd, BOOL fAccept);
UINT DragQueryFile(HDROP hDrop, UINT iFile, LPTSTR lpszFile,UINT cch);
VOID DragFinish(HDROP hDrop);
函数更详细的解释参看MSDN。需要处理WM_DROPFILES消息。
剩下的就简单了。
第一步,当需要开始接受文件拖拽时,调用DragAcceptFiles。(一般是在窗口的初始化函数中。)
第二步,在WM_DROPFILES消息中调用DragQueryFile函数获取文件列表,并在结束处理后调用DragFinish释放系统分配的内存就可以了。
LRESULT OnInitDialog(...)
{
...
DragAcceptFiles(...);
...
return TRUE;
}
LRESULT on_drop_files_msg(...)
{
HDROP hdrop = (HDROP)wParam;
UINT ufc = DragQueryFile(hdrop,0xffffffff,0,0);
char buf[MAX_PATH];
for(UINT i=0; i<fc; ++i)
{
DragQueryFile(hdrop,i,buf,MAX_PATH);
...
}
DragFinish(hdrop);
return 0;
}
代码大概如此,已经能接收到拖拽到窗口上的文件了,DragQueryFile得出的是文件的全路径,之所以要循环调用,
是因为拖放操作可能同时拖了n个文件。
另有一函数DragQueryPoint类似于DragQueryFile,不过它的出的是松开鼠标时鼠标的坐标。并不难用。
好了,先到这。