已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第6章Windows應(yīng)用程序?qū)︽I盤與鼠標的響應(yīng),掃描碼是依賴于具體設(shè)備的,為達到設(shè)備無關(guān)性的要求,往往使用與具體設(shè)備無關(guān)的虛擬碼,虛擬碼是由Windows系統(tǒng)定義的與設(shè)備無關(guān)的鍵的標識,6.1鍵盤在應(yīng)用程序中的應(yīng)用,虛擬碼是一種與設(shè)備無關(guān)的鍵盤編碼,它的值存放在鍵盤消息的wParam參數(shù)中,用以標識哪一個鍵被按下或釋放,最常用的虛擬碼已經(jīng)在Windows.h中定義。,應(yīng)用程序一般有幾個窗口,但當按下某一個鍵時,只有一個窗口能接收到該鍵盤消息,接收這個鍵盤消息的窗口稱為有“輸入焦點”的窗口,有“輸入焦點”的窗口應(yīng)是活動窗口或者活動窗口的子窗口,鍵盤消息,按鍵消息,字符消息,按下或松開一個鍵時就產(chǎn)生了一按鍵消息,一個按鍵的組合產(chǎn)生了一個可以顯示的字符時,就產(chǎn)生了一個字符消息,系統(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)對它們的處理,不使用Alt鍵組合的按鍵消息,32位的變量,包含了識別按下的鍵的虛鍵碼,在WinMain函數(shù)的消息循環(huán)中包含了TranslateMessage函數(shù),其功能是把按鍵消息轉(zhuǎn)化為字符消息,但只有當鍵盤驅(qū)動程序把鍵盤字符映射成ASCII碼后才能產(chǎn)生WM_CHAR消息。,【例6-1】設(shè)計一個窗口,在該窗口中練習鍵盤的響應(yīng),要求如下:(1)單擊鍵盤上的向上箭頭時,窗口中顯示“Youhadhittedtheupkey”(2)單擊鍵時,窗口中顯示“YouhadhittedtheSHIFTkey”(3)單擊鍵時,窗口中顯示“YouhadhittedtheCTRLkey”(4)單擊鍵時,窗口中顯示“YouhadhittedtheCTRLAkey”(5)單擊鍵時,窗口中顯示“YouhadhittedtheSHIFTBkey”,longWINAPIWndProc(HWNDhWnd,UINTiMessage,UINTwParam,LONGlParam)HDChDC;/定義設(shè)備環(huán)境句柄PAINTSTRUCTps;/定義包含繪圖信息的結(jié)構(gòu)體變量HPENhPen;/定義畫筆句柄HBRUSHhBrush;/定義畫刷句柄,/以下定義輸出的字符串staticcharcUp=YouhadhittedtheUPkey;staticcharcCtrl=YouhadhittedtheCtrlkey;staticcharcShift=YouhadhittedtheSHIFTkey;staticcharcCtrl_A=YouhadhittedtheCTRLAkey;staticcharcShift_B=YouhadhittedtheSHIFTBkey;,/下面定義并初始化按鍵標志變量staticBOOLnUpKeyDown=FALSE,nShiftKeyDown=FALSE,nCtrlKeyDown=FALSE,nCtrlAKeyDown=FALSE,nShiftBKeyDown=FALSE;,switch(iMessage)caseWM_KEYDOWN:switch(wParam)caseVK_UP:/當按上箭頭鍵時,變量置為真nUpKeyDown=TRUE;break;caseVK_SHIFT:/當按Shift鍵時,變量置為真nShiftKeyDown=TRUE;break;caseVK_CONTROL:/當按Control鍵時,變量置為真nCtrlKeyDown=TRUE;break;default:break;break;caseWM_KEYUP:InvalidateRect(hWnd,NULL,FALSE);break;,caseWM_CHAR:if(wParam=(65,caseWM_PAINT:/處理繪圖消息.hDC=BeginPaint(hWnd,/設(shè)置字體顏色為紅色。,/輸出信息。if(nUpKeyDown=TRUE)Rectangle(hDC,0,0,300,200);TextOut(hDC,0,0,cUp,strlen(cUp);nUpKeyDown=FALSE;,elseif(nCtrlAKeyDown=TRUE)Rectangle(hDC,0,0,300,200);TextOut(hDC,0,100,cCtrl_A,strlen(cCtrl_A);nCtrlAKeyDown=FALSE;nCtrlKeyDown=FALSE;,elseif(nCtrlAKeyDown=TRUE)elseif(nCtrlKeyDown=TRUE,elseif(nShiftBKeyDown=TRUE)Rectangle(hDC,0,0,300,200);TextOut(hDC,0,0,cShift_B,strlen(cShift_B);nShiftBKeyDown=FALSE;nShiftKeyDown=FALSE;,elseif(nShiftBKeyDown=FALSEelse;,/刪除畫筆和畫刷DeleteObject(hPen);DeleteObject(hBrush);EndPaint(hWnd,caseWM_DESTROY:PostQuitMessage(0);return0;default:return(DefWindowProc(hWnd,iMessage,wParam,lParam);return0;,程序中緩沖區(qū)大小只設(shè)30個字符,當緩沖區(qū)滿時若再輸入任何字符,就出現(xiàn)(1)號錯誤提示,用戶按下左箭頭鍵直至光標到達本行起始位置時,就無法再往左移動,則出現(xiàn)(2)號錯誤信息,若此時您按下Esc鍵,就出現(xiàn)(3)號錯誤提示信息,若當前光標位置處于本行的起始位置,此時按下回退鍵(BackSpace),則出現(xiàn)編號為(4)的錯誤提示信息,若字符緩沖區(qū)中已沒有任何字符,此時按下了Delete鍵,則出現(xiàn)(5)號錯誤提示信息,【例6-2本例演示鍵盤輸入時所產(chǎn)生的消息序列并在窗口的客戶區(qū)顯示對應(yīng)的字符,6.2鍵盤操作應(yīng)用舉例,#include#include#includevoidWINAPICaretPos(int*xCaret,int*yCaret);longWINAPIWndProc(HWNDhWnd,UINTiMessage,UINTwParam,LONGlParam);BOOLInitWindowsClass(HINSTANCEhInstance);BOOLInitWindows(HINSTANCEhInstance,intnCmdShow);HWNDhWndMain;,longWINAPIWndProc(HWNDhWnd,UINTiMessage,UINTwParam,LONGlParam)#defineBufSize30/設(shè)置存放字符的緩沖區(qū)大小staticcharcCharBufBufSize;/設(shè)置靜態(tài)字符數(shù)組,/存放輸入的字符,字符個數(shù)不能超出緩沖區(qū)大小staticintnNumChar=0;/現(xiàn)有字符個數(shù)staticintnArrayPos=0;/字符的位置staticintnLnHeight;staticintnCharWidth;staticintxCaret,yCaret;intx;HDChDC;TEXTMETRICtm;PAINTSTRUCTPtStr;/定義指向包含繪圖信息的結(jié)構(gòu)體變量,switch(iMessage)/處理消息caseWM_CHAR:/遇到非系統(tǒng)字符所作的處理if(wParam=VK_BACK)/處理遇到回退鍵的消息if(nArrayPos=0)/若已在一行文字的開始處,則提示不能回退MessageBox(hWnd,“當前位置是文本的起始位置,不能回退,NULL,MB_OK);elsenArrayPos=nArrayPos-1;/按一次回退鍵就回退一字符位置CaretPos(,if(wParam=VK_ESCAPE)/處理按下Escape鍵消息MessageBox(hWnd,“您現(xiàn)在不能按ESC鍵,請繼續(xù)其它操作,NULL,MB_OK);break;,if(nNumChar=BufSize)/如寫入的字符數(shù)超過緩沖區(qū)大小,則報警MessageBox(hWnd,“緩沖區(qū)已滿,不能再輸入字符了n若需要刪除字符,請用BackSpace鍵,NULL,MB_OK);break;for(x=nNumChar;xnArrayPos;x=x-1)cCharBufx=cCharBufx-1;cCharBufnArrayPos=(unsignedchar)wParam;nArrayPos=nArrayPos+1;nNumChar=nNumChar+1;CaretPos(,caseWM_CREATE:/處理窗口創(chuàng)建消息hDC=GetDC(hWnd);GetTextMetrics(hDC,caseWM_SETFOCUS:/處理活動焦點消息CreateCaret(hWnd,0,0,nLnHeight);CaretPos(,caseWM_KILLFOCUS:/處理失去焦點消息DestroyCaret();break;,caseWM_KEYDOWN:/處理按下鍵消息switch(wParam)caseVK_END:/處理按下鍵為End時的消息nArrayPos=nNumChar;/輸入位置從本行的末尾開始CaretPos(,caseVK_DELETE:/處理按下鍵為Delete時的消息if(nArrayPos=nNumChar)/輸入位置處于本行的末尾MessageBox(hWnd,緩沖區(qū)已空,沒有字符可供刪除,NULL,MB_OK);elsefor(x=nArrayPos;x0)nArrayPos=nArrayPos-1;/當前輸入位置往前移一個位置,再輸入字符時,等于插入字符CaretPos(,caseVK_RIGHT:/處理按下右方向鍵時的消息if(nArrayPos50,if(x150,if(x250/西南-東北光標,if(x50/I字型光標,if(x50/東西向箭頭,if(x150/沙漏光標,if(x250/向上箭頭光標,if(x150/西北-東南箭頭,if(x250/南北向箭頭,hdc=GetDC(hwnd);GetTextMetrics(hdc,caseWM_PAINT:hdc=BeginPaint(hwnd,【6-3】編寫一個鼠標應(yīng)用程序,按下鼠標左鍵在窗口中移動時,將按下左鍵時所在點和當前點所形成的矩形涂成灰色,此時光標為十字型。當抬起鼠標左鍵時,將前面所繪制度矩形拉伸到整個窗口,拉伸過程中將光標設(shè)置為沙漏型。然后,若雙擊鼠標的左鍵,則灰色消失,窗口恢復(fù)到初始狀態(tài)。,voidInvertBlock(HWNDhwnd,POINTptBeg,POINTptEnd)HDChdc;hdc=CreateDC(DISPLAY,NULL,NULL,NULL);ClientToScreen(hwnd,LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam)staticBOOLoperate=FALSE,ready=TRUE;staticPOINTBeginP,EndP;staticRECTrect=0,0,0,0;HDChdc;PAINTSTRUCTPtStr;HBRUSHhBrush;,switch(message)caseWM_LBUTTONDOWN:if(!operate),caseWM_MOUSEMOVE:if(operate)EndP.x=LOWORD(lParam);EndP.y=HIWORD(lParam);rect.left=BeginP.xEndP.x?BeginP.x:EndP.x;rect.top=BeginP.yEndP.y?BeginP.y:EndP.y;SetCursor(LoadCursor(NULL,IDC_WAIT);/載入沙漏光標InvalidateRect(hwnd,NULL,TRUE);return0;,caseWM_PAINT:if(ready=FALSE)hdc=BeginPaint(hwnd,caseWM
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版實驗室裝修、設(shè)備采購一體化合同范本3篇
- 2025版庭院園藝設(shè)計租賃合同示范文本大全3篇
- 《社會主義發(fā)展戰(zhàn)略》課件
- 《我的家鄉(xiāng)河北》課件
- 基于2025年度標準的軟件開發(fā)與技術(shù)服務(wù)合同3篇
- 2025版木托盤產(chǎn)業(yè)鏈整合合同4篇
- 2025版學校飯?zhí)檬称钒踩c營養(yǎng)管理承包合同3篇
- 云母制品在平板電腦觸控面板材料中的應(yīng)用考核試卷
- 公路工程現(xiàn)場急救與事故處理考核試卷
- 2025年度木材進出口貿(mào)易代理合同標準文本2篇
- 2024版?zhèn)€人私有房屋購買合同
- 2024爆炸物運輸安全保障協(xié)議版B版
- 2025年度軍人軍事秘密保護保密協(xié)議與信息安全風險評估合同3篇
- 《食品與食品》課件
- 讀書分享會《白夜行》
- 光伏工程施工組織設(shè)計
- DB4101-T 121-2024 類家庭社會工作服務(wù)規(guī)范
- 化學纖維的鑒別與測試方法考核試卷
- 2024-2025學年全國中學生天文知識競賽考試題庫(含答案)
- 作品著作權(quán)獨家授權(quán)協(xié)議(部分授權(quán))
- 取水泵站施工組織設(shè)計
評論
0/150
提交評論