码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • window拖拽操作的实现


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

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

    UINT DragQueryFile(
        HOROD hDrop,
        UINT iFile,
        LPTSTR lpszFile,
        UINT cch,
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    返回值:

    非零值表示调用成功。

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

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

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

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

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

    void DragFinish(HDROP hDrop)
    
    • 1

    例子:

    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;    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

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

  • 相关阅读:
    Topology零部件拆解3D可视化解决方案
    使用Apache Flink实现实时数据同步与清洗:MySQL和Oracle到目标MySQL的ETL流程
    Nodejs调用C++文件
    【Windows】局域网内共享文件夹的设置方法
    每天五分钟机器学习:支持向量机损失函数和互熵损失函数
    【Spring Security】安全框架学习(八)
    4.Python-用Python,Ajax实现MySQL数据库的新增数据
    训练深度神经网络,使用反向传播算法,产生梯度消失和梯度爆炸问题的原因?
    【虚幻引擎】UE5 VLC接入网络监控、视频直播、网络直播支持RTSP、RTMP
    数组的方法以及数组的创建以及概念
  • 原文地址:https://blog.csdn.net/m0_37567738/article/details/134503978
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号