zoukankan      html  css  js  c++  java
  • window响应拖拽文件操作

    window响应拖拽文件操作


    1.首先调用DragAcceptFiles,让控件或者窗体支持文件拖动操作
    函数功能:用来为拖放文件作初始化。
    函数原型:

    void DragAcceptFiles(
        HWND hWnd,      //指明目标窗体的句柄
        BOOL fAccept    //为True时 则hWnd所指向的窗体可以接受拖放的文件. 
    );

    2.消息事件中响应拖拽操作(WM_DROPFILES), 调用函数DragQueryFile和DragFinish
    [1].DragQueryFile
    函数功能:用来查下拖放文件的文件名。
    函数原型:

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

    参数说明:函数其本身的返回值是一个无符号整数;
    hDrop是一个文件名缓冲区句柄(存放所拖放文件名称的数据结构),需要从windows消息WM_DROPFILES中获得;
    iFile指明查询文件序号,取值0xFFFFFFFF时,函数返回值为所拖放文件数目,其他取值(0~文件拖放总数),对应文件名存放lpszFile缓冲区;
    lpszFile取值为NULL时,函数返回对应文件名的长度;
    cch决定缓冲区的长度;
    [2].DragFinish

    void DragFinish(HDROP hDrop)

    使用DragFinish函数告诉windows拖放操作结束,使其释放文件名缓冲区,参数hDrop与DragQueryFiles函数中一样,也由windows消息WM_DROPFILES中获得;

    3.例子:

    LRESULT CALLBACK CWinEventsWin32::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;    
        }
        //......;    //代码省略
    }
  • 相关阅读:
    机械设计手册
    如何在PADS的封装中做非金属化孔
    【Protle99SE】PCB中各层的含义【小汇】
    Stm32时钟分析
    头文件为什么要加#ifndef #define #endif
    android adb常用指令
    安装 SQLManagementStudio_x86_CHS(SQL Server Management Studio) 老提示重启的解决办法
    SQL 2008下载地址以及全新安装详细过程
    【原创】pads2007 Layout 电气连接性检查过孔显示错误
    十款最具发展前景机器人
  • 原文地址:https://www.cnblogs.com/sz-leez/p/4216638.html
Copyright © 2011-2022 走看看