今天學習了最基本的MFC操作,鍵盤及鍵盤消息函數,跟着書中的內容自己編了個小程序。檢測用戶是否同時按下SHIFT和B鍵
第一步:先是建了一個單文檔模式的MFC程序,添加了鍵盤消息及處理函數。鍵盤消息處理類CKeyboardDemoView,添加到CKeyboardView的項目中。然后再添加三個消息函數分別是WM_KEYDOWN,WM_KEYUP,WM_CHAR.系統自動為其分配了鍵盤消息的消息映射宏,和消息映射函數。
第二步:就是編寫了實現的代碼,先是在CKeyboardView的同文件中定義要用的函數,bShiftup,bShiftdown,bShiftB。全部是BOOL型,並且初始為FALSE。然后編寫判斷shift是否被按下的代碼。
void CKeyboardDemoView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) { // TODO: Add your message handler code here and/or call default if(nChar==VK_SHIFT)//判斷Shift鍵是否被按下 { //AfxMessageBox("dd"); bShiftdown=true; bShiftup=false; Invalidate(true);//顯示信息 } CView::OnKeyDown(nChar, nRepCnt, nFlags); }
還有判斷是否被松開
void CKeyboardDemoView::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags) { // TODO: Add your message handler code here and/or call default if(nChar==VK_SHIFT)//判斷Shift鍵是否被釋放 { //AfxMessageBox("dd"); bShiftup=true; Invalidate(true);//顯示信息 bShiftdown=false; } CView::OnKeyUp(nChar, nRepCnt, nFlags); }
以及判斷是否敲擊了B鍵
void CKeyboardDemoView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) { // TODO: Add your message handler code here and/or call default if((nChar==98)||(nChar==66))//判斷是否敲擊了字符鍵B鍵或b鍵 { if(bShiftdown) { bShiftB=true; bShiftdown=false; Invalidate(true);//顯示信息 } } CView::OnChar(nChar, nRepCnt, nFlags); }
最后只要在Ondraw的函數中編寫窗口輸出函數
void CKeyboardDemoView::OnDraw(CDC* pDC) { CKeyboardDemoDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here if(bShiftdown)//按下了Shift鍵 { pDC->TextOut(20,20,"用戶按下了Shift鍵!"); } if(bShiftup)//釋放了Shift鍵 { pDC->TextOut(20,20,"用戶釋放了Shift鍵!"); } if(bShiftB)//同時按下了Shift鍵和B鍵 { pDC->TextOut(20,20,"用戶同時按下Shift鍵和B鍵!"); bShiftB=false; } }