




已閱讀5頁(yè),還剩30頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第8章鍵盤程序編程基礎(chǔ) 鍵盤和鼠標(biāo)是兩個(gè)標(biāo)準(zhǔn)的用戶輸入來(lái)源 它們?cè)谳斎脒^(guò)程中起著互補(bǔ)作用 特別是在今天 鼠標(biāo)在應(yīng)用程序中的應(yīng)用比十年前更為廣泛 甚至在應(yīng)用程序中 我們更習(xí)慣于使用鼠標(biāo) 例如在游戲 畫圖程序 音樂(lè)程序以及Web瀏覽器等程序中就是這樣 然而 在一般的PC機(jī)中 我們?nèi)匀徊话咽髽?biāo)當(dāng)作必須設(shè)備 而把鍵盤作為必備設(shè)備 鍵盤是個(gè)人電腦的組件 鍵盤有非常久遠(yuǎn)的歷史 它起源於1874年的第一臺(tái)Remington打字機(jī) 早期的電腦程序員用鍵盤在Hollerith卡片上打孔 後來(lái)在終端機(jī)上用鍵盤直接與大型主機(jī)溝通 PC上的鍵盤在某些方面進(jìn)行了擴(kuò)充 例如 加上了功能鍵 游標(biāo)移動(dòng)鍵和單獨(dú)的附加鍵盤 數(shù)字小鍵盤 但它們的輸入原理基本相同 8 1鍵盤輸入概論 早期的電腦程序員用鍵盤在Hollerith卡片上打孔 後來(lái)在終端機(jī)上用鍵盤直接與大型主機(jī)溝通 PC上的鍵盤在某些方面進(jìn)行了擴(kuò)充 例如 加上了功能鍵 游標(biāo)移動(dòng)鍵和單獨(dú)的附加鍵盤 數(shù)字小鍵盤 1 功能鍵 Alt F1 F10功能鍵是調(diào)動(dòng)系統(tǒng)功能的按鍵應(yīng)用程序一般不必關(guān)心 不必監(jiān)視它們的消息交由Windows系統(tǒng)處理 即給DefWindowProc 函數(shù)處理 2 加速鍵原程序在資源里定義 即 與菜單項(xiàng)綁定 應(yīng)用程序一般不必關(guān)心 不必監(jiān)視它們的消息交由DefWindowProc 函數(shù)處理 8 1鍵盤輸入概論 3 Windows應(yīng)用程序如何獲得鍵盤的輸入呢 鍵盤的輸入 敲鍵 鍵盤事件 發(fā)送到Windows系統(tǒng) 鍵盤消息 應(yīng)用程序 8 1 1鍵盤的輸入焦點(diǎn) 能夠接收特定鍵盤消息的窗口稱為具有輸入焦點(diǎn)的窗口 那個(gè)窗口具有輸入焦點(diǎn)可以由Windows系統(tǒng)來(lái)決定 也可以由應(yīng)用程序的窗口函數(shù)通過(guò)攔截WM SETFOCUS和WM KILLFOCUS消息來(lái)判定它的窗口何時(shí)擁有或刪除輸入焦點(diǎn) 程序從消息隊(duì)列中取出消息 該消息是一個(gè)MSG結(jié)構(gòu) 此結(jié)構(gòu)中的hwnd欄目就是指向接收此消息的窗口函數(shù)的指針 每個(gè)消息都有指向接收消息的hwnd 當(dāng)然只有這個(gè)窗口的窗口函數(shù)接收此鍵盤消息 structMSG HWNDhwnd 接收消息的窗口代號(hào) 句柄 UINTmessage 消息名ID號(hào)WPARAMwParam 消息參數(shù)1LPARAMlParam 消息參數(shù)2DWORDtime 消息出現(xiàn)的時(shí)間POINTpt 鼠標(biāo)在屏上的坐標(biāo) 8 1 2系統(tǒng)消息隊(duì)列 應(yīng)用程序消息隊(duì)列 用戶按下 釋放按鍵 Windows和鍵盤驅(qū)動(dòng)程序 掃描碼 系統(tǒng)消息隊(duì)列 應(yīng)用程序的消息序列 鍵盤電路 鍵盤消息 Windows系統(tǒng) Windows系統(tǒng)分發(fā) 8 2按鍵 鍵盤事件 用戶按下或釋放鍵盤上的按鍵鍵盤事件的表現(xiàn)形式是一個(gè)鍵盤掃描碼 鍵盤消息 Windows和鍵盤驅(qū)動(dòng)程序?qū)㈡I盤掃描碼轉(zhuǎn)換為格式化的鍵盤消息 鍵盤消息分類 可以分為按鍵消息和字符消息兩類 字符消息鍵 對(duì)能產(chǎn)生可顯示字符的按鍵 Windows不僅給應(yīng)用程序發(fā)送按鍵消息 而且還發(fā)送字符消息 WM CHAR 非字符消息鍵 shift鍵 功能鍵 光標(biāo)方向鍵 特殊字符鍵 如Insert和Delete Windows只發(fā)送 產(chǎn)生 按鍵消息 8 2 2四個(gè)按鍵消息 桉下按鍵時(shí) Windows把WM KEYDOWN或者WM SYSKEYDOWN消息放到具有輸入焦點(diǎn)的窗口的應(yīng)用程序隊(duì)列里釋放按鍵時(shí) Windows把WM KEYUP或者WM SYSKEYUP消息放到具有輸入焦點(diǎn)的窗口的應(yīng)用程序隊(duì)列里 當(dāng)桉下按鍵不放持續(xù)一段時(shí)間時(shí) Windows會(huì)給窗口發(fā)送一系列的WM KEYDOWN或者WM SYSKEYDOWN消息 按鍵消息有四種形式 8 2 3系統(tǒng)按鍵消息與非系統(tǒng)按鍵消息 非系統(tǒng)按鍵消息 WM KEYDOWN和WM KEYUP系統(tǒng)按鍵消息 WM SYSKEYDOWN和WM SYSKEYUP系統(tǒng)按鍵 通常是 Alt 另一個(gè)鍵 的組合Alt Tab Alt F4 Alt Esc系統(tǒng)按鍵的作用是 打開(kāi)程序的菜單或者系統(tǒng)菜單上的某選項(xiàng) 用于切換活動(dòng)窗口等系統(tǒng)功能 應(yīng)用程序一般對(duì)WM SYSKEYDOWN和WM SYSKEYUP消息忽略 不感興趣 即交給DefWindowProc 函數(shù)處理 8 2 4虛擬鍵碼 鍵盤消息發(fā)生時(shí) MSG結(jié)構(gòu)體中的wParam表示按下或釋放鍵得到的虛擬鍵碼 而lParam則包含了屬於按鍵的其他信息 虛擬鍵碼 是Windows設(shè)計(jì)者在WinUser h文件中用識(shí)別字定義的一種 鍵位碼 數(shù)字 字母的虛擬鍵碼用ASCII碼定義 其余都用識(shí)別字定義 附加鍵盤上的虛擬鍵碼是單獨(dú)定義的 鍵盤消息structMSG HWNDhwnd 接收消息的窗口代號(hào) 句柄 UINTmessage 按鍵消息名WPARAMwParam 虛擬鍵碼LPARAMlParam 消息參數(shù)DWORDtime 消息出現(xiàn)的時(shí)間POINTpt 鼠標(biāo)在屏上的坐標(biāo) 8 2 4虛擬鍵碼 鍵盤消息structMSG HWNDhwnd 接收消息的窗口代號(hào) 句柄 UINTmessage 按鍵消息名WPARAMwParam 虛擬鍵碼LPARAMlParam 消息參數(shù)DWORDtime 消息出現(xiàn)的時(shí)間POINTpt 鼠標(biāo)在屏上的坐標(biāo) 8 2 4虛擬鍵碼 鍵盤消息structMSG HWNDhwnd 接收消息的窗口代號(hào) 句柄 UINTmessage 按鍵消息名WPARAMwParam 虛擬鍵碼LPARAMlParam 消息參數(shù)DWORDtime 消息出現(xiàn)的時(shí)間POINTpt 鼠標(biāo)在屏上的坐標(biāo) 8 2 4虛擬鍵碼 鍵盤上的字母和數(shù)字鍵的虛擬鍵碼 鍵盤消息structMSG HWNDhwnd 接收消息的窗口代號(hào) 句柄 UINTmessage 按鍵消息名WPARAMwParam 虛擬鍵碼LPARAMlParam 消息參數(shù)DWORDtime 消息出現(xiàn)的時(shí)間POINTpt 鼠標(biāo)在屏上的坐標(biāo) 8 2 5按鍵消息的參數(shù)lParam 1 重復(fù)計(jì)數(shù) 16 bit 2 OEM掃描碼 8 bit 3 擴(kuò)充鍵識(shí)別字 1 bit 4 環(huán)境代碼 1 bit 5 鍵的先前狀態(tài) 1 bit 6 轉(zhuǎn)換狀態(tài) 1 bit 圖8 1lParam變量中的6個(gè)按鍵欄目 鍵盤消息structMSG HWNDhwnd 接收消息的窗口代號(hào) 句柄 UINTmessage 按鍵消息名WPARAMwParam 虛擬鍵碼LPARAMlParam 消息參數(shù)DWORDtime 消息出現(xiàn)的時(shí)間POINTpt 鼠標(biāo)在屏上的坐標(biāo) 8 2 6使用GetKeyState函數(shù)了解按鍵的狀態(tài) 按鍵的狀態(tài) 是指某個(gè)鍵盤按鈕按下去沒(méi)有GetKeyState 函數(shù) 獲得某個(gè)鍵盤按鈕的按鍵的狀態(tài) SHORTGetKeyState intnVirtKey nVrtKey 虛擬鍵碼若要求的虛擬鍵是字母或數(shù)字 A Z a z或0 9 nVirtKey必須被置為相應(yīng)字符的ASCII碼值對(duì)于其他的鍵 nVirtKey必須是一虛擬鍵碼 返回值 給出了給定虛擬鍵的狀態(tài)最高二進(jìn)制位為1 則鍵處于DOWN狀態(tài)最高二進(jìn)制位為0 則鍵為UP狀態(tài)例子 intiState GetKeyState VK SHIFT if iState 0 MsgBox NULL Shift ShiftisDown MB OK 8 2 6使用GetKeyState 函數(shù)了解按鍵的狀態(tài) 經(jīng)常應(yīng)用 使用虛擬鍵碼常數(shù)VK SHIFT VK CONTROL和VK MENU作為nVirtKey參數(shù)的值 它給出shift ctrl或alt鍵的值而不區(qū)分左右鍵區(qū)分鍵的左 右鍵的情形 使用如下的虛擬鍵碼常數(shù)作nVirtKey的值VK LSHIFT VK RSHIFT 左 右Shift鍵VK LCONTROL VK RCONTROL 左 右Ctrl鍵VK LMENU VK RMENU 左 右Menu鍵請(qǐng)注意GetKeyState 的使用 只檢查正在處理的鍵盤信息發(fā)生時(shí)有關(guān)鍵的按鍵狀態(tài) 不能獲得和鍵盤消息無(wú)關(guān)的其它鍵的狀態(tài) 8 2 7按鍵消息及其使用 四個(gè)按鍵消息僅能表示系統(tǒng)鍵還是非系統(tǒng)鍵產(chǎn)生的 是桉下還是釋放產(chǎn)生的 要知道是哪個(gè)按鍵產(chǎn)生的消息 則必須要看消息參數(shù)wParam lParam WM SYSKEYDOWN和WM SYSKEYUP消息是由Windows系統(tǒng)使用的鍵盤消息 應(yīng)用程序編程人員不必為此費(fèi)心編程員只要處理WM KEYDOWN消息就行了 WM KEYUP消息通常也可以忽略 所以 Windows程序編程人員對(duì)不產(chǎn)生字符的按鍵通常使用WM KEYDOWN消息 switch message caseWM KEYDOWN break 8 2 7按鍵消息及其使用 上機(jī)習(xí)題 通過(guò)方向鍵控制方塊在窗口的客戶區(qū)內(nèi)運(yùn)動(dòng)分析 1 變量定義 intx0 10 y0 10 最初的坐標(biāo)值intx1 x2 y1 y2 intdx 50 dy 50 矩形的長(zhǎng) 寬staticintrow 0 line 0 矩形目前所在的行列號(hào)2 功能分類 1 畫矩形caseWM PAINT hdc BeginPaint hwnd x1 y1 x2 y2 8 2 7按鍵消息及其使用 上機(jī)習(xí)題 通過(guò)方向鍵控制方塊在窗口的客戶區(qū)內(nèi)運(yùn)動(dòng)分析 2 獲取鍵盤虛擬碼 caseWM KEYDOWN switch wParam caseVK DOWN line break caseVK UP line break caseVK LEFT row break caseVK RIGHT row break if line 20 line 20 if line40 row 40 InvalidateRect hwnd NULL 1 要求重畫矩形return0 break 8 2 8為SYSMETS加上鍵盤界面實(shí)現(xiàn)滾動(dòng)條功能 利用SendMessage函數(shù)實(shí)現(xiàn)SYSMETS加上鍵盤界面實(shí)現(xiàn)滾動(dòng)條功能 SendMessage hwnd message wParam lParam 本函數(shù)的功能是把message窗口消息及消息參數(shù)wParam lParam發(fā)送到hwnd所指向的窗口函數(shù) 在這里 就是把message發(fā)送給它自己這個(gè)窗口 8 3字符消息及其處理 桉下每一個(gè)按鍵要產(chǎn)生一個(gè)按鍵消息 但是 對(duì)虛擬鍵碼是字符的按鍵來(lái)說(shuō)還要產(chǎn)生一個(gè)字符消息 那么字符消息是怎樣產(chǎn)生的呢 這工作由Windows系統(tǒng)為您完成 消息循環(huán)中的TranslateMessage函數(shù)以msg為參數(shù)TranslateMessage 函數(shù)作用是 如果此按鍵消息的虛擬鍵碼是字符按鍵的碼 它將產(chǎn)生一個(gè)字符消息 并把字符消息放入應(yīng)用程序的消息隊(duì)列 由產(chǎn)生的字符消息把虛擬鍵碼轉(zhuǎn)換為字符的ASCII碼或UNICODE碼 用戶按字符鍵 按鍵消息WM KEYDOWN TranslateMessage 函數(shù) 字符消息WM CHAR 8 3 2四個(gè)字符消息 WM CHAR和WM DEADCHAR消息是從WM KEYDOWN按鍵消息得到的字符消息 WM SYSCHAR和WM SYSDEADCHAR消息是由WM SYSKEYDOWN系統(tǒng)按鍵消息得到的字符消息 字符消息的結(jié)構(gòu)與按鍵消息的結(jié)構(gòu)是一樣的lParam參數(shù) 與按鍵消息的lParam參數(shù)相同wParam參數(shù) 字符的ANSI或Unicode代碼 四個(gè)字符消息 8 3 3按鍵消息和字符消息的處理順序 消息循環(huán)中的GetMessage 從消息隊(duì)列中取到消息 首先得到的是WM KEYDOWN或WM SYSKEYDOWN消息 TranslateMessage 函數(shù)將WM KEYDOWN和WM SYSKEYDOWN消息中的虛擬鍵碼進(jìn)行處理 如果WM KEYDOWN或WM SYSKEYDOWN消息是由字母數(shù)字按鍵產(chǎn)生的 則Windows隨之就要產(chǎn)生一個(gè)字符消息 此字符消息是夾在按鍵消息之間傳遞給窗口函數(shù)的 while GetMessage 將消息發(fā)送給窗口函數(shù) 8 3 3按鍵消息和字符消息的處理順序 例如 如果CapsLock未打開(kāi) 而用戶按下再釋放A鍵 則窗口函數(shù)將接收到如表8 10所示的三個(gè)消息 8 3 3按鍵消息和字符消息的處理順序 例如 如果您先按下Shift鍵 再按下A鍵 然後釋放A鍵 再釋放Shift鍵 就會(huì)輸入大寫的A 而窗口函數(shù)會(huì)接收到五個(gè)消息 8 3 3按鍵消息和字符消息的處理順序 例如 如果用戶按住A鍵 以使自動(dòng)重復(fù)產(chǎn)生一系列的按鍵消息 那么對(duì)每條WM KEYDOWN消息 都會(huì)得到一條字符消息 如表8 12所示 8 3 4控制字符鍵及其處理 什么是控制字符鍵Tab Enter Backspace Escape鍵稱為控制字符鍵 它們的虛擬鍵碼就是下表中相應(yīng)的ASCII代碼 它們又稱為控制碼 控制碼還可以用兩個(gè)鍵組合產(chǎn)生 例如組合使用Ctrl鍵與字母鍵會(huì)產(chǎn)生從0 x01 Ctrl A 到0 x1A Ctrl Z 的ASCII控制代碼 其中某些控制代碼列出如表8 13所示 8 3 4控制字符鍵及其處理 2 控制字符鍵的處理 Tab Enter Backspace和Escape鍵在Windows中 這些控制字符的虛擬鍵碼就是ASII碼辦法是在處理WM CHAR消息分支中作處理 8 3 4控制字符鍵及其處理 控制字符的虛擬鍵碼就是ASII碼 在處理WM CHAR消息分支中作處理 caseWM CHAR 這是控制字符鍵產(chǎn)生的字符消息 其他程序碼switch wParam 根據(jù)wParam中的控制字符碼 ASCII 決定下面分支 case b backspace 其處理程序碼break case t tab制表符 其處理程序碼break case n linefeed 其處理程序碼break case r carriagereturn回車 其處理程序碼break default charactercodes其他字符碼 其處理程序碼break return0 8 3 4控制字符鍵及其處理 上機(jī)練習(xí) 具有簡(jiǎn)單的行編輯功能的軟件1 定義變量staticcharkeychar 3 存放敲入的字符staticcharstr 201 記錄已經(jīng)敲入過(guò)的所有字符intlen 有效字符的個(gè)數(shù)2 響應(yīng)WM CHAR消息caseWM CHAR len strlen str if wParam b 8 3 4控制字符鍵及其處理 上機(jī)練習(xí) 具有簡(jiǎn)單的行編輯功能的軟件3 顯示內(nèi)容caseWM PAINT hdc BeginPaint hwnd 8 3 5WM DEADCHAR消息 WM DEADCHAR和WM SYSDEADCHAR消息稱為 死字符消息 Windows應(yīng)用程序經(jīng)常忽略WM DEADCHAR和WM SYSDEADCHAR消息 死字符消息 是怎樣產(chǎn)生的 它們的工作方式怎樣 在某些非U S 英語(yǔ)鍵盤上 有些鍵用於給字母加上音調(diào) 本身并不產(chǎn)生字符 這些鍵稱之
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年安慶某公司招聘外包工作人員3人筆試參考題庫(kù)附帶答案詳解
- 生態(tài)種植技術(shù)助力產(chǎn)業(yè)結(jié)構(gòu)的綠色轉(zhuǎn)型
- 二零二五年度服裝工廠員工福利保障合同
- 二零二五年度跨區(qū)域企業(yè)員工人事合同與勞動(dòng)合同同步執(zhí)行細(xì)則
- 二零二五年度特色小鎮(zhèn)店面轉(zhuǎn)租及民宿經(jīng)營(yíng)協(xié)議
- 2025至2030年中國(guó)纖維氈制品數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年度離職員工保密協(xié)議及競(jìng)業(yè)限制合同
- 二零二五年度企業(yè)知識(shí)產(chǎn)權(quán)戰(zhàn)略規(guī)劃與律師事務(wù)所合作合同
- 二零二五年度物流企業(yè)專業(yè)司機(jī)聘用及安全保障合同
- 2025裝卸工安全責(zé)任及應(yīng)急處理協(xié)議
- 福建省服務(wù)區(qū)標(biāo)準(zhǔn)化設(shè)計(jì)指南
- 秋風(fēng)詞賞析課件古詩(shī)詞賞析
- 銷售人員薪酬設(shè)計(jì)實(shí)例 薪酬制度設(shè)計(jì) 薪酬設(shè)計(jì)方案 設(shè)計(jì)案例全套
- 福特F-150猛禽說(shuō)明書
- 重癥肺炎護(hù)理查房文獻(xiàn)綜述
- 征地搬遷基本要求及工作技巧課件
- 《煙花爆竹基礎(chǔ)知識(shí)》課件
- 連乘兩步計(jì)算的實(shí)際問(wèn)題
- 部編版語(yǔ)文五年級(jí)下冊(cè) 課本解讀
- 中國(guó)畫的特點(diǎn)及分類課件
- 供應(yīng)商現(xiàn)場(chǎng)審核評(píng)估表
評(píng)論
0/150
提交評(píng)論