⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gbinput.h

📁 某中文手写输入法公司的手写识别输入的实例源程序。
💻 H
字号:
#ifndef	_GBINPUT_H_#define _GBINPUT_H_#if !defined(WIN32) && !defined(_WIN32_WCE)#include "gbwchar.h"#endif#include "GBMMI.h"#include "GBfunc_def.h"#include "GBfunc_def_priv.h"#ifndef __GB_TYPE__#define __GB_TYPE__/*typedef const void *                GBCPVOID;typedef void *                      GBPVOID;typedef int                         GBINT;typedef unsigned int                GBUINT;typedef unsigned short              GBUINT16;typedef long                        GBINT32;*/typedef long                        GBLONG;typedef unsigned long               GBULONG;/*typedef unsigned long               GBUINT32;*//*typedef unsigned char               GBBYTE;*//*#ifndef DEFINED_GBCHARtypedef char                        GBCHAR;#endif*//*typedef unsigned char               GBUINT8;*/typedef char *                      GBPSTR;typedef const char *                GBPCSTR;typedef unsigned short *            GBPWSTR;/*typedef const unsigned short *      GBCPWSTR;*//*typedef unsigned char 				GBBOOL8;typedef unsigned long				GBBOOL;*/#endif/**@brief 中间层定义的输入法模式 */typedef enum  {    GBIMNull = 0,/**< 空 */    GBPinYin,/**< 拼音输入法 */    GBStroke,/**< 笔画输入法 */    GBYinStroke,/**< 组合输入法 */    GBSmartLatin,/**< 智能英文输入法 */    GBCharacter,/**< 字母输入法 */	GBNumber,/**< 数字输入法 */  GBKorean#ifdef DIFF_CAPITAL	,	GBCAPITALCharacter,	GBLOWERCASECharacter#endif	,	GBCangJie} GBInputMode;#ifdef __GB_CHINESE_ENGINE__/**@brief 中文引擎初始化数据 */typedef struct __tag_gb_chn_engine_init_data {#ifdef _C166    const void _huge *              pEngineData; /**< 中文引擎的数据地址 */    void _huge *                    pSelfMadeData; /**< 中文自造词以及调频数据地址,以byte为单位 */			const void _huge *				pDialectData; /**< 方言数据指针 */	#else	GBCPVOID						pEngineData;/**< 中文引擎的数据地址 */    GBPVOID                         pSelfMadeData; /**< 中文自造词以及调频数据地址,以byte为单位 */	GBCPVOID						pDialectData;#endif// _C166    GBUINT32                        nSelfMadeDataLength; /**< 中文自造词以及调频数据的长度 */    int								nInputMethod; /**< 初始的中文输入模式 */    GBINT                           nCandDesireLenInWord; /**< 中文候选字词的字数和 */    GBINT                           nInterpunctionDesireLen; /**< 中文候选标点个数 */#if EBD_USE_DESIRE_COUNT >0		GBINT nCandDesireCount;#endif    fpEBShDataUpdate                fpOnSelfMadeDataChanged; /**< 中文自造词以及调频数据更新通知函数 */    GBINT							reserved[9];/** 预留 */} GBChnEngineInitData;  #endif#ifdef __GB_LATIN_ENGINE__	/**@brief 拉丁引擎初始化数据 */typedef struct __tag_gb_lt_engine_init_data {#ifdef _C166    const void _huge *              pEngineData; /**< 英文引擎的数据 */	void _huge *					pSelfMadeData; /**< 英文自造词以及调频数据地址 */#else    GBCPVOID                        pEngineData; /**< 英文引擎的数据 */    GBPVOID                         pSelfMadeData; /**< 英文自造词以及调频数据地址 */	#endif    GBUINT32                        nSelfMadeDataLength; /**< 自造词以及调频数据长度,以byte为单位 */    GBINT                           nCandDesireLenInWord;/**< 英文候选词语的长度之和的最大值 */    GBINT                           nCandDesireCountInWord;/**< 英文候选词语的个数的最大值 */    fpUpdateSelfHelpData            fpOnSelfMadeDataChanged;/**< 英文自造词以及调频数据更新通知函数 */    GBINT							reserved[10];/** 预留 */} GBLtEngineInitData;#endif/**@brief 国笔输入法设置数据 */typedef struct __tag_gb_setting {    GBBOOL8                         bUseLongPhress;/**< 是否使用长按 */    GBBOOL8                         bUpNumber;/**< 数字无切换上屏 */#if defined(__GB_CHINESE_ENGINE__) && defined(__GB_LATIN_ENGINE__)    GBBOOL8                         bChnEnConvert;/**< 中英无切换输入 */#endif    GBBOOL8                         reserved[13];/** 预留 */} GBSetting;typedef struct __tag_GBIME_INIT {#ifdef __GB_CHINESE_ENGINE__    GBChnEngineInitData				gbChnEngineInit;	#endif#ifdef __GB_LATIN_ENGINE__    GBLtEngineInitData				gbLtEngineInit;	#endif    GBSetting                       gbSetting;    GBINT32                         reserved[4];} GBIME_INIT;//#define _SHOW_DEBUG#define CANDNUM_APAGE_CHARIM	8#define MESSAGE_MAX_LENGTH 33#define MAX_UPSCREEN  32   /**@brief 最大上屏字的长度 *//**@brief 按键1 */#define GB_VK1 '1'/**@brief 按键2 */#define	GB_VK2 '2' /**@brief 按键3 */#define	GB_VK3 '3'/**@brief 按键4 */#define	GB_VK4 '4'/**@brief 按键5 */#define	GB_VK5 '5'/**@brief 按键6 */#define	GB_VK6 '6'/**@brief 按键7 */#define	GB_VK7 '7'/**@brief 按键8 */ #define	GB_VK8 '8' /**@brief 按键9 */#define	GB_VK9 '9'/**@brief 按键0 */ #define	GB_VK0 '0' /**@brief 长按1 */#define GB_VK1L (1024+6)/**@brief 长按2 */ #define	GB_VK2L (1024+7)/**@brief 长按3 */ #define	GB_VK3L (1024+8) /**@brief 长按4 */#define	GB_VK4L (1024+9) /**@brief 长按5 */#define	GB_VK5L (1024+10)/**@brief 长按6 */ #define	GB_VK6L (1024+11) /**@brief 长按7 */#define	GB_VK7L (1024+12)/**@brief 长按8 */ #define	GB_VK8L (1024+13) /**@brief 长按9 */#define	GB_VK9L (1024+14) /**@brief 长按0 */#define	GB_VK0L (1024+15) #ifndef _SHOW_DEBUG/**@brief 按键OK */#define GB_VK_OK		(1024+16) #define GB_VK_RETURN	(1024+17) /**@brief 返回键 */#define GB_VK_BACK		(1024+18) /**@brief 向上键 */#define GB_VK_UP		(1024+19) /**@brief 向下键 */#define GB_VK_DOWN		(1024+20)/**@brief 左键 */#define GB_VK_LEFT		(1024+21) /**@brief 右键 */#define GB_VK_RIGHT	    (1024+22) /**@brief 在触摸屏底下,按该键可以将候选向前翻页 */#define GB_VK_PAGE_UP   (1024 + 23) /**@brief 在触摸屏底下,按该键可以将候选向后翻页 */#define GB_VK_PAGE_DOWN   (1024 + 24)/**@brief 在触摸屏底下,按该键可以将候选向上翻页 */#define GB_VK_TUCHSCREEN_UP   (1024 + 25)/**@brief 在触摸屏底下,按该键可以将候选向下翻页 */#define GB_VK_TUCHSCREEN_DOWN   (1024 + 26)/**@brief 判断候选是否能向下翻页 */#define GB_VK_CAND_CAN_PAGEDOWN (1024 + 27)/**@brief 判断候选是否能向上翻页 */#define GB_VK_CAND_CAN_PAGEUP   (1024 + 28)/**@brief 作为特殊的通配符键 */#define GB_VK_WILD_CHAR       (1024 + 29)  //kaven 2007.12.05#define GB_VK_THAISTAR        (1024 + 30)   // add by lzl 2008.03.13#define GB_VK_THAISHARP       (1024 + 31)   // add by lzl 2008.03.13/**@brief #键 */#define GB_VK_SHARP	'#' /**@brief *键 */#define GB_VK_STAR		'*' /**@brief .键 */#define GB_VK_DOT		'.' #define GB_VK_AT		'@'#endif/**@brief 设置拼音音节和数字区的屏幕宽度 */#define CFG_SYLLABLE_WTH			(2048+1)/**@brief 设置系统相关的字符串宽度的回调函数 */ #define CFG_GETSTREXTENT_FUNC		(2048+2) /**@brief 初试化引擎操作 */#define CFG_INITENGINE				(2048+3) /**@brief 设置活动的输入法 */#define CFG_SETACTIVEIM				(2048+4) /**@brief 重置活动的输入法 */#define CFG_RESETACTIVEIM			(2048+5) /**@brief 设置是否可改变输入法 */#define CFG_ISCANCHANGEIM			(2048+6) /**@brief 设置显示的拼音音节间的间隔宽度 */#define CFG_SYLLABLE_SPLIT			(2048+7) /**@brief 设置只能输入中文 */#define CFG_SETCHINESE_LIMIT		(2048+8) /**@brief 设置只能输入英文 */#define CFG_SETENGLISH_LIMIT		(2048+9)/**@brief 设置系统相关的UNICODE字符串宽度的回调函数 */#define CFG_GETWSTREXTENT_FUNC		(2048+10) #define CFG_GET_ASSOCIATE			(2048+11)#define CFG_SET_SYLLABLE_INDEX		(2048 + 12)#define CFG_GET_SYLLABLE_NEXTPAGE	(2048 + 13)#define CFG_GET_SYLLABLE_PREVPAGE	(2048 + 14)struct GBIM{	unsigned char indentifyName;		void *pIS;	struct GBIM *pSwitchItem;	unsigned char status;	void (*GBIMOnUp)(struct GBIM *p,void *param);	void (*GBIMOnDown)(struct GBIM *p,void *param);	void (*GBIMOnLeft)(struct GBIM *p,void *param);	void (*GBIMOnRight)(struct GBIM *p,void *param);	void (*GBIMOnNumS)(struct GBIM *p,void *param,int realkey);	void (*GBIMOnNumL)(struct GBIM *p,void *param,int realkey);	void (*GBIMOnBlank)(struct GBIM *p,void *param);	void (*GBIMOnBack)(struct GBIM *p,void *param);	void (*GBIMSwitchIM)(struct GBIM *p,void *param);	void (*GBIMReset)(struct GBIM *p,void *param);	void (*GBIMDelete)(struct GBIM *p,void *param);	void (*GBIMInit)(struct GBIM *p,void *param);	void (*GBIMPrepareShowMessage)(struct GBIM *p,void *param);	int (*GBIMCanPageUp)(struct GBIM *p,void *param);	int (*GBIMCanPageDown)(struct GBIM *p,void *param);	int (*GBIMCanPrevHeader)(struct GBIM *p,void *param);	int (*GBIMCanNextHeader)(struct GBIM *p,void *param);		void (*GBIMOnStar)(struct GBIM *p,void *param);#ifdef _SHOW_DEBUG	void (*GBIMDisplay)(struct GBIM *p,void *param);#endif	void (*GBIMOnSharp)(struct GBIM *p,void *param);	void (*GBIMOnReturn)(struct GBIM *p,void *param);#if __GB_TOUCH_SCREEN__ > 0	void (*GBIMOnPageUp)(struct GBIM *p,void *param);  //gjx 2007.07.21	void (*GBIMOnPageDown)(struct GBIM *p,void *param);  //gjx 2007.07.21	void (*GBIMOnTScPageUp)(struct GBIM *p,void *param);  //gjx 2007.07.23	void (*GBIMOnTScPageDown)(struct GBIM *p,void *param);  //gjx 2007.07.23#endif};typedef struct GBIM GBIM;#if LATIN_ENCODE_LENGTH == 2	#define MAX_INPUTLTH			32#else	#define MAX_INPUTLTH			64#endif#define MAX_COMPLTH				5#define MAX_SYLLABLELTH			10typedef long (*pfGetStrLth_T)(const char *pstr);typedef long (*pfGetWStrLth_T)(const unsigned short *pwstr);/**@brief 与MMI层交互结构体 */typedef struct{	GBIM*			GBIMS;/**< 指向活动输入法 */	int 			activeIM;/**< 当前输入法类型所属数组的索引 */	int				prevIM;/**< 前一输入法类型所属数组的索引 */	GBInputMode		activeMode;/**< 活动的输入法 */	GBSetting		gbSet;/**< MMI需要传入的数据指针和配置的结构 */	int				isShowCandWin;/**< 当前候选窗口的显示状态 */	int				isSelectedCand;/**< 当前是否选中候选字 */	int				isCanChangeIM;/**< 当前是否可以修改输入法 */	int				isChineseOnly;/**< 当前是否只能输入汉字 */		int				isEnglishOnly;/**< 当前是否只能输入英文 */	int				isCandHelpTips;/**< 当前是否显示帮助文本 */	int				noHandleKeyEvent;/**< 输入法引擎是否处理(内部使用) */	int				shouldUpScreen;/**< 当前是否应该上屏*/	int				option;/**< 智能英文候选输出格式 */	pfGetStrLth_T 	pfGetStrLth;/**< 系统相关的字符串宽度的回调函数 */	pfGetWStrLth_T 	pfGetWStrLth;/**< 系统相关的字符串宽度的回调函数 */	unsigned short 	upscreenStr[MAX_UPSCREEN + 1];/**< shouldUpScreen为真时,存放需要上屏的字符串 */	int	  			upscreenLen ;/**< shouldUpScreen为真时,存放需要上屏的字的个数 */	GBCHAR 			fullOutput[MAX_INPUTLTH + 1];/**< 数字区内码串 */#ifdef __GB_CHINESE_ENGINE__	int				syllableAreaWth;/**< 拼音音节和数字区的屏幕宽度 */	int				syllableSplit;/**< 显示的拼音音节间的间隔宽度 */		char 			stroke[MAX_INPUTLTH*2];/**< 笔画区内码串 */	unsigned short 	components[MAX_COMPLTH];/**< 部首区内码串 */	int 			componentsLth;/**< 部首个数	 */	int 			syllableSelIndex;/**< 拼音音节的索引,为0时表示当前选中数字区 */	char*			syllable[MAX_SYLLABLELTH];/**< 拼音音节 */	int 			syllableNum;/**< 拼音音节的个数 */	//#if __GB_BBK_SINGLE_SYLLABLE__>0  del by lzl 2008.08.01	unsigned char   isSylLeftArrow;     //  判断是否能左移音节	unsigned char   isSylRightArrow;    //  判断是否能右移音节//#endif#endif	int 			selectIndex;/**< 当前选择的候选字词的索引 */	unsigned short  cands[10][MESSAGE_MAX_LENGTH];/**< 候选字词 */	int 			candsNum;/**< 候选字词的个数 */#ifdef __GBSHDATA	#if LATIN_ENCODE_LENGTH == 2		unsigned short okToBeginMakeWordStr[__GB_MAX_SH]; 		unsigned short okToAddMakeWordStr[__GB_MAX_SH]; 	#endif#endif#if __GB_CHN_CAND_PAGE_INFO__>0	//add this to get the candidate info in chinese mode.	unsigned short  chnPageCount;	unsigned short  chnPageIndex;#endif		#if __GB_EN_SELMAKE_STATUS__>0	unsigned char                          enSelmakStatus;	unsigned char                          reserved;#endif	//Sam Ding,determine to show syllable directed arrow or not.	unsigned char                          syllableCanSwitch;	unsigned char                          reserved2;		}GBIMWT;#if __GB_OPTIMIZE_FULLOUTPUT__>0/**@to hold the immediate buffer for the gb_mmiglobal*/typedef struct optimizFullOutput{	unsigned short isFullOutputOptimize;	GBCHAR optimizeStr[MAX_INPUTLTH + 1];}OptimizeFullOutput;#endiftypedef struct {    unsigned short key;    unsigned short candidates[32];}KeyCandidates;#ifdef __cplusplus extern "C"{#endif#ifndef _gb_far#ifdef _C166#define _gb_far		_huge#else#define _gb_far#endif#endif#ifdef __GB_LATIN_ENGINE__const GBCHAR _gb_far * EnChar2NumStr(GBCHAR _gb_far * target, const GBCHAR _gb_far * source, size_t length);#endif	extern GBIMWT GBIMW;#if __GB_OPTIMIZE_FULLOUTPUT__>0extern OptimizeFullOutput OptimizeFullOutputBuf;#endif/** 鍒ゆ柇褰撳墠杈撳叆娉曟ā寮忔槸鍚︿负涓

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -