zoukankan      html  css  js  c++  java
  • 【Demo 0034】窗体支持文件拖拽

    许多支持文件打开的软件如VS、NotePad, Word,通常都支持鼠标拖拽文件到应用软件窗体实现快速打开文件。 本节里我们也模仿这个功能的实现.

    要完成此功能大体思路:

    1.  窗体需要支持WS_EX_ACCEPTFILE 这个属性;

    2.  通过处理WM_DRAPFILES消息使用DragQureyFile, DrayGetFileList函数即可得到拖入窗体的文件及文件夹,用DrayClose释放资源。

    一、代码演示


    case WM_DROPFILES:
    {
        HDROP hDrop = (HDROP)wParam;
        if (NULL != hDrop)
        {
            UINT nDirCount = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0);        // get file count
            if (0 < nDirCount)
            {
                TCHAR szFilePath[MAX_PATH];
                TCHAR szTemp[MAX_PATH + 32];
        
                for (int ii = 0; ii < nDirCount; ii++)                        // get file path
                {
                    //int nPathLen = DragQueryFile(hDrop, ii, szFilePath, NULL);
                    DragQueryFile(hDrop, ii, szFilePath, MAX_PATH);        
                
                    DWORD dwAttr = GetFileAttributes(szFilePath);
                    if (dwAttr & FILE_ATTRIBUTE_DIRECTORY)
                    {
                        _tcscpy(szTemp, _T("Dir  -- "));
                    } else {
                        _tcscpy(szTemp, _T("File -- "));
                    }
                    _tcscat(szTemp, szFilePath);
                    SendDlgItemMessage(hWnd, IDC_LSTWNDLIST, LB_ADDSTRING, 0, (LPARAM)szTemp);
                }
            }
            DragFinish(hDrop);
        }

        break;
    }

    二、代码分析

      1.  WM_DROPFILES 消息, 窗体支持WS_EX_APPCEPTFILE 风格后当用户拖拽文件到窗体会触发此消息

           wParam  -- 返回HDROP 对象

           lParam    -- not used

      2.  UINT DragQueryFile(HDROP hDrop, UINT iFile, LPTSTR lpszFile, UINT cch)

           hDrop   -  WM_DROPFILESR wParam 返回的对象

           iFile       -  指定被拖入窗体的文件列表的索引

           lpszFile  – 指定文件列表索引的文件路径缓冲

           cch        - lpszFile 缓冲大小

          功能1. 当iFile为0xFFFFFFFF且lpszFile 为NULL时, 返回被拖入窗体的文件数;

          功能2. 当iFile为文件列表索引(0~被拖入窗体的文件数)时, 将文件列表中索引为iFile的路径保存到lpszFile中;

          功能3. 当iFile为文件列表索引(0~被拖入窗体的文件数)cch为0时,返回文件列表中索引路径的长度.

    3.  VOID DragFinish(HDROP hDrop)

          hDrop     - WM_DROPFILESR wParam 返回的对象

          功能:  释放hDrop对象资源

    演示代码

  • 相关阅读:
    C#中List<T>用法
    windows phone中,将crash report记录下来,写入文件,方便分析
    解决问题之,wp项目中使用MatchCollection正则表达式匹配出错
    提问的智慧
    toolkit,phonetextbox中实现用户按回车键会换行
    Hibernate主键生成策略
    hibernate.cfg.xml位置及JDBC配置
    Java与数字签名
    MyEclipse不能编译的一种解决方法
    java读文件和写文件编码方式的控制
  • 原文地址:https://www.cnblogs.com/ztercel/p/2153890.html
Copyright © 2011-2022 走看看