MFC之鍵盤和鍵盤消息處理


今天學習了最基本的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;
    }


}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM