头文件变量声明: BOOL bShiftdown,bShiftup,bShiftB; 消息事件声明: afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags); afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags); 增加消息映射: BEGIN_MESSAGE_MAP(CtestnfcView, CView) ON_WM_KEYDOWN() ON_WM_KEYUP() ON_WM_CHAR() // 标准打印命令 ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CtestnfcView::OnFilePrintPreview) END_MESSAGE_MAP() 按键消息事件的实现: void CtestnfcView::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 CtestnfcView::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); } void CtestnfcView::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); } 界面的重绘: void CtestnfcView::OnDraw(CDC* pDC) { CtestnfcDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: 在此处为本机数据添加绘制代码 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; } } ===声明:源码来自网络 学习之用