项目十 鼠标和键盘事件的响应

合集下载

第10章 键盘与鼠标事件过程(2014)

第10章 键盘与鼠标事件过程(2014)

10.2
KeyDown和KeyUp事件
KeyDown事件是指程序运行时,用户按下键盘上的某个按键 (没有释放)时,具有焦点的对象所触发的事件。 KeyUp事件是指程序运行时,用户对键盘上某个已按下的按 键释放后的瞬间,具有焦点的对象所触发的事件。 其语法格式分别为: Private Sub 对象名_KeyDown(KeyCode As Integer, Shift As Integer) ...... End Sub Private Sub 对象名_KeyUp(KeyCode As Integer, Shift As Integer) ...... End Sub
10.3 鼠标事件
在前面的例子中曾多次使用鼠标事件,即单击(Click) 事件和双击( DblClick )事件,这些事件是通过快速按下 并 松 开 鼠 标 键 而 产 生 的 。 除 此 之 外 , VB 还 可 以 通 过 MouseDown 、 MouseUp 、 MouseMove 事件使应用程序对 鼠标位置及状态的变化作出响应(其中不包括拖放事件。 其实, Click 事件是由 MouseDown 和 MouseUp 组成,因 此MouseDown和MouseUp是更基本的鼠标事件。
第10章
键盘与鼠标事件过程
1. 键盘事件过程 2. 鼠标事件过程
第10章
键盘与鼠标事件过程
键盘和鼠标作为计算机最常使用的两种输 入设备,绝大多数对象都拥有键盘和鼠标事 件。
键盘事件过程可以处理当用户按下或释放 键盘上某个键时所执行的操作,而鼠标事件 过程可以用来处理与鼠标光标的移动和位置 有关的操作。
事件过程的语法格式为:
Private Sub 对象名_KeyPress(keyascii As Integer)

第10章 鼠标与键盘事件的处理

第10章 鼠标与键盘事件的处理

接口事件的处理全过程(鼠标的移动和鼠标的拖动)。 本例中还应注意的另一个技巧是,拖动鼠标时(按 着鼠标左键),我们就获得了鼠标拖动时的坐标,同时 调用repaint()方法画下这个坐时,程序首先清除paint()方 法以前所画的内容,然后再调用paint()方法。但有时 我们不想让程序清除paint()方法以前所画的所有内容。 实际上当我们调用repaint()方法时,程序自动地调用 update(Graphics g)方法(从父类Component继承下来 的)清除paint()方法以前所画的内容,然后再调用 paint()方法。因此我们可以在我们的小程序中重写这 个update(Graphics g)方法(即隐藏父类的方法),根据 需要来清除哪些部分或保留哪些部分。在这个例子中, 我们在update(Graphics g)方法体内没有清除以前所画 的内容(如果准备清除可使用clearRect方法)而是继续 调用paint()方法。
第三节 KeyListener接口及事件处理
一、KeyListener接口及其方法 接口及其方法 当按下、释放或敲击键盘上一个键时就发生了键 盘事件,在Java l.2事件模式中,必须要有发生事件 的事件源。当一个组件处于激活状态时,敲击键盘上 一个键就导致这个组件上发生了键盘事件。 事件源使用addKeyListener方法获得监视器。 监视器是一个对象,创建该对象的类必须实现接 口KeyListener。接口KeyListener中有3个方法: public void keyPressed(KeyEvent e) public void keyTyped(KeyEvent e) public void KeyReleased(KeyEvent e) 当你按下键盘上某个键时,监视器就会发现,然后 方法keyPressed方法会自动执行,并且KeyEvent类

可视化实验二实现Windows应用程序对键盘与鼠标的响应。.doc

可视化实验二实现Windows应用程序对键盘与鼠标的响应。.doc

可视化实验二实现Windows应用程序对键盘与鼠标的响应。

.docVisual C++面向对象与可视化程序设计实验二实验报告一、实验目的1、使用API函数编制包含各种资源的Windows应用程序;2、实现Windows应用程序对键盘与鼠标的响应。

二、实验内容1、问题描述:(1)创建一个菜单,其中有三个菜单项,分别为“文件”、“计算”和“帮助”,其中,“文件”菜单项包含“打开”、“保存”、“画图”、“退出”等菜单选项;“计算”菜单包含“总和”、“方差”、“均方根”等菜单选项;“帮助”菜单项包含“计算总和帮助”、“计算方差帮助”和“计算均方根帮助”以及“关于”等项。

(2)若单击“画图”菜单项,则绘出P103图形。

若在用户区内按下鼠标左键,则动态创建一个包括“删除计算总和”、“添加计算平均值”和“修改计算均方差”三个菜单项的弹出式菜单,由此菜单控制“计算”菜单中菜单项删除、添加与修改。

(要求新的弹出式菜单开始时不可用,按下右键后变为可用。

)单击“修改计算均方差”菜单项后,“计算”菜单下的“计算均方差”项改为“线性拟合”,单击“添加计算平均值”菜单项后,“计算”菜单中添加上了“计算平均值”菜单项。

(3)将光标设定为自己名字中的某个字、图标设定为自己名字中的另一个字。

2、应用程序中所用到的资源、消息,简介主要函数的功能;3、程序实现4、操作结果三、程序代码#include"windows.h"#include"E08700212叶孙晓.h"HMENU hmenu,haddmenu;LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARA M);int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow){HWND hwnd;MSG Msg;HACCEL hAccel;WNDCLASS wndclass;char lpszMenuName[]="Menu";char lpszClassName[]="菜单";char lpszTitle[]="E08700212叶孙晓二";wndclass.style=0;wndclass.lpfnWndProc=WndProc;wndclass.cbClsExtra=0;wndclass.cbWndExtra=0;wndclass.hInstance=hInstance;wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);wndclass.lpszMenuName=lpszMenuName;wndclass.lpszClassName=lpszClassName;if(!RegisterClass(&wndclass)){MessageBeep(0);return FALSE;}hwnd=CreateWindow(lpszClassName,lpszTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);ShowWindow(hwnd,nCmdShow); UpdateWindow(hwnd);hAccel=LoadAccelerators(hInstance,lpszMen uName); while(GetMessage(&Msg,NULL,0,0)){if(!TranslateAccelerator(hwnd,hAccel,&Msg)){TranslateMessage(&Msg);DispatchMessage(&Msg);}}return Msg.wParam;LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){static bool draw = false;static bool pingjunzhiadd = true;static bool left = true;HDC hdc;PAINTSTRUCT ps;HPEN hp;HBRUSH hb;switch(message){case WM_COMMAND:switch(LOWORD(wParam)){case IDM_EXIT:SendMessage(hwnd,WM_DESTROY,0,0);break;case IDM_fangchamodify:ModifyMenu(hmenu,IDM_fangcha,MF_BYCOMMAND,IDM_nihe,"线性拟合");DrawMenuBar(hwnd);break;case IDM_pingjunzhiadd:if(pingjunzhiadd){InsertMenu(hmenu,IDM_junfanggen,MF_BYCOMMAND|MF_ENABLED,IDM_pingjunz hi,"平均值");DrawMenuBar(hwnd);pingjunzhiadd = false;break;case IDM_DRAW:hmenu = GetMenu(hwnd);draw = true;break;}break;case WM_LBUTTONDOWN:if(left){hmenu=GetMenu(hwnd);haddmenu=CreateMenu();AppendMenu(haddmenu,MF_GRAYED,IDM _zonghedelete,"删除计算总和");AppendMenu(haddmenu,MF_GRAYED,IDM_fangchamodify,"修改计算方差");AppendMenu(haddmenu,MF_GRAYED,IDM _pingjunzhiadd,"添加计算平均值");InsertMenu(hmenu,3,MF_POPUP|MF_BYPOSITION,(UINT)haddmenu,"修改菜单");DrawMenuBar(hwnd);}left = false;break;case WM_RBUTTONDOWN:EnableMenuItem(haddmenu,IDM_zonghedelete,MF_ENABLED);EnableMenuItem(haddmenu,IDM_fangchamodify,MF_ENABLED);EnableMenuItem(haddmenu,IDM_pingjunzhi add,MF_ENABLED);DrawMenuBar(hwnd);break;case WM_PAINT:if(draw){hdc = BeginPaint (hwnd, &ps);SetMapMode(hdc,MM_TEXT);Rectangle(hdc,130,60,270,200);hb=CreateHatchBrush(HS_CROSS,RGB(255, 0,0));SelectObject(hdc,hb);Ellipse(hdc,130,70,270,190);hp=CreatePen(PS_DASHDOT,1,RGB(0,255,0 ));SelectObject(hdc,hp);MoveToEx(hdc,100,130,NULL);LineT o(hdc,300,130);MoveToEx(hdc,200,30,NULL);LineT o(hdc,200,230);EndPaint(hwnd,&ps);DeleteObject(hp);DeleteObject(hb);}break;case WM_DESTROY:PostQuitMessage(0);break;default:returnDefWindowProc(hwnd,message,wParam,lParam);}return 0;} 头文件#define IDM_ADDMENU 14#define IDM_DELMENU 16 #define IDM_OPEN 11 #define IDM_SA VE 13 #define IDM_lcw 17#define IDM_DRAW 12 #define IDM_EXIT 15#define IDM_zonghe 18#define IDM_fangcha 19#define IDM_junfanggen 21 #define IDM_zonghehelp 22#define IDM_fangchahelp 23#define IDM_junfanggenhelp 24#define IDM_ABOUT 20 #define IDM_zonghedelete 30#define IDM_fangchamodify 31#define IDM_pingjunzhiadd 32#define IDM_nihe 33 #define IDM_pingjunzhi 34资源文件//Microsoft Developer Studio generated resource script.//#include "resource.h"#define APSTUDIO_READONLY_SYMBOLS/////////////////////////////////////////////////////////////////// // //////////// Generated from the TEXTINCLUDE 2 resource.//#include "afxres.h"#include"windows.h"#include"E08700212叶孙晓.h"E08700212 ICON D:\E08700212二\E08700212.ICOE08700212 CURSOR D:\E08700212二\E08700212.CURMenu MENU DISCARDABLE{POPUP"文件(&F)"{MENUITEM"打开(&O)\tCtrl+O", IDM_OPENMENUITEM"画图(&G)", IDM_DRAWMENUITEM"保存(&S)", IDM_SAVE MENUITEM"另存为(&A)", IDM_lcw MENUITEM SEPARATORMENUITEM"退出(&X)", IDM_EXIT}POPUP"计算(&C)"{MENUITEM"计算总和(&S)", IDM_zongheMENUITEM"计算方差(&D)", IDM_fangchaMENUITEM"线性拟合", IDM_junfanggen}POPUP"帮助(&H)"{MENUITEM"计算总和的帮助", IDM_zonghehelpMENUITEM"计算方差的帮助", IDM_fangchahelpMENUITEM"计算均方根的帮助", IDM_junfanggenhelpMENUITEM SEPARATORMENUITEM"关于(&A)", IDM_ABOUT}/////////////////////////////////////////////////////////////////// // ////////#undef APSTUDIO_READONLY_SYMBOLS/////////////////////////////////////////////////////////////////// // ////////// Chinese (中国) resources#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS) #ifdef _WIN32LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED#pragma code_page(936)#endif //_WIN32#ifdef APSTUDIO_INVOKED/////////////////////////////////////////////////////////////////// // //////////// TEXTINCLUDE//1 TEXTINCLUDE DISCARDABLEBEGIN"resource.h\0"END2 TEXTINCLUDE DISCARDABLEBEGIN"#include ""afxres.h""\r\n""#include""windows.h""\r\n""#include""E08700212叶孙晓.h""\r\n""E08700212 ICON D:\\E08700212二\\E08700212.ICO\r\n""E08700212 CURSOR D:\\E08700212二\\E08700212.CUR\r\n""Menu MENU DISCARDABLE\r\n""{\r\n"" POPUP""文件(&F)""\r\n"" {\r\n"" MENUITEM""打开(&O)\\tCtrl+O"", IDM_OPEN \r\n"" MENUITEM""画图(&G)"", IDM_DRAW \r\n"" MENUITEM""保存(&S)"", IDM_SAVE MENUITEM""另存为(&A)"", IDM_lcw MENUITEM SEPARATOR\r\n"" MENUITEM""退出(&X)"", IDM_EXIT\r\n""\r\n"" }\r\n"" POPUP""计算(&C)""\r\n"" { \r\n"" MENUITEM""计算总和(&S)"", IDM_zonghe \r\n"" MENUITEM""计算方差(&D)"", IDM_fangcha\r\n"" MENUITEM""线性拟合"", IDM_junfanggen\r\n"" }\r\n""\r\n"" POPUP""帮助(&H)""\r\n"" { \r\n"" MENUITEM""计算总和的帮助"", IDM_zonghehelp\r\n"" MENUITEM""计算方差的帮助"", IDM_fangchahelp\r\n"" MENUITEM""计算均方根的帮助"", IDM_junfanggenhelp\r\n"" MENUITEM SEPARATOR\r\n"" MENUITEM""关于(&A)"", IDM_ABOUT\r\n"" }\0"END3 TEXTINCLUDE DISCARDABLEBEGIN"\r\n""\0"END#endif // APSTUDIO_INVOKED#endif // Chinese (中国) resources/////////////////////////////////////////////////////////////////// //////////#ifndef APSTUDIO_INVOKED/////////////////////////////////////////////////////////////////// // //////////// Generated from the TEXTINCLUDE 3 resource.///////////////////////////////////////////////////////////////////// // ////////#endif五、实验心得通过这次实验学会了使用API函数编制包含各种资源的Windows 应用程序,在实验过程中,光标的设置,课本上对这块阐述的很简短,很多都需要自己去理解。

pygame键盘和鼠标事件的处理

pygame键盘和鼠标事件的处理

pygame键盘和⿏标事件的处理pygame 的键盘和⿏标事件的处理所谓事件,就是程序上发⽣的事。

例如⽤户按下键盘上的某个键或者单击、移动⿏标,对于这些事件,游戏程序需要作出反应。

如《pygame 图像/图形绘制》中例⼦,程序会⼀直运⾏下去,直到⽤户关闭窗⼝⽽产⽣⼀个 QUIT 事件,pygame 会接收⽤户的各种操作(例如按键盘上的键、移动⿏标等)产⽣事件。

事件随时可能发⽣,⽽且量可能会很⼤,pygame 的做法是把⼀系列的事件存放到⼀个队列⾥逐个处理。

在上节例⼦中使⽤了pygame.event.get()来处理所有事件,如果使⽤pygame.event.wait() , pygame 会等到发⽣⼀个事件时才继续下去,⼀般在游戏中不太实⽤,因为游戏往往是需要动态运作的。

pygame 的常⽤事件如下所⽰:事件产⽣途径参数QUIT⽤户按下“关闭”按钮NoneACTIVEEVENT pygame 被激活或者隐藏gain 、stateKEYDOWN键盘被按下unicode 、key 、modKEYUP键盘被放开key 、modMOUSEMOTION⿏标移动pos 、rel 、buttonsMOUSEBUTTONDOWN⿏标被按下pos 、buttonMOUSEBUTTONUP⿏标被放开pos 、button1. pygame 的键盘事件的处理通常⽤pyagme.event.get()获取所有事件,若event.type == KEYDOWN , 这时是键盘事件,再判断按键的event.key的种类(即 K_a 、 K_b 、K_LEFT 这种形式)。

⽤户也可以使⽤pygame.key.get_pressed()来获取所有被按下的键值,对应的就是键是否被按下。

keys_pressed = pygame.key.get_pressed()if keys_pressed[K_SPACE]:# 空格键被按下fire() # 发射⼦弹在 key 模块下有很多函数,如下:key.get_focused(): 返回当前的 pygame 窗⼝是否被激活。

第十讲(1) 键盘与鼠标事件过程

第十讲(1) 键盘与鼠标事件过程
32-47 58-64 91-96 123-126

0-9 A-Z a-z
各种标点符号
注:表内的为KeyPress事件能 接收的键。
ASCII码编码范围:0-127共 128个。0-31和127为控制符, 无法打印。
13 8 9
Enter
BackSpace Tab
KeyPress 事件识别范围:数 字键、字符键、标点符号键。 控制键只识别: ENTER、 TAB 和 BACKSPACE 键。
10. 2 KeyDown事件和KeyUp事件
程序运行过程中,当按下键盘某个键时,则产
生KeyDown事件,而放开该键时产生KeyUp
事件。按下某个键也会发生KeyPress事件,
但与KeyDown事件是不一样的。KeyDown
和KeyUp事件返回的是键盘的直接状态,即
该键的“扫描码”值。
KeyDown和KeyUp事件过程
控件的事件过程
形参KeyAscii,其参数值是当KeyPress事件发生时,由系统 自动传递过来的当前所按键的Ascii码值。例如,当按下“A” 键,系统传递给形参KeyAscii的值为65;而当按下“a”键时, 则系统传递给KeyAscii的值为97。
KeyPress事件能识别字母、数字、标点等键盘上
应用:对输入的数据进行验证、限制和修改 1.限制数据输入 文本框中只能接收“0”~“9”的数字字符。 Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii < 48 Or KeyAscii > 57 Then Msgbox “请输入0-9之间的数字” KeyAscii = 0 End If End Sub
Label2.Caption = "恭喜!,您已成功进入本系统"

C#处理鼠标和键盘事件

C#处理鼠标和键盘事件

在程序运行中,产生事件的主体有很多,其中尤其以键盘和鼠标为最多。

本文就来探讨一下在C#中和这二个主体相关的事件的处理过程。

一.本文介绍的程序设计和运行的软件环境:(1).微软公司视窗2000服务器版(2) FrameWork SDK Beta 2二.C#中处理鼠标相关的事件:鼠标相关的事件大致有六种,分别是:"MouseHover"、"MouseLeave"、"MouseEnter"、"MouseMove"、"MouseDown"和"MouseUp"。

(1).如何在C#程序中定义这些事件:在C#中是通过不同的Delegate来描述上述事件,其中描述"MouseHover"、"MouseLeave"、"MouseEnter"事件的Delegate是"EventHandler",而描述后面的三个事件的Delegate是"MouseEventHandler"来描述。

这二个Delegate分别被封装在不同的命名空间,其中"EventHandler"被封装在"System"命名空间;"MouseEventHandler"被封装在"Syetem.Windows.Froms"命名空间中的。

在为"MouseHover"、"MouseLeave"、"MouseEnter"事件通过数据的类是"EventArgs",他也被封装在"System"命名空间中;而为后面的三个事件提供数据的类是"MouseEventArgs",他却被封装在"Syetem.Windows.Froms"命名空间。

第6章 Windows应用程序对键盘与鼠标的响应-PPT课件

第6章 Windows应用程序对键盘与鼠标的响应-PPT课件

//输入位置为本行的起始位置
break;
case VK_DELETE:
//处理按下键为Delete时的消息
if(nArrayPos==nNumChar) //输入位置处于本行的末尾
MessageBox(hWnd,
"缓冲区已空,没有字符可供删除",NULL,MB_OK);
else
{
for(x=nArrayPos;x<nNumChar;x=x+1)
若字符缓冲区中已没有任 何字符,此时按下了 Delete键,则出现(5)号错 误提示信息
long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)
{
#define BufSize 30
//设置存放字符的缓冲区大小
//设置静态字符数组,存放输入的字符,字符个数不能超出缓冲区大小
操作系统在接收到键盘输入后,还要决定哪一个应用程序将响应输入
Windows系统把消息发送给具有“输入焦点(input focus)的窗口
应用程序一般有几个窗 口,但当按下某一个键 时,只有一个窗口能接 收到该键盘消息,接收 这个键盘消息的窗口称 为有“输入焦点”的窗口
有“输入焦点” 的窗口应是活 动窗口或者活 动窗口的子窗口
12
含义 非系统字符 非系统死字符 系统字符 系统死字符
6.2 键盘操作应用举例
【例6-1】本例演示键盘输入时所产生的消息序列并在窗口的客 户区显示对应的字符。
13
用户窗口区输入“这是一 个有关键盘操作的示例程 序”的字符串
程序中缓冲区大小只设30 个字符,当缓冲区满时若 再输入任何字符,就出现 (1)号错误提示

第9章 响应键盘与鼠标事件

第9章 响应键盘与鼠标事件

2020/3/22
13
9-3 拖放操作
与拖放有关的属性: DragMode启动自动拖动或手动拖动 DragIcon指定拖动时显示的图标 与拖放有关的方法: Drag启动或停止手动拖动
2020/3/22
14
9-3 拖放操作
1.启动自动拖放模式 将控件的DragMode属性设置为“1- Automatic”,在设置好自动拖动后,拖动操 作就一直保持在打开状态.
2020/3/22
17
9-3 拖放操作
【例9-4】应用拖拽事件实现复制效果。
2020/3/22
18
9
9-2-2 MouseMove事件
当鼠标指针在对象上移动时,就会 触发MouseMove事件,Visual Basic 中的大多数对象都能识别该事件。只要 鼠标指针位置发生改变,MouseMove 事件就会被识别.
2020/3/22
10
9-2-2 MouseMove事件
【例9-2】应用鼠标事件实现图片跟随效果。
2020/3/22
4
9-1-2 KeyDown和KeyUp事件
KeyDown事件和KeyUp事件的KeyCode 参数在输入字符“A”与“a”的返回值相同, 若要区别它们,则要借助于shift键和shift参 数。
KeyDown事件和KeyUp事件可识别标准
键盘上的大多数控制键,包括所有的功能键
F1~F16,编辑键PageUp、PageDown键、
第 9 章 响应键盘与鼠标事件过程
响应键盘事件 响应鼠标事件 拖放操作
2020/3/22
1
9-1 键盘事件
KeyPress事件 KeyDown事件 KeyUp事件 能够捕捉用户对键盘的所有操作

键盘与鼠标响应-PPT课件

键盘与鼠标响应-PPT课件

VK_BACK VK_TAB VK_RETURN VK_CONTROL VK_PAUSE VK_ESCAPE VK_NEXT VK_HOME VK_RIGHT VK_DOWN VK_A~VK_Z
退格键 制表键 回车键 Ctrl键 Pause键 Esc键 PageDown键 Home键 右箭头键 下箭头键 A~Z键
键盘消息
按键消息
系统按键消息 非系统按键消息
字符消息
系统字符消息 非系统字符消息
按键消息
当用户按下或松开一个键时产生按键消息。 系统按键消息:
使用Alt键与相关输入键产生的消息。由 windows系统内部直接处理,应用程序不必 处理。
WM_SYSKEYDOWN WM_SYSKEYUP
按下系统键 松开系统键
static int nYChar[Y]={0,0,0,0,0};
static int nNumChar[Y]={0,0,0,0,0}; static int nTextStartX[Y]={0,0,0,0,0}; static int nTextStartY[Y]={0,0,0,0,0};
static SIZE size[Y]; static int n=0;
非系统按键消息:
不使用Alt键组合的按键消息,由应用程 序处理,例如:Home,End,上、下、左、右移 动键。
WM_KEYDOWN WM_KEYUP
按下非系统键 松开非系统键
lParam表示的含义常用的有四位:
0~15位:重复计数位。当键一直被按着时, 计算按键次数 29位:标识该键是否与Alt键一同被按下。 30位:标识键的先前状态 31位:标识键被按下还是被松开。 按键消息的wParam包含了识别按下的键 的虚拟码。

响应鼠标和键盘事件

响应鼠标和键盘事件
➢ X、Y是一个指定当前鼠标指针在Object中的坐标
▪ 水平 (x) 和垂直 (y) 位置的数字
DragMode属性
➢1-Automatic ➢0-Manual
在源控ห้องสมุดไป่ตู้的MouseDown事件中, 用源控件的Drag方法来启动拖放操作。
❖Drag方法——object.Drag [action]
拖放
拖动控件,改变其位置。
❖DragDrop事件
❖将一个控件拖动到一个对象上,并释放鼠标按钮后发生
Private Sub Object_DragDrop (Source As Control , X As Single,Y As Single)
➢ Object为窗体或控件
➢ Source 为正在被拖动的控件
参数(Button)
vbLeftButton vbRightButton vbMiddleButton

说明
1 左按钮被按下
2 右按钮被按下
4 中间按钮被按下
参数(Shift)
vbShiftMask vbCtrlMask vbAltMask
参数(Shift)的值
3 (011) 5 (101) 6 (110) 7 (111)
一、鼠标器事件
• 按下鼠标某一个键:
Sub object_MouseDown(button%, shift%, x!, y!)
• 释放鼠标某一个键:
Sub object _MouseUp(button%, shift%, x!, y!)
• 移动鼠标时:
Sub object _MouseMove(button%, shift%, x!, y!)
二、 键盘事件

2019-第12章 响应鼠标与键盘事件-文档资料

2019-第12章  响应鼠标与键盘事件-文档资料
Object是指窗体或控件对象名,KeyAscii 参数返回对应 于ASCII字符代码的整型数值。
在按下与ASCII字符对应的键时将触发KeyPress 事件。
目录 12.浙1 江1科2.2技学本院章教作信业系计算机基础教学网站:
12.2 键盘事件
KeyPress 事件过程的语法格式是: Sub Object_KeyPress (KeyAscii As Integer) 其中:
注意:
鼠标事件被用来识别和响应各种鼠标状态,并把这些状 态看作独立的事件,在按下鼠标按钮并释放时,Click 事件 只能把此过程识别为一个单一的单击操作。鼠标事件能够区 分各鼠标按钮及键盘的SHIFT、CTRL、ALT 键的状态。
例12.1 使用MouseUp 与 MouseDown 和MouseMove 事件,编写一个在窗体上用鼠标绘图的简单程序。
第十二章 响应鼠标和键盘事件
本章要求:
1. 理解鼠标、键盘事件的触发机制。 2. 掌握鼠标的MouseDown, MouseMove, MouseUp 事件中各参数的含义及编程控制。 3. 掌握键盘的KeyDown, KeyPress, KeyUp 事件中各 参数的含义及编程控制 4. 了解事件驱动的拖放和 OLE 的拖放。
目录 12.浙1 江1科2.2技学本院章教作信业系计算机基础教学网站:
12.1 鼠标事件
12.1.2 拖 放 (简略介绍,一般不作要求)
在运行时拖动控件,通常情况下并不能自动改变控件位置, 这就必须使用Visual Basic的拖放功能,通过编程,才能实 现在运行时拖动控件并改变其位置。把按下鼠标按钮并移动 控件的操作称为拖动,把释放按钮的操作称为放下。
12.2 键盘事件
在Visual Basic中,提供KeyPress、KeyDown、KeyUp三 种键盘事件,窗体和接受键盘输入的控件都识别这三种事件。 KeyPress 按下对应某ASCII 字符的键。 KeyDown 按下键盘的任意键。 KeyUp 释放键盘的任意键只有获得焦点的对象才能够接 受键盘事件。 12.2.1 KeyPress 事件

第7章 键盘与鼠标事件

第7章 键盘与鼠标事件

2.设计程序界面 此程序共需要2个Form窗体,其中一个Form窗体的界面需 要添加1个TextBox控件、1个Label控件和3个CommandButton控 件,另一个Form窗体只需要添加1个Label控件,2个窗体界面 设计要求较为简单,对于各控件位置的放置和大小可以根据窗 体大小进行调节,程序界面设计设计也可以参考图 7-2所示样 例界面设计风格。
3.设置控件属性
4.编写程序代码
a.程序分析
在完成任务1“移动文本框”程序代码设计编写较为简单,程序加载 运行“移动文本框”时,当键盘按下任意键时,程序将触发文本框的 KeyDown事件,同时文本框将根据所按键的代码和方向,以一定的步长, 朝所指定的方向前进 。
b.代码分析
‘四个方向键实现文本框向四个方向移动 Private Sub Text1_KeyDown(KeyCode As Integer, If KeyCode = 37 Then Text1.Left = Text1.Left – 100 ElseIf KeyCode = 38 Then Text1.Top = Text1.Top - 100 ElseIf KeyCode = 39 Then Text1.Left = Text1.Left + 100 ElseIf KeyCode = 40 Then Text1.Top = Text1.Top + 100 End If End Sub Shift As Integer) „如按下的是向左的方向键 „文本框做左移运动 „文本框做上移运动 „文本框做右移运动 „文本框做下移运动
b.代码分析 ‘在通用模块中定义变量类型,使得在程序运行过程中,这些变量一直 有效 Dim n As Integer Dim max As Double Dim min As Double Dim sum As Double

第9章鼠标和键盘事件

第9章鼠标和键盘事件

第9章鼠标和键盘事件【教学目标】(1)熟悉应用各种鼠标事件;(2)了解鼠标光标形状属性及其设置;(3)了解鼠标的拖放,包括手动拖放和自动拖放的实现过程;(4)熟悉应用键盘事件,包括Key Press事件、 KeyDown和KeyUp事件及它们触发的顺序。

【教学重难点】1.教学重点:教学目标中的(1)、(4)。

2.教学难点:用代码实现各种鼠标事件和键盘事件。

【教学方法】讲授法+直观演示法+任务驱动法【教学手段】CAI课件+课堂直观演示+课堂练习【教学时数】4+2课时【教学过程设计思想】以课堂讲授为主,针对同一问题,通过典型例子来理解鼠标和键盘事件的执行过程。

【教学内容】9.1 鼠标事件一、鼠标键参数在编写代码的过程中,当触发鼠标事件后,还需知道用户按下了哪个键,然后才能对其作出响应,这一过程就用到了Button参数。

该参数值表示按键的不同状态,具体如课本P175表9-1。

三键鼠标的Button值如下图所示: 4二、举例:【举例1】代码见课本P176所示。

通过该例子说明如下:(1)在MouseDown和MouseUp事件中,Button参数只能判断是否按下或松开某个键,而不能同时检查两个键被按下或松开,因此Button参数的取值只有三种,即十进制的1、2、4值。

(2)在MouseMove事件中,Button参数可判断按下了1 个或同时按下2 个、3个键。

【举例2】题目见课本P177所示。

讲解步骤:(培养学生的自学能力考虑)(1)学生操作;(2)老师解释。

9.2 鼠标光标一、光标形状属性MousePointer鼠标光标的形状是由MousePointer属性来决定的。

该属性可通过程序代码来设置,也可在相应的属性窗口来设置。

MousePointer的属性值取值及形状如课本P182表9-4所示。

二、设置鼠标光标形状属性1、通过属性窗口设置步骤如下:(1)选择需要设置鼠标光标的窗体或控件;(2)在属性窗口中设置MousePointer属性。

第10章 键盘与鼠标事件

第10章  键盘与鼠标事件

Private Sub Text1_KeyPress(KeyAscii As Integer) Static Pword As String Static Counter As Integer Static Numberoftries As Integer Numberoftries = Numberoftries + 1 If Numberoftries = 12 Then End Counter = Counter + 1 Pword = Pword + Chr$(KeyAscii) KeyAscii = 0 Text1.Text = String$(Counter, "*") If LCase$(Pword) = "abcd" Then Text1.Text = "" Pword = 0
(2)Shift:表示shift、 ctrl 、alt的状态。 (3) X、y:鼠标光标的当前位置。
10.3.1鼠标位置 鼠标位置由参数x、y确定。这里x、y不需要给出具体的数值,它 随鼠标光标在窗体上的移动而变化。当移动到某个位置时,如果压 下键,则产生MouseDown事件;若松开键,则产生MouseUp事件。 (x, y)通常指接收鼠标事件的窗体或控件上的坐标。 例10.3 用鼠标事件在窗体上画图
例10.1 利用窗体的KeyPress事件 显示用户的ASCII码值 步骤(1)新建一外窗体,将Form1的keypreview属性置为true (2)事件代码 Private Sub form_keypress(keyascii As Integer) Me.Print Chr(keyascii) & "->" & keyascii End Sub 每个ASCII(American Standard Code for Information American Interchange, 信息互换标准代码)码用一个字节表示. Interchange, 国信息互换标准代码)码用一 基本ASCII码的最高位为0,其范围为:二进制 00000000~01111111,十进制为0~127,十六进制为0~7F.用十 进制表示:0~31为控制字符,32~126为可显示字符、打印字符, 127为删除符。

键盘与鼠标响应设计

键盘与鼠标响应设计

资料:键盘消息:按键能产生两类消息
• 按键消息:
– 所有键的按下、放开,都能产生按键消息
• • • • • WM_KEYDOWN WM_KEYUP(例:ex6_3:在WM_KEYUP刷新) 参数意义P119 wParam:含有虚键码 lParam:第1-15位LOWOR(lParam)是一个键重复按 下的次数
实验任务一:测试习题6-3
3、语句: if(nUpKeyDown == TRUE) { //为何要画矩形?不画矩形有什么效果? Rectangle(hDC,0,0,300,200); TextOut(hDC,0,0,cUp,strlen(cUp)); nUpKeyDown = FALSE; } 请把观察的效果写出来. 4、请思考一下: 关于刷新与输出文本, 还能有其它处理方法吗? 如果你能写出另外的刷新方法,请把程序写出来。
– 当按下数字键时,显示文本“输入的是数字字 符:”+数字字符;如 输入的是数字字符:5 – 当按下+-*/%五种算术运算符时,显示文本“输 入算术运算符:” +运算符字符 – 当按下其它字符时,显示文本“输入其它字符”
提示:设计思路(两种方法,但不限于此) • 方法一设计说明:
– 在窗口函数开始处定义一组变量 //用于存储输出的提示性说明
实验任务二: 判断键盘输入字母、数字、运算符
• 以习题6-3为基础,使程序能对键盘输入的字母、 数字字符、算术运算符进行辨别并显示下列文本: – 当按下小写字母键时,显示文本“输入的是小写 字母:”+字母;如 输入的是小写字母:a
– 当按下大写字母键时,显示文本“输入的是大写 字母:”+字母;如 输入的是大写字母:M
• Home:右移 • End:左移
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

else if(e.getKeyChar()=='b'||e.getKeyChar()=='B') c=Color.blue;
else c=Color.black;
repaint(); }} public void paint(Graphics g) {
g.setColor(c); g.fillOval(60,60,100,100); } public static void main(String args[]){ new hh(); } }
(4)mouseExited(MouseEvent)方法,鼠标指针离开容器时, 接口监视器发现这个事件后自动调用这个方法。
new hh(); } }
10.2.3 键盘适配器类KeyAdapter
使用KeyListener接口时,即使有些方法不使用也必须在 程序中写出接口的所有方法,因此比较麻烦,而 java.awt.event.keyAdapter类本身就使用了KeyListener接口, 并对接口的三个方法增加了空方法体,因此使用keyAdapter 类时不必像使用接口那样实现所有方法,只需覆盖要响应的 键盘事件方法即可。
④事件监听器监听到事件后,会根据事件的类型调用相应的 事件处理方法。
事件源
产生事 件
事件 1
捕获事件
监视器1
事件 2
监视器2
图10-1 事件处理模型
事件处 理
事件处 理
1.java.awt.event包
(1)文本框回车、按钮单击、计时器、菜单项 引发动作事件:java.awt.event.ActionEvent 处理事件的接口:java.awt.event.ActionListener 接口中的方法:public void actionPerformed(ActionEvent event) (2)单选按钮、多选按钮、下拉列表 引发选项事件:java.awt.event.ItemEvent 处理事件的接口:java.awt.event.ItemListener 接口中的方法:public void itemStateChanged(ItemEvent event)
public void valueChanged(TreeSelectionEvent event)
(3)滑动杆(JSlider) 引发改变事件:java.swing.event.ChangeEvent 处理事件接口:java.swing.event.ChangeListener 接口中的方法:
public void stateChanged(ChangeEvent event)
JButton1=new JButton("请按M键!"); JButton1.addKeyListener(this); this.setSize(200,300); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jpanel1.add(JButton1); this.add(jpanel1); this.setVisible(true); }
(4)getClickCount()获取点击次数;
2.添加鼠标监视器的方法:public void addMouseListener()。
3.移去鼠标监视器的方法:public void removeMouseListener().
10.3.2 使用MouseListener接口处理鼠标事件
通过使用java.awt.event.MouseListener接口可以对鼠标事件进 行处理,它有以五个方法:
(1)mousePressed(MouseEvent)方法,按下鼠标时,接口 监视器发现这个事件后自动调用这个方法。
(2)mouseReleased(MouseEvent)方法,松开鼠标时,接口 监视器发现这个事件后自动调用这个方法。
(3)mouseEntered(MouseEvent)方法,鼠标指针进入容器时, 接口监视器发现这个事件后自动调用这个方法。
(3)键盘 引发动作事件:java.awt.event.KeyEvent 处理事件的接口:java.awt.event.KeyListener (4)鼠标 引发鼠标事件:java.awt.event.MouseEvent 处理事件的接口:java.awt.event.MouseListener 与java.awt.event.MouseMotionListener接口。
这个接口有三个方法: 1.keyPressed(KeyEvent e)响应按下键盘事件; 2.keyTyped(KeyEvent e)响应按下又松开键盘事件; 3.keyReleased(KeyEvent e)响应松开键盘事件; 它们都是public void方法,事件源要使用addKeyListener方 法添加监视器来获得事件。
【例10-1】对键盘事件进行响应。 import java.awt.event.*; import javax.swing.*; import java.awt.*; public class hh extends JFrame implements KeyListener{
JButton JButton1; hh(){ JPanel jpanel1=new JPanel();
2.java.swing.event包 (1)列表(JList) 引发列表选择事件:java.swing.event.ListSelectionEvent 处理事件接口:java.swing.event.ListSelectionListener 接口中的方法:
public void valueChanged(ListSelectionEvent event) (2)树(JTree) 引发树选择事件:java.swing.event.TreeSelectionEvent 处理事件接口:java.swing.event.TreeSelectionListener 接口中的方法:
10.2 任务二 掌握对键盘事件响应方法
10.2.1 键盘事件
当键盘按下、释放、点击时都会触发键盘事件 (java.awt.event.KeyEvent),常用的KeyEvent方法是 public int getKeyCode(),它用于获取所按下键的编码 值。
键盘事件类提供了很多静态常量表示键的编码值,如: V_UP 上箭头键的编码值 VK_1 键1的编码值 VK_ENTER 表示回车编码值 VK_SPACE 表示空格键编码值
更多的键码值可以查阅Java API文档来获得。 编写键盘事件响应程序时,使用语句 if(e.getKeyCode()==KeyEvent.VK_B)可以判断是否按下了字 母键B,然后做相应处理,语句中的e是事件处理时接收的键 盘事件对象参数名。
10.2.2 键盘监听接口KeyListener
对键盘事件可以通过java.awt.event.KeyListener接口中提 供的方法来处理。
监视器负责处理事件源发生的事件。监视器是个对象,为 了处理事件源发生的事件,监视器会自动调用一个方法来 处理事件。为了让监视器能对事件源发生的事件进行处理, 创建该监视器的类必须声明实现相应的接口,即必须在类 体中给出该接口中所有方法的方法体,这样在事件源发生
事件时,监视器就自动调用执行被类实现的某个接口方法
①若要保证一个组件产生的某种类型事件XXXEvent有效, 需要注册一个“事件监听器”监听它。用如下语句设置事件 监听器:
事件源.addXXXListener(XXXListener代表某种事件监听器)。
②组件作为事件源,不同类型的组件会产生特定类型的事件。
③一旦产生事件后,事件会被传送给已注册的一个或多个监 听器。事件监听器是实现了与该事件相对应的XXXListener 接口的类。
下面的程序是通过使用键盘适配器类来实现响应键盘事 件,当分别按“R”、“G”、“B”时将圆的颜色设置为 红色、绿色和蓝色。
【例10-2】 import java.awt.event.*; import javax.swing.*; import java.awt.*; public class hh extends JFrame{
10.3 任务三 掌握对鼠标事件的响应方法
10.3.1 鼠标事件
鼠标事件源各种动作可以触发鼠标事件,如按下鼠标、点击鼠 标、释放鼠标、鼠标进入和鼠标退出。鼠标事件类型是 java.awt.event.MouseEvent,当发生鼠标事件时 MouseEvent类自动创建一个鼠标事件对象。
1.MouseEvent类有几个常用的方法: (1)getX()用于获取鼠标x坐标 (2)getY()用于获取鼠标y坐标;
10.1.2 事件处理机制
Java采用“授权事件模型”(Event Delegation Model) 的事件处理模式。其原理为:事先定义多种事件类型 (即用户在GUI组件上进行的操作,如单击事件),当 用户对某个GUI组件进行操作时,可能触发相应的事件, 这个组件就是事件源。如果此组件注册了事件监听器 (可以通过addXXXXListener方法注册),事件被传 送给已注册的监听器,事件监听器负责处理事件的过程。 一个组件可以注册一个或多个监听器。
java.awt.AWTEvent类是所有事件类的父类。
2.事件源:能够产生事件的对象都可以称之为事件源,如 键盘、鼠标、按钮等。
3.事件处理方法:能够接收、解析处理事件类对象,实现 和用户交互的方法。它以事件对象为参数。
4.监视器:对事件源进行监视,使发生事件时做出处理的 一种特殊的对象。事件源通过调用相应的方法将某个对 象作为自己的监视器。
(3)getButton()用于获取鼠标的左中右键值;根据键值来知 道按的是哪一个键,MouseEvent.BUTTON1、 MouseEvent.BUTTON2和MouseEvent.BUTTON3分别是左 中右三个键值。例如在程序中通过 if(e.getButton()==MouseEvent.BUTTON1)可以判断按的是 否是左键。
相关文档
最新文档