win32 API實現檔案拖拽開啟

2021-07-30 14:41:59 字數 1846 閱讀 9469

在windows中,我們開啟乙個文字檔案後,可以將另乙個文字檔案拖拽進來,從而實現開啟此檔案。那麼這個功能是怎麼實現的呢?

經過一下午的實踐,現將具體**分享如下:

#include #define id_edit     1

lresult callback wndproc (hwnd, uint, wparam, lparam);

int winapi winmain (hinstance hinstance, hinstance hprevinstance,

pstr szcmdline, int icmdshow)

cw_usedefault, cw_usedefault,

700, 500,//設定寬和高

null, null, hinstance, null) ;

showwindow (hwnd, icmdshow) ;

updatewindow (hwnd) ;

while (getmessage (&msg, null, 0, 0))

return msg.wparam ;

}void read_file(hwnd hwnd,tchar* szfilename)

file_size = getfilesize(hfile,null);

chbuffer = (tchar*)malloc(file_size*sizeof(tchar) +1);//多分配一字元用於儲存'\0'

readfile(hfile,chbuffer,file_size,&dwreadsize,null);

chbuffer[file_size] = '\0';

setwindowtext(hedit,chbuffer);

closehandle(hfile);

free(chbuffer);

}void ondropfiles(hwnd hwnd, hdrop hdropinfo)

lresult callback wndproc (hwnd hwnd, uint message, wparam wparam, lparam lparam)

return defwindowproc (hwnd, message, wparam, lparam) ;

}

此程式手動實現了乙個簡單的記事本功能,最重要的是實現了拖拽開啟文字檔案的功能。該程式比起普通的win32程式來說,有幾點不同。

1,採用createwindowex(傳統的createwindow缺少乙個style的引數),並指定ws_ex_acceptfiles風格。

2,通過dragqueryfiles取得拖拽檔案的檔名,createfile、getfilesize、readfile實現讀取檔案內容,並儲存在乙個動態的字串指標中。dragqueryfiles的引數形式如下:

uint dragqueryfile(hdrop hdrop, uint ifile, lptstr lpszfile, uint cch);
此函式用來獲取拖放的檔名。

(1)hdrop是wm_dropfiles訊息的wparam引數;

(2)設定ifile=0xffffffff的話,此函式返回拖放的檔案總數,記為count。設定ifile為區間[0, count)之間的任一整數就可以在lpszfile中得到序號為ifile的檔名,這個序號和使用者在shell中點選檔案圖示的順序有關;

(3)cch是該緩衝區的大小;

(4)lpszfile是用於容納檔名的緩衝區,此檔名包含檔案路徑。

3,setwindowtext設定文字內容時,要通過chbuffer[file_size] = '\0'將字串的最後乙個字元設為'\0'結束符。

Win32 API檔案讀寫操作

1 檔案的建立和開啟 handle createfile lpctstr lpfilename,dword dwdesiredaccess,dword dwsharemode,lpsecurity attributes lpsecurityattributes,dword dwcreationdis...

win32彙編使用win32 api實現字串拷貝

字串拷貝,呼叫win32的lstrcpy函式 拷貝了以後用訊息框顯示一下 386 model flat,stdcall option casemap none include s masm32 include windows.inc include s masm32 include user32.i...

用Win32 API實現序列通訊

2003 7 9 7 56 18 pcvc.wangxi 閱讀次數 30453 串列埠是常用的計算機與外部序列裝置之間的資料傳輸通道,由於序列通訊方便 易行,所以應用廣泛。我們可以利用windows api 提供的通訊函式編寫出高可移植性的 序列通訊程式。在win16中,可以利用open m clo...