- 版本
VS2012
- 執行個體說明
在文檔視圖結構中通過使用DragAcceptFiles函數可以使程式接收拖拽檔案,在對話框中也可以添加WM_DROPFILES消息的映射函數來使程式接收拖拽檔案。程式運作效果如圖所示。
- 關鍵技術
本執行個體的實作主要使用DragQueryFile函數。該函數用于擷取拖拽檔案的檔案名稱。
基本格式如下:
DragQueryFile(
HDROP hDrop,
UINT iFile,
LPSTR lpszFile,
UINT cch
);
參數說明:
hDrop:檔案名緩沖區的句柄。
iFile:檔案索引編号,如果iFile值為0xffffffff,傳回的是拖拽到窗體上的檔案的個數。如果iFile值在0和拖拽檔案總數之間,則DragQueryFile複制與檔案名存儲緩沖區大小适合的檔案名稱到緩沖區中。
lpszFile:函數傳回時,用于存儲拖拽檔案名稱的緩沖區指針。
cch:存儲拖拽檔案名稱緩沖區的大小,即lpszFile指針所指緩沖區的字元數。
- 設計過程
(1)建立一個基于對話框的應用程式。
(2)在對話框中添加清單控件,關聯一個控件變量,顯示拖入的檔案名。
(3)右擊設定對話框屬性,在ExternedStyle中選中Acceptfiles。
(4)通過ClassWizard設定Dlg類的屬性,選擇ClassInfo選項,将Messagefilter設定為Window,在Dlg類中添加WM_DROPFILES的消息處理。代碼如下:
void CDemoDlg::OnDropFiles(HDROP hDropInfo)
{
// TODO: 在此添加消息處理程式代碼和/或調用預設值
int ires;
char str[32];
ires = DragQueryFile(hDropInfo, 0xffffffff, NULL, 0);
for (int i = 0; i < ires; i++)
{
DragQueryFile(hDropInfo, i, str, 32);
m_filelist.AddString(str);
}
DragFinish(hDropInfo);
CDialogEx::OnDropFiles(hDropInfo);
}
- 示範
Caesar盧尚宇
2021年2月7日