77范文网 - 专业文章范例文档资料分享平台

MINIGUI输入模块代码文件分析

来源:网络收集 时间:2019-04-09 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

一、文件分析

1、ial.h输入抽象层相关的数据结构和宏定义

(1)对各类鼠标击键事件进行宏定义。

#define IAL_MOUSE_LEFTBUTTON 4 #define IAL_MOUSE_MIDDLEBUTTON 2 #define IAL_MOUSE_RIGHTBUTTON 1 #define IAL_MOUSE_FOURTHBUTTON 8 #define IAL_MOUSE_FIFTHBUTTON 16 #define IAL_MOUSE_SIXTHBUTTON 32

#define IAL_MOUSE_RESETBUTTON 64

(2)对鼠标事件和键盘事件进行宏定义。

#define IAL_MOUSEEVENT 1

#define IAL_KEYEVENT 2

(3)定义处理输入事件的结构体INPUT

typedef struct tagINPUT {

char* id;

// Initialization and termination

BOOL (*init_input) (struct tagINPUT *input, const char* mdev, const char* mtype); void (*term_input) (void);

// Mouse operations

int (*update_mouse) (void); void (*get_mouse_xy) (int* x, int* y); void (*set_mouse_xy) (int x, int y); int (*get_mouse_button) (void);

void (*set_mouse_range) (int minx, int miny, int maxx, int maxy); void (*suspend_mouse) (void); int (*resume_mouse) (void);

// Keyboard operations

int (*update_keyboard) (void); const char* (*get_keyboard_state) (void); void (*suspend_keyboard) (void); int (*resume_keyboard) (void); void (*set_leds) (unsigned int leds);

int (*wait_event) (int which, int maxfd, fd_set *in, fd_set *out,fd_set *except, struct timeval *timeout);

char mdev [MAX_PATH + 1]; }INPUT;

(4)定义处理输入事件的函数。

#define IAL_InitInput (*__mg_cur_input->init_input) #define IAL_TermInput (*__mg_cur_input->term_input) #define IAL_UpdateMouse (*__mg_cur_input->update_mouse) ……

(5)声明输入抽象层初始化函数和结束函数。

int InitIAL (void); void TerminateIAL (void);

2、ial.c输入抽象层相关函数

(1)根据定义的输入引擎include对应的头文件。

#ifdef _QVFB_IAL #include \ #endif ……

(2)宏定义输入引擎的名称和类型字符长度。

#define LEN_ENGINE_NAME 16 #define LEN_MTYPE_NAME 16

(3)定义INPUT数组inputs,存放支持的输入引擎的名称、初始化和终止函数。

static INPUT inputs [] = {

#ifdef _DUMMY_IAL

{\, InitDummyInput, TermDummyInput}, #endif

#ifdef _AUTO_IAL

{\, InitAutoInput, TermAutoInput}, #ifdef _QVFB_IAL

{\, InitQVFBInput, TermQVFBInput}, #endif ……

#ifdef _TFSTB_IAL

{\, InitTFSTBInput, TermTFSTBInput}, #endif

#ifdef _HI3610_IAL

{\, InitHI3610Input, TermHI3610Input}, #endif };

(4)定义当前输入。

INPUT* __mg_cur_input;

(5)获得支持的输入引擎的个数即inputs数组包含的元素个数。

#define NR_INPUTS (sizeof (inputs) / sizeof (INPUT))

(6)int InitIAL (void):实现输入抽象层的初始化。

函数的主要作用: 1 获得当前输入引擎的参数,包括名称、路径、类型。

2 选择输入引擎:将__mg_cur_input指向当前使用的输入引擎的参数存放的地址:__mg_cur_input = inputs + i,或者设置为第一个输入引擎。

3 根据获得的参数进行初始化:IAL_InitInput (__mg_cur_input, mdev, mtype)

(7)void TerminateIAL (void)

函数的主要作用:终止输入抽象层 IAL_TermInput ()

(8)定义了一系列鼠标校正函数

当定义了_MISC_MOUSECALIBRATE时启用这些函数

3、event.h输入事件相关的数据结构和宏定义

(1)定义鼠标移动事件结构体:

typedef struct _MOUSEEVENT { int event; //指示事件类型 int x; //鼠标的位置 int y;

DWORD status; //状态 }MOUSEEVENT;

typedef MOUSEEVENT* PMOUSEEVENT;

(2)宏定义不同的鼠标事件类型对应的数值:

#define ME_MOVED 0x0000 #define ME_LEFTMASK 0x000F #define ME_LEFTDOWN 0x0001 #define ME_LEFTUP 0x0002 #define ME_LEFTDBLCLICK 0x0003 #define ME_RIGHTMASK 0x00F0 #define ME_RIGHTDOWN 0x0010 #define ME_RIGHTUP 0x0020 #define ME_RIGHTDBLCLICK 0x0030 #define ME_MIDDLEMASK 0x0F00 #define ME_MIDDLEDOWN 0x0100 #define ME_MIDDLEUP 0x0200 #define ME_MIDDLEDBLCLICK 0x0300 #define ME_REPEATED 0xF000

(3)定义键盘事件的结构体

typedef struct _KEYEVENT { int event; //事件类型 int scancode; //按键扫描码 DWORD status; //状态信息

}KEYEVENT;

typedef KEYEVENT* PKEYEVENT;

(4)宏定义不同的键盘事件类型对应的数值:

#define KE_KEYMASK 0x000F #define KE_KEYDOWN 0x0001 #define KE_KEYUP 0x0002 #define KE_KEYLONGPRESS 0x0004 #define KE_KEYALWAYSPRESS 0x0008 #define KE_SYSKEYMASK 0x00F0 #define KE_SYSKEYDOWN 0x0010 #define KE_SYSKEYUP 0x0020

(5)定义底层事件数据类型的联合体:表示底层事件的类型可以为鼠标事件也可以为键盘事件。

typedef union _LWEVENTDATA { MOUSEEVENT me; KEYEVENT ke; }LWEVENTDATA;

(6)定义底层事件结构体:

typedef struct _LWEVENT {

int type; //底层事件类型 int count; //发生时间 DWORD status; //状态 LWEVENTDATA data; //数据 }LWEVENT;

typedef LWEVENT* PLWEVENT;

(7)宏定义三种底层事件的类型:

#define LWETYPE_TIMEOUT 0 #define LWETYPE_KEY 1 #define LWETYPE_MOUSE 2

(8)声明函数初始化顶层事件函数、终止底层事件函数和获得底层事件函数:

BOOL InitLWEvent (void); void TerminateLWEvent (void);

BOOL GetLWEvent (int event, PLWEVENT lwe);

(9)宏定义鼠标事件的相关参数

#define MOUSEPARA \ #define MOUSEPARA_DBLCLICKTIME \ #define DEF_MSEC_DBLCLICK 300 #define EVENTPARA \ #define EVENTPARA_REPEATUSEC \ #define EVENTPARA_TIMEOUTUSEC \

#define DEF_USEC_TIMEOUT 300000 #define DEF_REPEAT_TIME 50000 #define DEF_LPRESS_TIME 500 #define DEF_APRESS_TIME 1000 #define DEF_INTERVAL_TIME 200

4、event.c输入事件相关函数

(1)static void GetDblclickTime(void)

函数作用:获得鼠标双击最大时间间隔dblclicktime

(2)static void GetTimeout (void)

函数作用:获得超时时间timeoutusec和repeatusec

(3)定义并初始化鼠标事件参数

static int oldbutton = 0; static unsigned int time1; static unsigned int time2;

(4)定义并初始化键盘事件参数

static unsigned int ke_time;

static unsigned char oldkeystate [MGUI_NR_KEYS + 1]; static unsigned char olddownkey = 0; static DWORD status;

static int alt1 = 0; /* left alt key state */ static int alt2 = 0; /* right alt key state */ static int capslock = 0; /* caps lock key state */ static int esc = 0; /* escape scan code detected? */ static int caps_off = 1; /* 1 = normal position, 0 = depressed */ static int numlock = 0; /* number lock key state */

static int num_off = 1; /* 1 = normal position, 0 = depressed */ static int slock = 0; /* scroll lock key state */

static int slock_off = 1; /* 1 = normal position, 0 = depressed */ static int control1 = 0; /* left control key state */ static int control2 = 0; /* right control key state */ static int shift1 = 0; /* left shift key state */ static int shift2 = 0; /* left shift key state */

(5)static void ResetMouseEvent(void)reset鼠标事件

static void ResetMouseEvent(void){ oldbutton = 0; time1 = 0;

time2 = 0;

(6)static void ResetKeyEvent(void)重置键盘事件

static void ResetKeyEvent(void)

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库MINIGUI输入模块代码文件分析在线全文阅读。

MINIGUI输入模块代码文件分析.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/583185.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: