键盘和鼠标事件
- 格式:ppt
- 大小:189.00 KB
- 文档页数:52


#include
#include "SysHook.h"
#include
HINSTANCEhInst = NULL;
JavaVM * jvm = NULL;
jobject hookObj_kb = NULL;
jobject hookObj_ms = NULL;
jobject g_kl = NULL;
jmethodID processKeyID_kb = NULL;
jmethodID processKeyID_ms = NULL;
DWORDhookThreadId = 0;
LONGg_mouseLocX = -1;// x-location of mouse position
LONGg_mouseLocY = -1;// y-location of mouse position
extern"C"
BOOLAPIENTRY DllMain(HINSTANCE_hInst,DWORDreason,LPVOIDreserved)
{
switch(reason)
{
caseDLL_PROCESS_ATTACH:
printf("C++: DllMain - DLL_PROCESS_ATTACH.\n");
hInst = _hInst;
break;
default:
break;
}
returnTRUE;
}
LRESULTCALLBACK MouseTracker(intnCode,WPARAMwParam,LPARAMlParam)
{
JNIEnv * env;
KBDLLHOOKSTRUCT * p = (KBDLLHOOKSTRUCT *)lParam;
if(jvm->AttachCurrentThread((void**)&env, NULL) >= 0)
{
if(nCode==HC_ACTION)
{
MOUSEHOOKSTRUCT* pStruct = (MOUSEHOOKSTRUCT*)lParam;
第八章 键盘与鼠标操作 (2w)
程序在运行过程中,经常需要知道用户对键盘和鼠标的具体操作,例如用户按下键盘上的“A”键时是想输入字符“A”还是输入“a”呢,当用户利用鼠标选中“删除”时是想彻底删除还是想放入回收站呢等等,以便于根据不同的情况,执行不同的具体操作。为此Visual Basic专门定义了和键盘与鼠标有关的事件和方法。
8-1键盘操作
当我们敲击一下键盘上的某个按键时,将会先后触发对应对象的KeyDown、KeyPress、(对于文本框之类的对象还会触发Change)、KeyUp等一系列事件。根据不同的具体应用,我们可以选择不同的事件进行编程。
需要说明的是,对键盘的某个按键进行操作时,触发的是目前具有输入焦点(Focus)对象的事件。一般情况下窗体对象不响应这些事件,除非满足下面几个条件:
1. 目前窗体上没有添加任何对象,则窗体接收键盘事件。
2. 目前窗体上有对象,但是它们属于下面两种情况:
1) 这类对象不具有接收焦点的能力,例如:标签、框架、形状(Shape)、Timer、Image等等
2) 这类对象本来可以接收焦点(例如:文本框),但目前处于Disabled状态。
3. 窗体的KeyPreview属性为True。所谓KeyPreview的属性为True,就是说无论在窗体内的什么控件内利用键盘输入,都需要事先经过窗体进行检查。
其中,前两种情况下只触发窗体的KeyDown、KeyPress、KeyUp事件,第三种情况下将先后触发窗体的KeyDown、控件的KeyDown、窗体的KeyPress、控件的KeyPress、窗体的KeyUp、控件的KeyUp事件。
8-1-1 KeyPress事件
KeyPress事件过程的的形式有两种:
Private Sub 对象名_KeyPress(KeyAscii As Integer) '用于非控件数组
Private Sub 对象名_KeyPress(Index As Integer, KeyAscii As Integer) '用于控件数组
javascript⿏标及键盘事件总结及案例
⼀、⿏标事件
1、单击事件
box.onclick
2、双击事件(双击时也会触发单击)
box.ondblonclick
3、⿏标右键
box.oncontextmenu=function(){
console.log('右键事件');
//取消⿏标的默认事件
return false;
}
4、按下|移动|抬起|⿏标悬浮|⿏标移开|⿏标右键
onmousedown ⿏标按下
onmousemove ⿏标移动
onmouseup ⿏标抬起
onmouseover ⿏标悬浮
onmouserout ⿏标移开(从⽗集移⾄⼦集,触发out事件,紧接着触发⼦集的over事件,并可以冒泡给⽗集(触发⽗集的over))
oncontextmenu ⿏标右键
onmouseenter ⿏标悬浮()
onmouseleave ⿏标移开(leave默认⼦集是⽗集的⼀部分,所以从⼦集移到⽗集不会触发,enter事件也不会触发)
enter:⽗集enter ⼦集enter (不⽀持冒泡)
over:⼦集over ⽗集over(想当于⼦集冒泡给⽗集) (⽀持冒泡)
总结: 将⽗集和⾃⼰分开考虑盒⼦的悬浮离开事件,⽤over | out组合;
将⼦集纳⼊⽗集的考虑当中,只考虑⽗集的相应悬浮离开事件,采⽤ enter | leave组合;
单独考虑⼀个盒⼦的悬浮离开事件,都可以使⽤
⼆、js的盒模型
1、应⽤
==>100px
2、数字字符转换
var a="1213124"
//转化成整型
a=+a//如果待单位会转化成NaN
a=parseInt(a)
//字符的切割
a.substr(0,3)==>123 //从0往后取3个单位
a.slice(0,2)==>12 //从0取到2,前取后不取
3、获取padding
三、⿏标事件的拖拽案例
1.v1版本
2、⿏标拖拽事件v2版本
四、键盘事件
1、键盘按下事件(键盘按下会⼀直触发事件)
2、键盘按下移动盒模型案例
第四节 键盘和鼠标使用技巧
一、响应键盘事件
VB提供了3种键盘事件,即:
KeyDown事件:按下键盘上的任意键
KeyUp事件:释放键盘的任意键
KeyPress事件:按下对应某ASCII字符的键
1、焦点处理 :只有获得焦点的窗体或控件才能够接受键盘事件,所以在处理键盘事件前,应该首先对焦点进行处理。
设置控件焦点主要有两种方法:
在程序运行时通过鼠标选择操作或控件的SetFocus 方法实现
在程序设计阶段预先设置控件的TabIndex属性,然后在运行期通过按Tab键实现控件焦点的移动。
(1)SetFocus方法:控件名.SetFocus
(2)利用Tab键控制:在程序运行时通过Tab健使焦点按TabIndex的值,从小到大切换。
2、KeyDown事件和KeyUp事件
按下键盘上的任意一个键,就会引发当前具有焦点的对象的KeyDown事件。释放时,则会引发该对象的KeyUp事件。
①Keycode参数
KeyCode参数是一个整数,返回所按键的键码值。键码值是以“键”为准。例如,由于大写字母和小写字母使用同一键,因此“A”和“a”的键码值是相同的。又如大键盘上的数字“1”和小建盘上的数字“1”,虽然是同一数字,但由于键不同,它们的键码值也不相同。
②Shift参数
Shift参数是一个整数值,返回Shift、Ctrl、Alt的状态。只有检查此状态才能判断输入的是大写还是小写字母。
Shift参数用来判断是否按下了键盘上的Shift、Ctrl和Alt,或这3个键的任意组合,其对应的关系如表4-2所示: 表中Shift的取值和Shift、Ctrl和Alt组合状态的对应关系 。
表4-2
符号常数 Shift的取值 Shift、Ctrl和Alt组合状态
- 0 三个键都没有
VbShiftMask 1 按下Shift键