Re: [語法] win32 API
※ 引述《yu00928 (難道我只是新八嗎)》之銘言:
: 各位大大好
: 小弟正在學win32 API
: 有一些地方實在搞不懂
: 到底wParam和lParam是什麼
: 他們有什麼差別
: 最重要的
: 什麼時候要用wParam
: 什麼時候要用lParam
: 請大大們指導一下小弟
: 謝謝
這是承襲Win16的舊包裹才寫成這樣...
在Win16 [Windows 3.1以前(包含3.1)], 基本預算單位是16 bits (int為16bits, 非32)
w是指word --> 16bits
l是指long --> 32bits
所以LPARAM的資料, 你可以使用HIWORD(x) / LOWORD(x)來抽取裡頭的低高位元組
而使用MAKELPARAM(a,b)來組成一個32bits的LPARAM資料
而不會看到WPARAM使用HIWORD和LOWORD來抽取兩個word... (如果該函數在win 16就存在)
但發展到這個年代後, 升級成win32, 整數基本單位自然也升級為32bits
所以wPARAM自然也變成32bits
而MAKEWPAPAM(a,b)的a/b自然也變成16bit
基本上舊有的API, 遇上LPARAM後, 是有可能塞進2個資料(例如說WM_MOUSEMOVE)
實際上, 當年WPARAM也是有可能塞兩筆8bits的資料的...
所以當初也是有HIBYTE和LOBYTE
但是windows的API不會這樣做(還好沒有, 不然持續發展到win32就容易出問題)
總而言之, 看到LPARAM, 就要知道他有可能塞兩筆資料, 利用LOWORD/HIWORD進行抽取吧
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.195.0.144
→
02/06 20:09, , 1F
02/06 20:09, 1F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章