一、文件分析
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输入模块代码文件分析在线全文阅读。
相关推荐: