一、鍵盤事件處理過程。
1,擊鍵。
2,windows和鍵盤驅動程式將硬體掃瞄嗎轉化為格式訊息,放在windows維護的"系統訊息佇列"中。
3,windows從系統訊息佇列中,取乙個訊息,傳送給當前獲得焦點的視窗的應用程式訊息佇列。
4,應用程式處理該該訊息完畢後,windows才能接下來從"系統訊息佇列"中去獲得下乙個訊息。
因為前面的訊息處理可能會影響後乙個訊息的處理情況,比如tab按鍵可能會影響獲得焦點的控制項等等。
二、擊鍵產生的訊息:
系統鍵 wm_syskeydown wm_syskeyup
非系統鍵 wm_keydown wm_keyup
系統鍵由alt+其他鍵組成,程式一般忽略系統鍵,並把它直接交給defwindowproc處理,然後接受處理後的結果。
三、鍵盤訊息
msg.wparam 存放虛擬鍵碼。
msg.lparam 存放其他資訊。
四、虛擬鍵碼。
對於鍵盤硬體來說,按鍵是按照鍵的物理順序編碼的,但程式中不這樣,所以有一套對應的虛擬鍵碼。
vk_開頭的,可以在程式中檢視定義的地方看。
ctrl + pause break = esc
五、lparam資訊:
31位 : 轉換狀態 --- 正在被按下or釋放
30位 : 鍵先前的狀態
29位 : 環境** -- 是否按下alt
24位 : 擴充套件鍵標誌
23-16位:oem掃瞄嗎
15-0位:重複計數 -- 有幾下沒處理的按鍵訊息
取出某一位的演算法: 0x80000000 & msg.lparam
六、檢測某按鍵是否按下:
getkeystate(ck_shift)。如果結果的高位被置位,也就是為負,就表示按下:
if (getkeystate(vk_shift)<0)
if (hiword(getkeystate(vk_shift)))
七、擊鍵訊息和字元訊息。
wm_keydown 產生 wm_char
八、插入符函式
createcaret
setcaretpos
getcaretpos
showcaret
hidecaret
destroycaret
getcaretblinktime
setcaretblinktime
讀書筆記 Windows核心程式設計
第二章 從windows nt後,windows所有版本都用unicode來構建。如果輸入乙個非unicom的字串,如ansi,函式會將其先轉換為unicode,再把結果傳回作業系統,這樣經過轉換後,需要更多的記憶體,而且執行速度更慢。並且,目前已知的windows的這些轉換函式存在一些bug。所有...
《Windows核心程式設計》讀書筆記(一)
第1章對程式錯誤的處理 1 常見的windows函式的返回型別 void 無返回值型,該函式的執行不可能失敗。windows函式很少此型別 bool 函式執行失敗則返回0,否則返回非0 handle 失敗則返回null,否則返回乙個可操作的物件的handle。注 有些函式會返回乙個控制代碼值inva...
《Windows核心程式設計》讀書筆記(三)
unicode 寬位元組字符集是是為了解決軟體本地化 多語言版本化 而定製的一項技術標準。unicode字串中的所有字元都是16位的 兩個位元組 程式設計師只需要對指標進行遞增或者遞減,就可以遍歷字串中的各個字元,不在需要像單位元組字元一樣去判斷下一位元組是屬於同一字元的組成部分還是乙個新字元。使用...