实验5 输入/输出管理 5.1 Windows鼠标处理 背景知识 一台计算机拥有大量的输入设备,而鼠标和键盘是其中最常用的输入设备。实际上,基本的鼠标和键盘处理就像使用Visual C++ 的Class Wizard 在MFC 程序中添加一两个消息响应函数一样简单。 鼠标和键盘各自生成自己类型的消息。例如,鼠标生成类似WM_MOUSEMOVE、WM_LBUTTON 和WM_RBUTTONCLK 的Windows 消息。 1. 客户区的鼠标消息 客户区就是应用程序可在其中绘图的窗口部分。当鼠标指针滑过应用程序所拥有的窗口客户区时,Windows 将就把客户区鼠标消息传送给应用程序。使用诸如WM_MOUSEMOVE 这类鼠标事件消息,鼠标就可以与应用程序通信。例如,在用户移动鼠标经过应用程序窗口的客户区时,应用程序接收WM_MOUSEMOVE 消息流,不仅通知用户正在移动鼠标,而且通知 Windows 生成WM_MOUSEMOVE消息时鼠标的位置。 在鼠标移出应用程序窗口的客户区时,应用程序停止接收客户区鼠标消息。Windows 改为把鼠标消息传送给鼠标碰巧经过的窗口 (包含桌面) 。当鼠标返回窗口的客户区时,Windows 重新将鼠标消息传送给应用程序。 表 5-1 描述了应用程序可以接收的18 种客户区鼠标消息。 表 5-1 客户区鼠标消息 消息 描述 WM_CAPTURECHANGED 窗口失去鼠标捕获 WM_LBUTTONDBLCLK 双击鼠标左键 WM_LBUTTONDOWN 单击鼠标左键 WM_LBUTTONUP 释放鼠标左键 WM_MBUTTONDBLCLK 双击鼠标中键 WM_MBUTTONDOWN 单击鼠标中键 WM_MBUTTONUP 释放鼠标中键 WM_MOUSEACTIVATE 在用户点击鼠标按钮时,鼠标光标位于非活动窗口中 WM_MOUSEHOVER 鼠标光 标掠 过 窗 口 的客 户 区 ,停 留 时 间 通 过 调 用TrackMouseEvent() 进行设置 WM_MOUSELEAVE 鼠标离开 TrackMouseEvent() 调用指定的窗口客户区 WM_MOUSEMOVE 鼠标移到客户区之上 WM_MOUSEWHEEL 滚动鼠标滚轮 WM_RBUTTONDBLCLK 双击鼠标右键 WM_RBUTTONDOWN 单击鼠标右键 WM_RBUTTONUP 释放鼠标右键 WM_XBUT’TONDBLCLK 双击鼠标X 键 WM_XBUTTONDOWN 单击鼠标X 键 WM_XBUTTONUP 释放鼠标X 键 2. 非客户区鼠标消息 Windows 也会把非客户区鼠标消息传送给应用程序。当鼠标经过应用程序窗口客户区之外的区域时,就会产生这类鼠标消息。例如,当鼠标经过窗口的标题栏或者控制按钮时,应用程序就会接收非客户区鼠标消息。因为非客户区的鼠标消息最好由 Windows 自己来处理,所...