VC程式設計支援視窗拖拽開啟檔案

2021-06-20 11:45:10 字數 1711 閱讀 9777

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)   

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

i=0; 

delete   lpszfilename; 

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

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

總結:mfc: 

初始化過程中,呼叫   cwnd::dragacceptfiles(); 也可在資源對話方塊中設定acceptfiles=true;

然後過載   cwnd::ondropfiles(),按   e17(守護星)   的回帖操作   

sdk: 

呼叫api:(#include   ) 

void   dragacceptfiles(hwnd   hwnd,   bool   faccept); 

然後處理   wm_dropfiles   訊息:   

hdrop   hdrop   =   (hdrop)   wparam;   

得到hdrop後,呼叫: 

uint   ndropfilecount   =   dragqueryfile(hdrop,   (uint)-1,   null,   0); 

得到拖入的檔案數目,然後依次呼叫 

uint   dragqueryfile(hdrop   hdrop,   uint   ifile,   lptstr   lpszfile,   uint   cch); 

就可以得到所有拖入的檔名。

VC檔案拖拽

描述 類似qq使用中的檔案拖拽到聊天,實現傳輸檔案 1 c program files microsoft visual studio 8 vc platformsdk include winuser.h 檔案中要有 define wm dropfiles 0x0233 2 視窗屬性中 3 訊息對映...

手動實現視窗支援拖拽

近一次查詢視窗拖拽事件時,發現相關 被注釋,然而仍然支援拖拽 drag and drop 有些疑惑便查了一下,發現除了使用訊息外,還可以通過實現以下介面的方式支援 應用程式幾乎都是用的ole 技術 1.idropsource 源 2.idroptarget 目標 3.idataobject 正在拖放...

讓窗體支援檔案拖拽

一 基本概念 拖放,是指用滑鼠拖動的方法,在不同程式的視窗之間 同乙個程式的不同視窗之間或同一程式同一視窗的不同控制項之間,進行移動 複製和貼上等操作的技術。拖放操作是在作業系統的幫助下完成的。被拖動的物件首先向作業系統註冊它使用的資料格式,並按指定的資料格式提供資料,拖放操作結束時,接收拖放的視窗...