MINIGUI输入模块代码文件分析
一、文件分析
1、ial.h输入抽象层相关的数据结构和宏定义
(1)对各类鼠标击键事件展开宏定义。
#defineial_mou_leftbutton4#defineial_mou_middlebutton2#defineial_mou_rightbutton1#defineial_mou_fourthbutton8#defineial_mou_fifthbutton16#defineial_mou_sixthbutton32
milkyway
#defineial_mou_retbutton64
(2)对鼠标事件和键盘事件进行宏定义。
#defineial_mouevent1
#defineial_keyevent2
(3)定义处置输出事件的结构体input
typedefstructtaginput{
char*id;
//initializationandtermination
bool(*init_input)(structtaginput*input,constchar*mdev,constchar*mtype);void(*term_input)(void);
//mouoperations
int(*update_mou)(void);void(*get_mou_xy)(int*x,int*y);void(*t_mou_xy)(intx,inty);int(*get_mou_button)(void);
void(*t_mou_range)(intminx,intminy,intmaxx,intmaxy);void(*suspend_mou)(void);int(*resume_mou)(void);
//keyboardoperations
int(*update_keyboard)(void);constchar*(*get_keyboard_state)(void);void(*suspend_keyboard)(void);int(*resume_keyboard)(void);void(*t_leds)(unsignedintleds);
int(*wait_event)(intwhich,intmaxfd,fd_t*in,fd_t*out,fd_t*except,structtimeval*timeout);
charmdev[max_path+1];}input;
(4)定义处置输出事件的函数。
#defineial_initinput(*__mg_cur_input->init_input)#defineial_terminput(*__mg_cur_input->term_input)#defineial_updatemou(*__mg_cur_input->update_mou)……
(5)声明输出抽象化层初始化函数和完结函数。
童声英文歌 intinitial(void);voidterminateial(void);
wbl
2、ial.c输出抽象化层有关函数
(1)根据定义的输入引擎include对应的头文件。
#ifdef_qvfb_ial#include\#endif……
(2)宏定义输入引擎的名称和类型字符长度。
#definelen_engine_name16#definelen_mtype_name16菊粉酶
(3)定义input数组inputs,存放支持的输入引擎的名称、初始化和终止函数。
猫和老鼠动画片下载 staticinputinputs[]={
#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)定义当前输出。
former什么意思
input*__mg_cur_input;
(5)赢得积极支持的输出引擎的个数即inputs数组涵盖的元素个数。
#definenr_inputs(sizeof(inputs)/sizeof(input))
(6)intinitial(void):同时实现输出抽象化层的初始化。
函数的主要作用:1获得当前输入引擎的参数,包括名称、路径、类型。
2挑选输出引擎:将__mg_cur_input指向当前采用的输出引擎的参数放置的地址:__mg_cur_input=inputs+i,或者设置为第一个输出引擎。
3根据获得的参数进行初始化:ial_initinput(__mg_cur_input,mdev,mtype)
(7)voidterminateial(void)
naive是什么意思 函数的主要作用:终止输入抽象层ial_terminput()
(8)定义了一系列鼠标校正函数
当定义了_misc_moucalibrate时启用这些函数
3、event.h输出事件有关的数据结构和宏定义
(1)定义鼠标移动事件结构体:
typedefstruct_mouevent{intevent;//命令事件类型intx;//鼠标的边线inty;
dwordstatus;//状态}mouevent;
typedefmouevent*pmouevent;
(2)宏定义不同的鼠标事件类型对应的数值:
#defineme_moved0x0000#defineme_leftmask0x000f#defineme_leftdown0x0001#defineme_leftup0x0002#defineme_leftdblclick0x0003#defineme_rightmask0x00f0#defineme_rightdown0x0010#defineme_rightup0x0020#defineme_rightdblclick0x0030#defineme_middlemask0x0f00#defineme_middledown0x0100#defineme_middleup0x0200#defineme_middledblclick0x0300#defineme_repeated0xf000
(3)定义键盘事件的结构体
typedefstruct_keyevent{intevent;//事件类型intscancode;//按键读取码dwordstatus;//状态信息
}keyevent;
typedefkeyevent*pkeyevent;
(4)宏定义不同的键盘事件类型对应的数值:
#defineke_keymask0x000f#defineke_keydown0x0001#defineke_keyup0x0002#defineke_keylongpress0x0004#defineke_keyalwayspress0x0008#defineke_syskeymask0x00f0#defineke_syskeydown0x0010#defineke_syskeyup0x0020
(5)定义底层事件数据类型的联合体:表示底层事件的类型可以为鼠标事件也可以为键盘事件。
typedefunion_lweventdata{moueventme;keyeventke;}lweventdata;
(6)定义底层事件结构体:
typedefstruct_lwevent{
inttype;//底层事件类型intcount;//发生时间dwordstatus;//状态lweventdatadata;//数据}lwevent;
typedeflwevent*plwevent;
ensure (7)宏定义三种底层事件的类型:
#definelwetype_timeout0#definelwetype_key1#definelwetype_mou2
(8)声明函数初始化顶层事件函数、终止底层事件函数和获得底层事件函数:
boolinitlwevent(void);voidterminatelwevent(void);
boolgetlwevent(intevent,plweventlwe);
(9)宏定义鼠标事件的有关参数
读者文摘txt下载 #definemoupara\#definemoupara_dblclicktime\#definedef_mc_dblclick300#defineeventpara\#defineeventpara_repeatuc\#defineeventpara_timeoutuc\
#definedef_uc_timeout300000#definedef_repeat_time50000#definedef_lpress_time500#definedef_apress_time1000#definedef_interval_time200
4、event.c输入事件相关函数