MFCWindows应用程序设计第7章鼠标和键盘处理鼠标消息7.1处理键盘消息7.2应用程序窗口的焦点7.3第7章鼠标和键盘7.1处理鼠标消息根据产生鼠标消息时光标所在的位置,鼠标消息分为用户区鼠标消息和非用户鼠标消息。7.1处理鼠标消息7.1.1用户区鼠标消息常用的用户区鼠标消息有:WM_LBUTTONDBLCLK、WM_LBUTTONDOWN、WM_LBUTTONUP、WM_RBUTTONDBLCL、WM_RBUTTONDOWN、WM_RBUTTONUP、WM_MOUSEMOVE、WM_MBUTTONDBLCLK、WM_MBUTTONDOWN、WM_MBUTTONUP、WM_MOUSEWHEEL7.1处理鼠标消息7.1.1用户区鼠标消息在MFC中,鼠标消息响应函数的原型一般为:afx_msgvoidOnLButtonUp(UINTnFlags,CPointpoint);nFlags指定了不同的虚拟键是否被按下。这个参数可以是下列值之一:MK_CONTROL如果CTRL键被按下,则设置此位。MK_LBUTTON如果鼠标左键被按下,则设置此位。MK_MBUTTON如果鼠标中键被按下,则设置此位。MK_RBUTTON如果鼠标右键被按下,则设置此位。MK_SHIFT如果SHIFT键被按下,则设置此位。7.1处理鼠标消息7.1.1用户区鼠标消息练习:在用户区显示鼠标移动时的坐标。练习:改写铅笔线的绘制。7.1处理鼠标消息7.1.2非用户区鼠标消息非用户区鼠标消息有:WM_NCLBUTTONDBLCLK、WM_NCLBUTTONDOWN、WM_NCLBUTTONUP、WM_NCRBUTTONDBLCL、WM_NCRBUTTONDOWN、WM_NCRBUTTONUP、WM_NCMOUSEMOVE、消息函数原型:afx_msgvoidOnNcMouseMove(UINTnHitTest,CPointpoint);映射宏入口:ON_WM_NCMOUSEMOVE()7.1处理鼠标消息7.1.3鼠标消息的捕获捕获鼠标消息的函数:CWnd*SetCapture();释放鼠标消息的函数:BOOLReleaseCapture();例:鼠标左键按下时,可以捕获鼠标消息,左键弹起释放鼠标消息。7.2处理键盘消息7.2.1按键的虚拟码虚拟码对应按键虚拟码对应按键VK_ESPACEEscVK_HOMEHomeVK_RETURNEnterVK_INSERTInsertVK_CANCELCtrl+BreakVK_LEFT向左的箭头VK_CAPITALCapsLockVK_MENUAltVK_CONTROLCtrlVK_DOWN向下的箭头VK_DECIMAL小键盘’.’VK_BACKBackSpaceVK_DELETEDeleteVK_ADD小键盘’+’VK_DIVIDE小键盘’/’VK_RIGHT向右的箭头VK_MULTIPLY小键盘’*’VK_SHIFTShiftVK_NUMPAD0~9小键盘’0’~’9’VK_UP向上的箭头VK_F1~VK_F12F1~f127.2处理键盘消息7.2.2一般按键消息Windows的一般的按键消息有:WM_CHARWM_KEYDOWNWM_KEYUP对应的消息响应函数:afx_msgvoidOnChar(UINTnChar,UINTnRepCnt,UINTnFlags);afx_msgvoidOnKeyDown(UINTnChar,UINTnRepCnt,UINTnFlags);afx_msgvoidOnKeyUp(UINTnChar,UINTnRepCnt,UINTnFlags);7.2处理键盘消息7.2.2一般按键消息afx_msgvoidOnKeyDown(UINTnChar,UINTnRepCnt,UINTnFlags);nChar:若按的是字符键,字符所对应的ASCII码。nRepCnt:按键的重复次数。nFlags:一个32位的数。0~15按键的重复的次数。16~23按键的扫描码。24扩展标志(0:无扩展;1:有扩展)。25~28由Windows内部使用。29Alt键标志(0:没按下;1按下)。30前面按键的状态(0:一次按键;1:重复按键)31键被按下或松开标志(0:键被按下;1:键被松开)7.2处理键盘消息7.2.3系统按键消息消息说明WM_SYSKEYDOWN按下系统键时产生的消息WM_SYSKEYUP释放系统键时产生的消息WM_SYSCHAR系统字符消息WM_SYSDEADCHAR系统死字符消息7.3应用程序窗口的焦点应用程序窗口获得输入焦点时,会发出WM_SETFOCUS消息;应用程序窗口失去输入焦点时,会发出WM_KILLFOCUS消息。作业:作业本:P1517-1,7-2,7-3,7-4,7-5,7-6,7-7,7-8。