1. 程式人生 > >VC支援檔案拖拽功能函式:DragAcceptFiles,DragQueryFile和DragFinish

VC支援檔案拖拽功能函式:DragAcceptFiles,DragQueryFile和DragFinish

一  VC支援檔案拖拽功能的三個函式:DragAcceptFiles,DragQueryFile和DragFinish。

1.DragAcceptFiles 確定視窗是否接收檔案拖拽。

void DragAcceptFiles(HWND hWnd,BOOL fAccept);

hWnd:接收檔案拖拽功能的視窗控制代碼。

fAccept:為TRUE則接收檔案拖拽,為FALSE不再接收。

對話方塊,可以右擊--Properties->Extended Styles,勾選Accept files,從而加上  EXSTYLE WS_EX_ACCEPTFILES 。

2.DragQueryFile 獲得拖拽後的檔名稱列表。

UINT DragQueryFile(HDROP hDrop,UINT iFile,LPTSTR lpszFile,UINT nLen);

hDrop:HDROP識別符號,即系統響應函式WindowProc中的wParam引數

iFile:從0開始的檔案索引號。如果該引數為0xFFFFFFFF,則返回拖拽的檔案個數。

lpszFile:用於存放檔名的緩衝區地址

nLen:緩衝區長度

函式返回值:若iFile為0xFFFFFFFF返回拖拽的檔案個數,否則返回相應索引號的檔名長度。

3. DragFinish 釋放系統為拖拽功能處理檔名稱而分配的記憶體。

void DragFinish(HDROP hDrop);

二  在對話方塊中,簡單地類嚮導為其加入WindowProc即可實現

LRESULT CDragFileDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 

{

switch (message)

{

case WM_CREATE:

//1 檔案拖拽 允許,可放在初始化中

DragAcceptFiles(TRUE);

return 0;

//2 檔案拖拽個數,對應的檔名

case WM_DROPFILES:

HDROP hDrop = (HDROP)wParam;

//2.1 引數0xFFFFFFFF ,將獲得拖拽檔案個數

UINT nFileNum = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0); 

char strFileName[MAX_PATH];

for (int i = 0; i < nFileNum; i++)  

{

//2.2 引數 i ,將獲得拖拽的第i個檔名

DragQueryFile(hDrop, i, strFileName, MAX_PATH);

//a 可將獲得的檔名稱,放入ListBox中

m_listbox.AddString(strFileName);

//b 也可將獲得的檔名稱,放入vector中

vetFileNames.push_back(strFileName); 

}

m_listbox.UpdateWindow();//重新整理ListBox

//3 釋放拖拽的hDrop

DragFinish(hDrop);   

return 0;

}

return CDialog::WindowProc(message, wParam, lParam);

}

三  對於vector 方式儲存檔名稱的還需要

1 需要的標頭檔案

#include 《vector》

#include 《cstring》

using namespace std;

vector《string》 vetFileNames; 

2 在需要的地方,彈出需要的檔名稱

CString str;

vector《string》::iterator pos;

//在需要的地方,顯示拖拽的檔名

for (pos = vetFileNames.begin(); pos != vetFileNames.end(); pos++)

{

 str=pos->c_str();

}