天天看點

VC++拖拽檔案到對話框

  • 版本

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);
}      
  • 示範
VC++拖拽檔案到對話框

Caesar盧尚宇

2021年2月7日

繼續閱讀