计算机基础课程 鼠标与键盘.ppt
《计算机基础课程 鼠标与键盘.ppt》由会员分享,可在线阅读,更多相关《计算机基础课程 鼠标与键盘.ppt(45页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、鼠标和键盘鼠标和键盘鼠标处理程序鼠标处理程序 鼠标是一种得到广泛应用的定位输入设备。通过鼠标的单击、双击和拖动功能,用户可以方便的操作Windows的图形界面应用程序。Windows应用程序的鼠标消息,可以被任何窗口接受,只要鼠标移动到该窗口并有鼠标按键消息,该窗口就可以接受到鼠标消息,而与该窗口是否活动窗口或是否带有输入焦点没有关系。鼠标消息鼠标消息 windows操作系统通过鼠标驱动程序接受鼠标输入消息,由鼠标设备驱动程序捕捉Windows的任何鼠标事件。当用户移动鼠标释放鼠标按键时,将产生鼠标消息。鼠标消息可以分为客户区鼠标消息和非客户区鼠标消息。鼠 标 在 窗 口 客 户 区 移 动
2、时 产 生WM_MOUSEMOVE消息.鼠标在客户区产生的消息由Windows应用程序处理,而在窗口边界、菜单、标题栏和滚动条等非客户区产生的鼠标消息一般由Windows系统处理。鼠标消息属于Windows消息,所以鼠标和键盘消息的消息响应函数只能放在窗口框架类和视图类中,作为窗口框架类和视图类的成员函数。鼠标消息均可直接利用VisualC+6.0的ClassWizard向导添加鼠标消息处理函数与鼠标消息对应的消息处理函数如下表所示。消息处理函数消息处理函数 常用鼠标消息处理函数表常用鼠标消息处理函数表 鼠标消息消息处理函数备注WM_MOUSEMOVEvoidOnMouseMove(UINTn
3、Flags,CPointpoint)鼠标移动WM_LBUTTONDOWNvoidOnLButtonDown(UINTnFlags,CPointpoint)单击鼠标左键WM_MBUTTONDOWNvoidOnMButtonDown(UINTnFlags,CPointpoint)单击鼠标中键WM_RBUTTONDOWNvoidOnRButtonDown(UINTnFlags,CPointpoint)单击鼠标右键WM_LBUTTONUPvoidOnLButtonUp(UINTnFlags,CPointpoint)鼠标左键释放鼠标消息处理函数表鼠标消息处理函数表(续续)WM_MBUTTONUPvoid
4、OnMButtonUp(UINTnFlags,CPointpoint)鼠标中键释放WM_RBUTTONUPvoidOnRButtonUp(UINTnFlags,CPointpoint)鼠标右键释放WM_LBUTTONDBLICKvoid OnLButtonDblClk(UINT nFlags,CPointpoint)双击鼠标左键WM_MBUTTONDBLICKvoid OnMButtonDblClk(UINT nFlags,CPointpoint)双击鼠标中键WM_RBUTTONDBLICKvoid OnRButtonDblClk(UINT nFlags,CPointpoint)双击鼠标右键(
5、l)nFlags 包含额外的鼠标键和键盘键的信息,以包含额外的鼠标键和键盘键的信息,以指出发生消息时某些鼠标键与键盘键的状态,可能指出发生消息时某些鼠标键与键盘键的状态,可能的取值有以下几个。的取值有以下几个。.MK_CONTROL:键盘上的:键盘上的Ctrl键被按下。键被按下。.MK_LBUTTON:鼠标左键被按下。:鼠标左键被按下。.MK_MBUTTON:鼠标中键被按下。:鼠标中键被按下。.MK_RBUTTON:鼠标右键被按下。:鼠标右键被按下。.MK_SHIFT:键盘上的:键盘上的Shift 键被按下。键被按下。在鼠标消息处理函数内,可用按位逻辑在鼠标消息处理函数内,可用按位逻辑“与与”
6、运算检测运算检测特定键的信息,例如,鼠标事件发生时,如果按下了特定键的信息,例如,鼠标事件发生时,如果按下了shift 键,则弹出一个消息框,显示键,则弹出一个消息框,显示“鼠标事件发生时,鼠标事件发生时,shift 键被按下!键被按下!”,代码如下:,代码如下:if(nFlags&MK_SHIFT)/结果若为非零值,则表示结果若为非零值,则表示键被按下键被按下Messagesox(”鼠标事件发生时,鼠标事件发生时,shift 键被按下!键被按下!”);(2)point 参数包含鼠标指针的坐标位置,其类型为参数包含鼠标指针的坐标位置,其类型为CPoint 类,类,CPoint 类是类是MFC
7、预定义的用来描述点的类,预定义的用来描述点的类,其包含两个数据成员其包含两个数据成员x和和y。point.x 内为鼠标指针的横内为鼠标指针的横坐标,坐标,poini.y 内为鼠标指针的纵坐标。内为鼠标指针的纵坐标。鼠标消息的捕获鼠标消息的捕获由于鼠标的随机性,用户可能在一个应用程序的窗口内按下鼠标左键,而移动到另一个应用程序的窗口内后释放鼠标左键。为使所有鼠标消息均定向到某一窗口,而不管鼠标光标位于何处,就必须对鼠标加以捕捉。Windows为了这个目的,声明了一个专门用来捕获鼠标消息的函数:CWnd*SetCapture();一旦某窗口捕捉了鼠标,其他窗口无法得到鼠标消息。因此,应用程序应该及
8、时释放鼠标,以使鼠标可以按系统预定的正常方式发送消息,否则将使鼠标的一些正常作用失效(例如,当用鼠标单击窗口的关闭按钮时,程序将不能被关闭)。释放鼠标要使用下面的这个函数:BOOL ReleaseCapture();这两个函数都不带输入参数。例1开发一个用鼠标绘图的程序,当按下鼠标左键后,移动鼠标可在窗口内绘图,松开鼠标左键后绘图结束。当按下鼠标右键后,移动鼠标可擦除窗口内的图形,松开鼠标右键后擦图结束。操作步骤如下。(l)用AppWizard生成框架代码使用菜单File|New 创建一个新的工程,类型为MFC AppWizard(exe),工程名称为Draw,选择Single Documen
9、t,其余采用默认值。(2)用ClassWizard 添加消息处理函数使用菜单View|ClassWizard调出ClassWizard,并打开Messase Maps 选项卡void CDrawView:OnMouseMove(UINT nFlags,CPoint point)/TODO:Add your message handler code here CView:OnMouseMove(nFlags,point);在提示注释行下面添加如下代码:if(nFlags&MK_LBUTTON)CDC *pDC=GetDC();pDC-SetPixel(point,RGB(255,0,0);Rel
10、easeDC(pDC);else if(nFlags&MK_RBUTTON)CDC *pDC=GetDC();pDC-SetPixel(point,RGB(255,255,255);ReleaseDC(pDC);例2鼠标绘直线程序按下鼠标左键时开始画线(直线的起点),释放鼠标左键时完成画线(直线的终点)。实现步骤如下:(1)利用Appwizard向导生成名为MywinMouse的应用程序框架。(2)添加数据成员。在视图类的头文件CWywinMouseView.h中添加数据成员:Class CMyWinMouseView:public CView /由用户添加的数据成员protected:CPo
11、int m_LineOrg;/鼠标按键的起始位置 CPoint m_LineEnd;/鼠标按键的释放位置 CPen *ptr_mypen;/定义画笔类对象 int m_MouseDown;/表示鼠标左键是否按下 /其他代码方法一(3)画笔的初始化与销毁分别在视图类构造函数与析构函数中完成,代码如下:CMyWinMouseView:CMyWinMouseView()/TODO:add construction code hereptr_mypen=new CPen(0,0,RGB(255,0,0);CMyWinMouseView:CMyWinMouseView()delete ptr_mypen
12、;/删除画笔void CVvView:OnLButtonDown(UINT nFlags,CPoint point)/TODO:Add your message handler code here and/or call defaultm_LineOrg=point;m_MouseDown=1;CView:OnLButtonDown(nFlags,point);void CVvView:OnLButtonUp(UINT nFlags,CPoint point)/TODO:Add your message handler code here and/or call defaultif(m_Mou
13、seDown)m_LineEnd=point;Invalidate(FALSE);CView:OnLButtonUp(nFlags,point);void CVvView:OnDraw(CDC*pDC)CVvDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);/TODO:add draw code for native data herepDC-SelectObject(ptr_mypen);pDC-MoveTo(m_LineOrg);pDC-LineTo(m_LineEnd);m_MouseDown=0;方法二(3)画笔的初始化与销毁分别在视图类构造函数与析构
14、函数中完成,代码如下:CMyWinMouseView:CMyWinMouseView()/TODO:add construction code hereptr_mypen=new CPen(0,0,RGB(255,255,255);/白色线条CMyWinMouseView:CMyWinMouseView()delete ptr_mypen;/删除画笔Void CMyWinMouseView:OnMouseMove(UINT nFlags,CPoint point)/TODO:Add your message handler code here and/or call defaultif(m_M
15、ouseDown)CClientDC DC(this);/将画笔选入设备环境并保存默认画笔将画笔选入设备环境并保存默认画笔DC.SelectObject(ptr_mypen);DC.SetROP2(R2_XORPEN);/画第一遍是为了擦除已经画的线,画第一遍是为了擦除已经画的线,第二遍为了显示新画的线第二遍为了显示新画的线 DC.MoveTo(m_LineOrg);DC.LineTo(m_LineEnd);m_LineEnd=point;DC.MoveTo(m_LineOrg);DC.LineTo(m_LineEnd);CView:OnMouseMove(nFlags,point);void
16、 CMyWinMouseView:OnLButton Down(UINT nFlags,CPoint point)/TODO:Add your message handler code here and/or call defaultm_LineEnd=m_LineOrg=point;m_MouseDown=1;/鼠标左键已按下CVivew:OnLButtonDown(nFlags,point);void CMyWinMouseView:OnLButtonUp(UINT nFlags,CPoint point)/TODO:Add your message handler code here a
17、nd/or call default if(m_MouseDown)CClientDC DC(this);DC.SelectObject(ptr_mypen);DC.SetROP2(R2_XORPEN);DC.MoveTo(m_LineOrg);DC.LineTo(m_LineEnd);m_LineEnd=point;DC.MoveTo(m_LineOrg);DC.LineTo(m_LineEnd);m_MouseDown=0;/鼠标已释放置初值鼠标已释放置初值0CView:OnLButtonUp(nFlags,point);例例当鼠标左键按下时,可以捕获鼠标消息的程序。只要用户在程序窗口用户
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机基础课程 鼠标与键盘 计算机 基础 课程 鼠标 键盘
限制150内