计算机基础课程鼠标和键盘”
鼠标和键盘 鼠标消息的捕获 由于鼠标的随机性,用户可能在一个应用程序的窗口内按下鼠标左键,而移动到另一个应用程序的窗口内后释放鼠标左键。为使所有鼠标消息均定向到某一窗口,而不管鼠标光标位于何处,就必须对鼠标加以捕捉。Windows为了这个目的,声明了一个专门用来捕获鼠标消息的函数: CWnd * SetCapture(); 一旦某窗口捕捉了鼠标,其他窗口无法得到鼠标消息。因此,应用程序应该及时释放鼠标,以使鼠标可以按系统预定的正常方式发送消息,否则将使鼠标的一些正常作用失效(例如,当用鼠标单击窗口的关闭按钮时,程序将不能被关闭)。释放鼠标要使用下面的这个函数: BOOL ReleaseCapture(); 这两个函数都不带输入参数。 例1开发一个用鼠标绘图的程序,当按下鼠标左键后,移动鼠标可在窗口内绘图,松开鼠标左键后绘图结束。当按下鼠标右键后,移动鼠标可擦除窗口内的图形,松开鼠标右键后擦图结束。操作步骤如下。 ( l )用AppWizard生成框架代码 使用菜单File|New 创建一个新的工程,类型为MFC AppWizard( exe ) ,工程名称为Draw , 选择Single Document ,其余采用默认值。 ( 2 )用ClassWizard 添加消息处理函数 使用菜单View|ClassWizard调出ClassWizard,并打开Messase Maps 选项卡 显示键盘输入字符程序的实现方法 ●利用AppWizard向导生成项目名为MyWinKey的应用程序框架。 ●在应用程序框架中添加保存字符的数据成员(既可以利用向导添加,也可以手工添加)。 ●在应用程序框架中通过ClassWizard向导添加消息处理函数 。 ●编译并运行应用程序即可实现将键盘输入的字符在窗口客户区显示。 例3通过应用程序向导创建应用程序框架,并编写源代码使应用程能将键盘的输入信息在窗口客户区显示。为简单起见,可以不处理各种控制键和功能键,也不处理换行。 实现步骤如下: ⑴利用Appwizard向导生成项目名为MyKey的单文档应用程序框架。 使用菜单File|New 创建一个新的工程,类型为MFC AppWizard(exe ) ,工程名称为MyKey , 选择Single Document ,其余采用默认值。 ⑵在应用程序框架中添加数据成员。 文档类的主要功能是保存应用程序数据,并提供磁盘文件操作等,因此,数据成员应添加在文档类声明的头文件中,即在MyKeyDoc.h文件中定义数据成员m_MyText,用于保存字符数据。数据成员可以通过VC++提供的菜单添加数据成员,也可以找到相应文件以后手工添加。 * 鼠标处理程序 ●鼠标是一种得到广泛应用的定位输入设备。 ●通过鼠标的单击、双击和拖动功能,用户可以方便的操作Windows的图形界面应用程序。 ●Windows应用程序的鼠标消息,可以被任何窗口接受,只要鼠标移动到该窗口并有鼠标按键消息,该窗口就可以接受到鼠标消息,而与该窗口是否活动窗口或是否带有输入焦点没有关系。 ? 鼠标消息 ● windows操作系统通过鼠标驱动程序接受鼠标输入消息,由鼠标设备驱动程序捕捉Windows的任何鼠标事件。 ●当用户移动鼠标释放鼠标按键时,将产生鼠标消息。鼠标消息可以分为客户区鼠标消息和非客户区鼠标消息。 ●鼠标在窗口客户区移动时产生WM_MOUSEMOVE消息.鼠标在客户区产生的消息由Windows应用程序处理,而在窗口边界、菜单、标题栏和滚动条等非客户区产生的鼠标消息一般由Windows系统处理。 ? ●鼠标消息属于Windows消息,所以鼠标和键盘消息的消息响应函数只能放在窗口框架类和视图类中,作为窗口框架类和视图类的成员函数。 ●鼠标消息均可直接利用Visual C++6.0的ClassWizard向导添加鼠标消息处理函数 ●与鼠标消息对应的消息处理函数如下表所示。 消息处理函数 常用鼠标消息处理函数表 鼠标消息 消息处理函数 备注 WM_MOUSEMOVE void OnMouseMove(UINT nFlags,CPoint point) 鼠标移动 WM_LBUTTONDOWN void OnLButtonDown(UINT nFlags,CPoint point) 单击鼠标左键 WM_MBUTTONDOWN void OnMButtonDown(UINT nFlags,CPoint point) 单击鼠标中键 WM_RBUTTONDOWN void OnRButtonDown(UINT nFlags,CPoint point) 单击鼠标右键 WM_LBUTTON