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

2021-03-31 08:56:58 字數 1505 閱讀 2898

1、自已編寫專用的類,程式複雜、維護麻煩;2、必須要將檔案拖到對話方塊中的編輯控制項上,拖動的檔名才被接受,而標準的windows程式只須將檔案拖放到對話方塊即可被接受;3、只能接受乙個拖放的檔案。本文要介紹的這種方法只須呼叫乙個windows api函式dragqueryfile即可實現檔案的拖放操作,而且完全克服了上述3點不足。下面先介紹一下這個函式。

---- dragqueryfile原型為:

uint dragqueryfile( hdrop    hdrop,                    uint      ifile,                    lptstr   lpszfile,                    uint      cch )
---- 其中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) {	char *lpszfilename=new char[512],cfilecount[10];	int nfilecount,i;	nfilecount=::dragqueryfile    (hdropinfo,0xffffffff,null,512);	::afxmessagebox(itoa(nfilecount,cfilecount,10));	for (i=0;i
---- 注意程式中的::dragfinish (hdropinfo);語句是必不可少的,它用於釋放windows為處理檔案拖放而分配的記憶體。

---- 執行此程式可以看到,拖動的檔案只要一進入對話方塊的邊界,滑鼠上立刻會現乙個「+」,在對話方塊上的任意位置釋放滑鼠,拖放的檔案都會被接受,完全解決了《用mfc實現檔案拖放到編輯框》必須將檔案拖到編輯框的不足;而且拖放是通過呼叫windows api函式實現的,因此程式非常健壯,幾乎沒有什麼維護量。程式在indows98、vc++5.0下通過。

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

網上其他參考 實現檔案拖放的一種簡潔方法 本文要介紹的這種方法只須呼叫乙個windows api函式dragqueryfile即可實現檔案的拖放操作,而且完全克服了上述3點不足。下面先介紹一下這個函式。dragqueryfile原型為 uint dragqueryfile hdrop hdrop,u...

車羊問題的一種簡潔證明

在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 這...