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