当前位置: 首页 > article >正文

window拖拽操作的实现

  1. 调用DragAcceptFiles,让控件或者窗体支持文件拖动操作
void DragAcceptFiles(
    HWND hWnd,      //指明目标窗体的句柄
    BOOL fAccept    //为True时 则hWnd所指向的窗体可以接受拖放的文件. 
);
  1. 窗口消息过程处理WM_DROPFILES消息。

在WM_DROPFILES消息处理过程中,wParam参数的值为HDROP,通过调用DragQueryFile获得拖拽的文件个数和文件名,对文件进行相应的操作处理后,调用DragFinish函数释放缓冲区,完成拖拽操作。

UINT DragQueryFile(
    HOROD hDrop,
    UINT iFile,
    LPTSTR lpszFile,
    UINT cch,
);

返回值:

非零值表示调用成功。

当函数将文件名复制到缓冲区时,返回值是复制的字符计数,不包括终止 null 字符。

如果索引值为0xFFFFFFFF,则返回值是已拖放文件的计数。 请注意,索引变量本身返回不变,因此保持0xFFFFFFFF。

如果索引值介于零和已拖放文件总数之间,并且 lpszFile 缓冲区地址为 NULL,则返回值是缓冲区所需的大小(以字符为单位), 不包括 终止 null 字符。

参数说明:
hDrop是一个文件名缓冲区句柄。
iFile指明查询文件序号。取值0xFFFFFFFF时,函数返回值为所拖放文件数目;其他取值(0~文件拖放总数),获取对应序号的文件名的缓冲区地址。
lpszFile取值为NULL时,函数返回对应文件名的长度。

DragFinish函数声明拖放操作结束,释放文件名缓冲区。

void DragFinish(HDROP hDrop)

例子:

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
        case WM_CREATE:
            DragAcceptFiles(hWnd, TRUE);//接受拖放事件设置
            break;

        case WM_DROPFILES:
            {
                HDROP hdrop = (HDROP)wParam;
                char sDropFilePath[MAX_PATH+1];
                int iDropFileNums = 0;
                iDropFileNums = DragQueryFile(hdrop, 0xFFFFFFFF, NULL, 0);//获取拖放文件个数
                for (int i=0; i<iDropFileNums; i++)//分别获取拖放文件名(针对多个文件操作)
                {    
                    DragQueryFile(hdrop, i, sDropFilePath, sizeof(sDropFilePath));    
                }

                //DragQueryFile(hdrop, 0, sDropFilePath, MAX_PATH);//分别获取拖放文件名(针对单个文件操作)    
                DragFinish(hdrop);//释放文件名缓冲区    
            }
            break;
        default:
            break;    
    }
}

参考地址:http://kaifa.yiyuen.com/kaifa/article/57e5812eb98d3c3339d5fa7d7c99f5b8


http://www.kler.cn/a/134525.html

相关文章:

  • vxe-table 3.10+ 进阶高级用法(一),根据业务需求自定义实现筛选功能
  • learn-F12 Performance(性能)前端性能分析(LCP,CLS,INP)
  • 计算机的错误计算(一百五十二)
  • Python的Web请求:requests库入门与应用
  • 羊城杯2020Easyphp
  • 星期-时间范围选择器 滑动选择时间 最小粒度 vue3
  • python连接hive报错:TypeError: can‘t concat str to bytes
  • 【面试经典150 | 数学】Pow(x, n)
  • 论文阅读:YOLOV: Making Still Image Object Detectors Great at Video Object Detection
  • Linux系统上导出和导入MongoDB数据库
  • Vue 3 和 Spring Boot 3 的操作流程和执行步骤详解
  • 视频修复软件 Aiseesoft Video Repair mac中文版功能
  • Spring Boot中使用Redis进行大数据缓存
  • 连接服务器上mysql数据库
  • 【交易误区】MT4外汇交易必读:新手常犯的交易错误有哪些?
  • 小程序开通电子发票
  • 中小企业怎么实现数字化转型?有什么实用的工单管理系统?
  • Notepad++ 和正则表达式 只保留自己想要的内容
  • idea项目中java类名出现带 j 小红点,如何解决?
  • 使用契约的链上限价订单
  • 【ArcGIS】批量对栅格图像按要素掩膜提取
  • 2024年全网最全的Jmeter+ant+jenkins实现持续集成教程
  • 磁钢的居里温度和工作温度
  • c++ list容器使用详解
  • UE基础篇十:材质
  • java多线程中的Fork和Join