- 1、本文档共36页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
第6章Windows应用程序中的键盘与鼠标*HuangWeitong*第6章Windows应用程序中的键盘与鼠标*HuangWeitong*Windows應用程式中的鍵盤與滑鼠掃描碼是依賴於具體設備的,為達到設備無關性的要求,往往使用與具體設備無關的虛擬碼,虛擬碼是由Windows系統定義的與設備無關的鍵的標識由於鍵盤的輸入產生一條消息掃描碼、虛擬碼以及其他與擊鍵有關的消息設備驅動程式截取鍵的掃描碼翻譯虛擬碼它含鍵盤上的鍵對應一個唯一的標識值(掃描碼)按下或釋放某鍵時產生取出鍵盤消息進行處理消息設備驅動程式把消息放到系統的消息佇列中Windows從系統消息佇列中取出消息發送到相應的線程消息佇列中窗口過程6.1鍵盤在應用程式中的應用虛擬碼是一種與設備無關的鍵盤編碼,它的值存放在鍵盤消息的wParam參數中,用以標識哪一個鍵被按下或釋放,最常用的虛擬碼已經在Windows.h中定義,操作系統在接收到鍵盤輸入後把消息發送給具有“輸入焦點(inputfocus)的窗口應用程式一般有幾個窗口,但當按下某一個鍵時,只有一個窗口能接收到該鍵盤消息,接收這個鍵盤消息的窗口稱為有“輸入焦點”的窗口有“輸入焦點”的窗口應是活動窗口或者活動窗口的子窗口窗口正在接收輸入焦點窗口函數通過捕獲WM_SETFOCUS和WM_KILLFOCUS消息確定當前窗口是否具有輸入焦點。窗口失去輸入焦點鍵盤消息按鍵消息字元消息按下或鬆開一個鍵時就產生了一按鍵消息一個按鍵的組合產生了一個可以顯示的字元時,就產生了一個字元消息系統按鍵消息非系統按鍵消息Alt鍵與相關輸入鍵的組合產生的消息,這些鍵一般由Windows系統內部直接處理,應用程式不處理若應用程式處理了這些系統鍵消息,還要調用DefWindowsProc()函數,以便不影響系統對它們的處理不使用Alt鍵組合的的按鍵消息按鍵消息的兩個變數wParamlParam32位的變數重複計數位(0~15位)OEM掃描碼(16~23位)擴展鍵標誌(24位)保留位(25~28位)關聯碼(29位)鍵的先前狀態(位30)轉換狀態(31位)包含了識別按下的鍵的虛鍵碼在WinMain函數的消息迴圈中包含了TranslateMessage函數,其功能是把按鍵消息轉化為字元消息,但只有當鍵盤驅動程式把鍵盤字元映射成ASCII碼後才能產生WM_CHAR消息字元消息系統非系統WM_KEYDOWN和WM_KEYUP的按鍵消息只能產生非系統消息WM_SYSKEYDOWN和WM_SYSKEYUP按鍵消息只能產生系統消息用戶窗口區輸入“這是一個有關鍵盤操作的示例程式”的字串程式中緩衝區大小只設30個字元,當緩衝區滿時若再輸入任何字元,就出現(1)號錯誤提示用戶按下左箭頭鍵直至游標到達本行起始位置時,就無法再往左移動,則出現(2)號錯誤資訊若此時您按下Esc鍵,就出現(3)號錯誤提示資訊若當前游標位置處於本行的起始位置,此時按下回退鍵(BackSpace),則出現編號為(4)的錯誤提示資訊若字元緩衝區中已沒有任何字元,此時按下了Delete鍵,則出現(5)號錯誤提示資訊6.1鍵盤操作應用舉例【例6-2本例演示鍵盤輸入時所產生的消息序列並在窗口的客戶區顯示對應的字元longWINAPIWndProc(HWNDhWnd,UINTiMessage,UINTwParam,LONGlParam){ #defineBufSize15 //設置存放字元的緩衝區大小 staticcharcCharBuf[BufSize]; //設置數組,存放輸入字元 //字元個數不能超出緩衝區大小 staticintnNumChar=0; //現有字元個數 staticintnArrayPos=0; //字元的位置 staticintnLnHeight; staticintnCharWidth; intx; HDChDC; TEXTMETRICtm; PAINTSTRUCTPtStr; //定義指向包含繪圖資訊結構體變數switch(iMessage) //處理消息{caseWM_CHAR: //遇到非系統字元所作的處理{if(wParam==VK_BACK) //處理“遇到回退鍵的消息”{if(nArrayPos==0) //若已在一行文字的開始處,則提示用戶不能回退MessageBox
文档评论(0)