DRAG 實現檔案拖放的一種簡潔方法

2021-06-22 22:23:59 字數 1503 閱讀 5302

網上其他參考

實現檔案拖放的一種簡潔方法 

本文要介紹的這種方法只須呼叫乙個windows api函式dragqueryfile即可實現檔案的拖放操作,而且完全克服了上述3點不足。下面先介紹一下這個函式。 

---- dragqueryfile原型為: 

uint dragqueryfile (hdrop hdrop, uint ifile, lptstr lpszfile, uintcch)

---- 其中hdrop是指向拖動檔案結構的控制代碼; 

---- ifile 是以0開始的被託動檔案的序號,因為一次可能拖動多個檔案。當此引數 

---- 設為0xffffffff,則函式返回拖動檔案的數量; 

---- lpszfile 是指向檔名的緩衝區; 

---- cch 是檔名緩衝區的大小,即檔名的字元數。 

---- 明確了該函式的引數後,程式設計就是一件很簡單的事情了。以下給出乙個完整的例項,

程式執行後彈出乙個對話方塊,可以拖動任意數量的檔案或目錄到上面,

鬆開滑鼠後,程式先顯示拖放檔案的數量,然後將拖放的檔名全部顯示在乙個list box控制項中。

具體步驟如下: 

建立乙個基於對話方塊的工程drop,然後其它選項全部用預設值。 

選中idd_drop_dialog對話方塊中extended styles的accept files屬性。 

給idd_drop_dialog對話方塊新增乙個list box 控制項idc_list1。 

在classwizard中給cdropdlg類新增成員變數m_list,型別為clistbox。 

給cdropdlg類中增加處理windows訊息wm_dropfiles的函式,

接受系統給出的預設名字ondropfiles,然後輸入以下**:

void cdropdlg::ondropfiles(hdrop hdropinfo) 

::dragfinish (hdropinfo);   //釋放記憶體

i=0;

delete lpszfilename;

// cdialog::ondropfiles(hdropinfo);     此語句注釋掉

}---- 注意程式中的::dragfinish (hdropinfo);語句是必不可少的,它用於釋放windows為處理檔案拖放而分配的記憶體。

自己寫的例子:

void ccdragdlg::ondropfiles(hdrop hdropinfo)

afxmessagebox(strtmp);

::dragfinish (hdropinfo);   //釋放記憶體

i=0;

delete lpszfilename;

// cdialog::ondropfiles(hdropinfo);     此語句注釋掉

cdialog::ondropfiles(hdropinfo);

wm_dropfiles訊息如果找不到,就先到嚮導的最後一項class info右下的message filter選windows

實現檔案拖放的一種簡潔方法

1 自已編寫專用的類,程式複雜 維護麻煩 2 必須要將檔案拖到對話方塊中的編輯控制項上,拖動的檔名才被接受,而標準的windows程式只須將檔案拖放到對話方塊即可被接受 3 只能接受乙個拖放的檔案。本文要介紹的這種方法只須呼叫乙個windows api函式dragqueryfile即可實現檔案的拖放...

車羊問題的一種簡潔證明

在csdn上看到一篇關於車羊問題的文章 我編了個程式證明了結論,然後給出了一種簡潔的數學證明。如下 車羊問題 car and goats problem 又叫蒙提霍爾問題 monty hall problem 或三門問題。這個問題 於美國電視娛樂節目let s make a deal,問題的名字則來...

php 使用post,get的一種簡潔方式

近來看到了乙個巧妙地方法,原理是 var a var b var a test 則echo var b 為 te 因此可以這樣處理 複製 如下 foreach array cookie post get as request www.cppcns.com key addslashes value 這...