基于C语言Win32API的可视化界面的qaac【1】

来源:互联网 发布:淘宝收到法院传票 编辑:程序博客网 时间:2024/06/06 06:51

今天完成了拖拽部分,实现了将文件拖拽进入程序窗口,读出拖入文件数量和路径,核心代码如下:

  • 在窗口建立时,使用DragAcceptFiles函数使窗口可以响应拖拽。
DragAcceptFiles(hwnd, TRUE);
  • 消息循环中响应WM_DROPFILES
case WM_DROPFILES:            OnDropFiles(hwnd, (HDROP)wParam);             break;
  • OnDropFiles函数中,使用DragQueryFile函数读取文件内容。
VOID OnDropFiles(HWND hwnd, HDROP hDropInfo)    {        UINT  nFileCount = DragQueryFile(hDropInfo, (UINT)-1, NULL, 0);  //查询一共拖拽了几个文件      TCHAR* szFileNameList = (TCHAR*)malloc(sizeof(TCHAR)*MAX_PATH*nFileCount);    UINT i;    TCHAR* temp = szFileNameList;    for(i=0;i<MAX_PATH*nFileCount;i++)    {        *temp++ = 0;    }    for(i=0;i<nFileCount;i++)      {        DragQueryFile(hDropInfo, i, szFileNameList+MAX_PATH*i, sizeof(TCHAR)*MAX_PATH);  //打开拖拽文件      }    //完成拖入文件操作,系统释放缓冲区       DragFinish(hDropInfo);    }   

DragQueryFile函数

UINT DragQueryFile(  _In_  HDROP  hDrop,  _In_  UINT   iFile,  _Out_ LPTSTR lpszFile,        UINT   cch);

参数

hDrop [in]
Type: HDROP
拖拽文件的传入结构,保存在wParam参数中。

iFile [in]
Type: UINT
所查询文件的索引,如果有3个文件,那么第一个文件此参数是0,第二个是1,第三个是2。
如果此参数是-1,函数返回拖入文件数目。如果此参数大于等于0,函数把索引指向的文件的文件名复制到第三个参数所指地址中。

lpszFile [out]
Type: LPTSTR
接收文件名的地址。如果此参数是NULL,函数返回需要的字符串大小。

cch
Type: UINT
第三个参数对应缓冲区的大小。

返回值

Type: UINT
函数调用成功将返回一个非0值。
若函数成功将文件名复制到buffer,返回值是复制的字符数,不包括\0。

0 0
原创粉丝点击