Windows應(yīng)用程序中的鍵盤與鼠標(biāo)_第1頁(yè)
Windows應(yīng)用程序中的鍵盤與鼠標(biāo)_第2頁(yè)
Windows應(yīng)用程序中的鍵盤與鼠標(biāo)_第3頁(yè)
Windows應(yīng)用程序中的鍵盤與鼠標(biāo)_第4頁(yè)
Windows應(yīng)用程序中的鍵盤與鼠標(biāo)_第5頁(yè)
已閱讀5頁(yè),還剩16頁(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)介

Windows應(yīng)用程序中的鍵盤與鼠標(biāo)

1

掃描碼是依賴于具體設(shè)備的,為達(dá)到設(shè)備無(wú)關(guān)性的要求,往往使用與具體設(shè)備無(wú)關(guān)的虛擬碼,虛擬碼是由Windows系統(tǒng)定義的與設(shè)備無(wú)關(guān)的鍵的標(biāo)識(shí)由于鍵盤的輸入產(chǎn)生一條消息掃描碼、虛擬碼以及其他與擊鍵有關(guān)的消息設(shè)備驅(qū)動(dòng)程序截取鍵的掃描碼翻譯虛擬碼它含鍵盤上的鍵對(duì)應(yīng)一個(gè)唯一的標(biāo)識(shí)值(掃描碼)按下或釋放某鍵時(shí)產(chǎn)生取出鍵盤消息進(jìn)行處理消息設(shè)備驅(qū)動(dòng)程序把消息放到系統(tǒng)的消息隊(duì)列中Windows從系統(tǒng)消息隊(duì)列中取出消息發(fā)送到相應(yīng)的線程消息隊(duì)列中窗口過(guò)程掃描碼是依賴于具體設(shè)備的,為達(dá)到設(shè)備無(wú)關(guān)性的要求2

虛擬碼是一種與設(shè)備無(wú)關(guān)的鍵盤編碼,它的值存放在鍵盤消息的wParam參數(shù)中,用以標(biāo)識(shí)哪一個(gè)鍵被按下或釋放,最常用的虛擬碼已經(jīng)在Windows.h中定義,虛擬碼是一種與設(shè)備無(wú)關(guān)的鍵盤編碼,它的值存放3鍵盤消息按鍵消息字符消息按下或松開(kāi)一個(gè)鍵時(shí)就產(chǎn)生了一按鍵消息一個(gè)按鍵的組合產(chǎn)生了一個(gè)可以顯示的字符時(shí),就產(chǎn)生了一個(gè)字符消息系統(tǒng)按鍵消息非系統(tǒng)按鍵消息Alt鍵與相關(guān)輸入鍵的組合產(chǎn)生的消息,這些鍵一般由Windows系統(tǒng)內(nèi)部直接處理,應(yīng)用程序不處理若應(yīng)用程序處理了這些系統(tǒng)鍵消息,還要調(diào)用DefWindowsProc()函數(shù),以便不影響系統(tǒng)對(duì)它們的處理不使用Alt鍵組合的的按鍵消息鍵盤消息按鍵消息字符消息按下或松開(kāi)一個(gè)鍵時(shí)一個(gè)按鍵的組合產(chǎn)生4按鍵消息的兩個(gè)變量wParamlParam32位的變量重復(fù)計(jì)數(shù)位(0~15位)OEM掃描碼(16~23位)擴(kuò)展鍵標(biāo)志(24位)保留位(25~28位)關(guān)聯(lián)碼(29位)鍵的先前狀態(tài)(位30)轉(zhuǎn)換狀態(tài)(31位)包含了識(shí)別按下的鍵的虛鍵碼按鍵消息的兩個(gè)變量wParamlParam32位的變量重復(fù)計(jì)5WM_KEYDOWN

wParam

Specifiesthevirtual-keycodeofthenonsystemkey.lParam0-15Specifiestherepeatcountforthecurrentmessage.Thevalueisthenumberoftimesthekeystrokeisautorepeatedasaresultoftheuserholdingdownthekey.Ifthekeystrokeisheldlongenough,multiplemessagesaresent.However,therepeatcountisnotcumulative.16-23Specifiesthescancode.ThevaluedependsontheOEM.24Specifieswhetherthekeyisanextendedkey,suchastheright-handALTandCTRLkeysthatappearonanenhanced101-or102-keykeyboard.Thevalueis1ifitisanextendedkey;otherwise,itis0.25-28Reserved;donotuse.29Specifiesthecontextcode.Thevalueisalways0foraWM_KEYDOWNmessage.30Specifiesthepreviouskeystate.Thevalueis1ifthekeyisdownbeforethemessageissent,oritiszeroifthekeyisup.31Specifiesthetransitionstate.ThevalueisalwayszeroforaWM_KEYDOWNWM_KEYDOWN6在WinMain函數(shù)的消息循環(huán)中包含了TranslateMessage函數(shù),其功能是把按鍵消息轉(zhuǎn)化為字符消息,但只有當(dāng)鍵盤驅(qū)動(dòng)程序把鍵盤字符映射成ASCII碼后才能產(chǎn)生WM_CHAR消息字符消息系統(tǒng)非系統(tǒng)WM_KEYDOWN和WM_KEYUP的按鍵消息只能產(chǎn)生非系統(tǒng)消息WM_SYSKEYDOWN和WM_SYSKEYUP按鍵消息只能產(chǎn)生系統(tǒng)消息在WinMain函數(shù)的消息循環(huán)中包含了Tra7WM_CHAR

wParam

Specifiesthecharactercodeofthekey.lParam0-15Specifiestherepeatcountforthecurrentmessage.Thevalueisthenumberoftimesthekeystrokeisautorepeatedasaresultoftheuserholdingdownthekey.Ifthekeystrokeisheldlongenough,multiplemessagesaresent.However,therepeatcountisnotcumulative.16-23Specifiesthescancode.ThevaluedependsontheOEM.24Specifieswhetherthekeyisanextendedkey,suchastheright-handALTandCTRLkeysthatappearonanenhanced101-or102-keykeyboard.Thevalueis1ifitisanextendedkey;otherwise,itis0.25-28Reserved;donotuse.29Specifiesthecontextcode.Thevalueis1iftheALTkeyishelddownwhilethekeyispressed;otherwise,thevalueis0.30Specifiesthepreviouskeystate.Thevalueis1ifthekeyisdownbeforethemessageissent,oritiszeroifthekeyisup.31Specifiesthetransitionstate.Thevalueis1ifthekeyisbeingreleased,oritis0ifthekeyisbeingpressed.WM_CHAR8【例】設(shè)計(jì)一個(gè)窗口,在該窗口中練習(xí)鍵盤的響應(yīng),要求如下:(1)

單擊鍵盤上的pageup箭頭時(shí),顯示“Youhadhittedthepageupkey”(2)

單擊<Shift>鍵時(shí),窗口中顯示“YouhadhittedtheSHIFTkey”(3)

單擊<Ctrl>鍵時(shí),窗口中顯示“YouhadhittedtheCTRLkey”(4)

單擊<Ctrl+A>鍵時(shí),窗口中顯示“YouhadhittedtheCTRLAkey”(5)

單擊<Shift+B>鍵時(shí),窗口中顯示“YouhadhittedtheSHIFTBkey”【例】設(shè)計(jì)一個(gè)窗口,在該窗口中練習(xí)鍵盤的響應(yīng),要求如下:9//以下定義輸出的字符串。staticcharcUp[]="YouhadhittedtheUPkey";staticcharcCtrl[]="YouhadhittedtheCtrlkey";staticcharcShift[]="YouhadhittedtheSHIFTkey";staticcharcCtrl_A[]="YouhadhittedtheCTRLAkey";staticcharcShift_B[]="YouhadhittedtheSHIFTBkey";//下面定義并初始化按鍵標(biāo)志變量。staticBOOLnUpKeyDown=FALSE, nShiftKeyDown=FALSE, nCtrlKeyDown=FALSE, nCtrlAKeyDown=FALSE, nShiftBKeyDown=FALSE;//以下定義輸出的字符串。//下面定義并初始化按鍵標(biāo)志變量。10voidCMy20080926Dlg::OnKeyDown(UINTnChar,UINTnRepCnt,UINTnFlags){ //TODO:Addyourmessagehandlercodehereand/orcalldefault switch(nChar){ caseVK_UP: //當(dāng)按上箭頭鍵時(shí),變量置為真。 nUpKeyDown=TRUE; break; caseVK_SHIFT: //當(dāng)按shift鍵時(shí),變量置為真。 nShiftKeyDown=TRUE; break; caseVK_CONTROL: //當(dāng)按control鍵時(shí),變量置為真 nCtrlKeyDown=TRUE; break; case'B': if(nShiftKeyDown) nShiftBKeyDown=TRUE; break; case'A': if(nCtrlKeyDown) nCtrlAKeyDown=TRUE; break; default: break; }

CDialog::OnKeyDown(nChar,nRepCnt,nFlags);}voidCMy20080926Dlg::OnKeyDown11 CPaintDCdc(this); if(nUpKeyDown==TRUE) { dc.Rectangle(0,0,300,200); dc.TextOut(0,0,cUp,strlen(cUp)); nUpKeyDown=FALSE; } elseif(nCtrlAKeyDown==TRUE) { dc.Rectangle(0,0,300,200); dc.TextOut(0,100,cCtrl_A,strlen(cCtrl_A)); nCtrlAKeyDown=FALSE; nCtrlKeyDown=FALSE; } elseif(nCtrlKeyDown==TRUE&&nCtrlAKeyDown==FALSE) { dc.Rectangle(0,0,300,200); dc.TextOut(0,60,cCtrl,strlen(cCtrl)); nCtrlKeyDown=FALSE; } elseif(nShiftBKeyDown==TRUE) { dc.Rectangle(0,0,300,200); dc.TextOut(0,0,cShift_B,strlen(cShift_B)); nShiftBKeyDown=FALSE; nShiftKeyDown=FALSE; } elseif(nShiftBKeyDown==FALSE&&nShiftKeyDown==TRUE) { dc.Rectangle(0,0,300,200); dc.TextOut(0,0,cShift,strlen(cShift)); nShiftKeyDown=FALSE; } CPaintDCdc(this);12BOOLCMy20080926Dlg::PreTranslateMessage(MSG*pMsg){ //TODO:Addyourspecializedcodehereand/orcallthebaseclass if(pMsg->message==WM_KEYDOWN){ if(pMsg->wParam==VK_UP) nUpKeyDown=TRUE; } returnCDialog::PreTranslateMessage(pMsg);}BOOLCMy20080926Dlg::PreTransl13鼠標(biāo)在應(yīng)用程序中的應(yīng)用鼠標(biāo)作為定位輸入設(shè)備,通過(guò)鼠標(biāo)單擊、雙擊和拖動(dòng)功能,用戶可以很容易地操作基于Windows圖形界面的應(yīng)用程序。Windows中通過(guò)光標(biāo)來(lái)指示當(dāng)前鼠標(biāo)的位置,在Windows操作系統(tǒng)中預(yù)定義了幾種光標(biāo),并在Windows.h頭文件中加以定義,鼠標(biāo)在應(yīng)用程序中的應(yīng)用鼠標(biāo)作為定位輸入設(shè)備,通過(guò)鼠標(biāo)單擊、雙14例如,下面的語(yǔ)句為窗口類wndclassWNDCLASSwndclass;…wndclass.hCursor=LoadCursor(hThislnst,IDC_WAIT);…此外,還可在應(yīng)用程序中調(diào)用LoadCursor函數(shù)改變光標(biāo)形式用戶自定義光標(biāo)自定義光標(biāo)保存在擴(kuò)展名為.cur的文件中

光標(biāo)名CURSOR光標(biāo)文件(.cur)采用自定義光標(biāo)時(shí),需在資源文件中定義光標(biāo)資源加載光標(biāo)資源(常在定義窗口類時(shí)進(jìn)行)

LoadCursor(hThisInst,lpszCursorname)當(dāng)前實(shí)例句柄當(dāng)前光標(biāo)例如,下面的語(yǔ)句為窗口類wndclass用戶自定義光標(biāo)采用自15鼠標(biāo)消息lParam包含了鼠標(biāo)位置低位包含鼠標(biāo)位置的x坐標(biāo)值高位包含鼠標(biāo)位置的y坐標(biāo)wParam包含了指示各種虛鍵狀態(tài)的值相當(dāng)于窗口的左上角為原點(diǎn)的坐標(biāo)值鼠標(biāo)消息lParam包含了鼠標(biāo)位置低位包含鼠標(biāo)位置的x坐標(biāo)值16對(duì)于鼠標(biāo)消息的處理要對(duì)Shift和Ctrl鍵進(jìn)行監(jiān)測(cè)caseWM_LBUTTONDOWN://按下鼠標(biāo)左鍵if((wParam&MK_CONTROL)&&(wParam&MK_SHIFT))… //Shift和Ctrl鍵都被按下break;caseWM_LBUTTONUP: //釋放鼠標(biāo)左鍵…break;…caseWM_LBUTTONDOWN://按下鼠標(biāo)左鍵… break;caseWM_LBUTTONUP: //釋放鼠標(biāo)左鍵…break;…不監(jiān)測(cè)對(duì)于鼠標(biāo)消息的處理要對(duì)Shift和Ctrl鍵進(jìn)行監(jiān)測(cè)case17Windows系統(tǒng)默認(rèn)的時(shí)間間隔為0.5秒,也可以調(diào)用SetDoubleClickTime()重新設(shè)定間隔值若窗口不包含上述屬性的定義,即使進(jìn)行了雙擊操作,該窗口也只能接收到兩條WM_BUTTONDOWN消息或兩條WN_BUTTONUP消息。鼠標(biāo)雙擊wndclass.style=CS_HEADRAW|CS_VERDRAW|CS_DBLCLKS;要使窗口函數(shù)能接收鼠標(biāo)雙擊產(chǎn)生的消息在注冊(cè)窗口類時(shí)必須具有CS_DBLCLKS屬性Windows系統(tǒng)默認(rèn)的時(shí)間間隔為0.5秒,也可以調(diào)用Set18鼠標(biāo)應(yīng)用程序?qū)嵗纠渴髽?biāo)輸入示范程序,本例介紹如何響應(yīng)鼠標(biāo)信息、并改變光標(biāo)形狀等用法,用戶在窗口的不同區(qū)域移動(dòng)鼠標(biāo)時(shí),光標(biāo)將顯示如下圖所標(biāo)識(shí)的不同箭頭的形狀鼠標(biāo)應(yīng)用程序?qū)嵗纠渴髽?biāo)輸入示范程序,本例介紹如何響應(yīng)鼠標(biāo)19 hcursor=AfxGetApp()->LoadCursor(I

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論