接受文件拖拽窗口的实现

    长期以来,我似乎都没有对知识进行总结,寄希望于博客吧。
    早上闲着没事,想起来一篇关于拖拽的文章,第一次见到还是借助于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,不过它的出的是松开鼠标时鼠标的坐标。并不难用。
    好了,先到这。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值