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

MINIGUI输入模块代码文件分析(5)

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

#define mgfd_set int

extern mgfd_set mg_rfdset; extern mgfd_set* mg_wfdset; extern mgfd_set* mg_efdset; extern int mg_maxfd; extern LISTEN_FD mg_listen_fds [];

13、listenfd.c

(1)定义文件描述符的相关变量

LISTEN_FD mg_listen_fds [MAX_NR_LISTEN_FD]; static mgfd_set _wfdset, _efdset; mgfd_set mg_rfdset;

mgfd_set* mg_wfdset = NULL; mgfd_set* mg_efdset = NULL; int mg_maxfd;

(2)BOOL GUIAPI RegisterListenFD (int fd, int type, HWND hwnd, void* context)

函数作用:注册文件描述符

BOOL GUIAPI RegisterListenFD (int fd, int type, HWND hwnd, void* context)

{ }

return TRUE;

(3)BOOL GUIAPI RegisterListenFD (int fd, int type, HWND hwnd, void* context)

函数作用:注销文件描述符

BOOL GUIAPI UnregisterListenFD (int fd) {

return TRUE; }

14、standalone.c

(1)SRVEVTHOOK GUIAPI SetServerEventHook (SRVEVTHOOK SrvEvtHook)

\\brief Sets an event hook in the server of MiniGUI-Processes.

(2)static void ParseEvent (PMSGQUEUE msg_que, int event)

函数作用:解析事件,将IAL类型的事件最终解析为对应的消息并加入消息队列中。

(3)BOOL GUIAPI StandAloneStartup (void)

函数作用: mg_maxfd = 0; #ifndef _NEWGAL_ENGINE_BF533 InstallIntervalTimer (); #endif

(4)void StandAloneCleanup (void)

函数作用:

#ifndef _NEWGAL_ENGINE_BF533

UninstallIntervalTimer (); #endif

(5)BOOL minigui_idle (void)

函数作用:return IdleHandler4StandAlone (__mg_dsk_msg_queue);

(6)BOOL IdleHandler4StandAlone (PMSGQUEUE msg_queue)

函数作用:standalone模式下的空闲处理函数

(1)获得文件描述符中输入事件类型:n = IAL_WaitEvent (IAL_MOUSEEVENT | IAL_KEYEVENT,mg_maxfd, &rset, wsetptr, esetptr, NULL); (2)对输入事件进行解析:

if (n & IAL_MOUSEEVENT) ParseEvent (msg_queue, IAL_MOUSEEVENT); if (n & IAL_KEYEVENT) ParseEvent (msg_queue, IAL_KEYEVENT);

if (n == 0) ParseEvent (msg_queue, 0)

(3)函数返回值为TRUE,表示有输入事件,返回值为FALSE,表示超时或者有错误发生。

15、keyboard.h

(1)宏定义

#define VC_XLATE 0x0000 /* translate keycodes using keymap */ #define VC_MEDIUMRAW 0x0001 /* medium raw (keycode) mode */ #define VC_RAW 0x0002 /* raw (scancode) mode */ #define VC_UNICODE 0x0004 /* Unicode mode */ #define VC_APPLIC 0x0010 /* application key mode */ #define VC_CKMODE 0x0020 /* cursor key mode */ #define VC_REPEAT 0x0040 /* keyboard repeat */

#define VC_CRLF 0x0080 /* 0 - enter sends CR, 1 - enter sends CRLF */

#define VC_META 0x0100 /* 0 - meta, 1 - meta=prefix with ESC */

(2)定义键盘信息数据结构

typedef struct _key_info {

DWORD kbd_mode; DWORD shiftstate; DWORD oldstate; int npadch; unsigned char diacr; int dead_key_next; unsigned char type; unsigned char buff[50]; int pos; } key_info;

(3)键盘分布信息数据结构及初始化数据结构:

typedef void (* INIT_KBD_LAYOUT) (ushort*** key_maps_p, struct kbdiacr** accent_table_p, unsigned int* accent_table_size_p, char*** func_table_p); typedef struct kbd_layout_info

{

char* name;

INIT_KBD_LAYOUT init; } kbd_layout_info;

(4)声明初始化默认键盘分布

16、keyboard.c(待分析。。。)

(1)static inline void put_queue (char ch, key_info* kinfo)

函数作用:将字符放入键盘缓存中。

kinfo->buff [kinfo->pos] = ch; kinfo->pos ++;

(2)static inline void puts_queue (char* cp, key_info* kinfo)

函数作用:将以cp为首地址的一串字符放入缓存中。

(3)static void applkey (int key, char mode, key_info* kinfo) (4)static void to_utf8 (ushort c, key_info* kinfo)

函数作用:将字符经过转化后放入缓存中。

(5)宏定义连接符

#define A_GRAVE '`' #define A_ACUTE '\\'' #define A_CFLEX '^' #define A_TILDE '~' #define A_DIAER '\ #define A_CEDIL ','

(6)定义连接符数组

static unsigned char ret_diacr[NR_DEAD] = {A_GRAVE, A_ACUTE, A_CFLEX, A_TILDE, A_DIAER, A_CEDIL };

(7)static unsigned char handle_diacr (unsigned char ch, key_info* kinfo)

函数作用:对连接符进行处理。

二、数据结构解析

1、鼠标移动事件数据结构

typedef struct _MOUSEEVENT {

int event; //事件标识符,代表不同的鼠标事件ME_* int x; //鼠标的位置 int y;

DWORD status; //状态信息 }MOUSEEVENT;

typedef MOUSEEVENT* PMOUSEEVENT;

2、键盘事件的数据结构

typedef struct _KEYEVENT {

int event; //事件标识符,代表不同的键盘事件KE_* int scancode; //按键扫描码 DWORD status; //状态信息 }KEYEVENT;

typedef KEYEVENT* PKEYEVENT;

3、底层事件的数据结构

(1)底层事件的数据:

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

(2)底层事件:

typedef struct _LWEVENT {

int type; //底层事件标识符,KE_*| ME_* int count; //发生时间 DWORD status; //状态

LWEVENTDATA data; //数据,当event为KE_*时,data为KEYEVENT,当event为ME_*时,

//data为MOUSEEVENT

}LWEVENT;

typedef LWEVENT* PLWEVENT;

4、输入引擎相关的数据结构:

(1)输入引擎处理函数:

typedef struct tagINPUT {

char* id; //标识符,输入引擎的名称

// 输入初始化和终止函数

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

// 鼠标操作

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);

// 键盘操作

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;

(2)输入引擎的键盘数据结构:

struct QVFbKeyData {

unsigned int unicode; unsigned int modifiers; BYTE press; BYTE repeat; };

5、消息相关数据结构:

(1)消息数据结构:

typedef struct _MSG {

HWND hwnd; //消息所属的窗口句柄

int message; //消息标识符MS_*

WPARAM wParam; //消息的第一个参数,32位整型 LPARAM lParam;//消息的第二个参数,32位整型 unsigned int time;//消息发生时间 #ifndef _LITE_VERSION

void* pAdd; //附加数据 #endif } MSG;

typedef MSG* PMSG;

(2)消息链表数据结构:

typedef struct _QMSG {

MSG Msg; //当前消息 struct _QMSG* next; //下一条消息 }QMSG;

typedef QMSG* PQMSG;

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

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