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

📄 ime.c

📁 好记星的控件,包括button,list,对文件操作
💻 C
📖 第 1 页 / 共 3 页
字号:
/* OUTPUTS:    NONE													 */
/* RETURN:     成功返回TRUE,否则返回FALSE                              */
/*************************************************************************/
/*  NAME           DATE               REMARKS                            */
/* ==========  ============   ===========================================*/
/*  Qorse      2003-03-25     创建初始版本								 */
/*************************************************************************/
BOOL ImeSetDefault(UINT kbTypeID)
{
    MInputME tempIM;

    /*参数有效性验证*/
	if ((kbTypeID == IME_NONE) || kbTypeID >IME_MAXNUMBER )
	{
		return FALSE;
	}
	tempIM.uType = kbTypeID;
    if(!ImeGetInfo(&tempIM))
	{
        return FALSE;
	}
	/*指定新的默认输入法*/
	g_vSysGlobal.uImeInput = kbTypeID;
	return GlobalSave();
	
}

UINT ImeMatchChar(UINT16 uCharType)
{
    switch (uCharType) {
    case EDITALLOW_NUMBER:
    case EDITALLOW_ENCHAR:
    case EDITALLOW_SYMBOL:
    case EDITALLOW_ENTER:
    case EDITALLOW_ASCII:
//    case EDITALLOW_PHONE:
        return IME_ENGLISH;
        
    case EDITALLOW_SBCCASE:
        return ImeGetDefault();
        
//    case EDITALLOW_CLASS:
//    case EDITALLOW_DATE:
//    case EDITALLOW_TIME:
//        return IME_NONE;
        
//    case EDITALLOW_USER:        // 音标输入法
        
    case EDITALLOW_ALL:
        return ImeGetDefault();
        
    default:
        return ImeGetDefault();
    }
}

/*************************************************************************/
/* FUNCTION:   __ResetIME												 */
/* DESCRIPTION:初始化输入法状态										 */
/* INPUTS:     NONE													 */
/* OUTPUTS:    NONE													 */
/* RETURN:     消息处理函数返回值                                       */
/*************************************************************************/
/*  NAME           DATE               REMARKS                            */
/* ==========  ============   ===========================================*/
/*  Qorse		2003-04-8     创建初始版本                               */
/*************************************************************************/
FOR_IME_ALL
VOID __ResetIME(IMEGUI_STRUCT *pApGui)
{
	__InitialIME();
}
/*************************************************************************/
/* FUNCTION:   _IMEDrawGraph   										 */
/* DESCRIPTION:输入法的输入框的内容绘制								 */
/* INPUTS:     uType      输入法				                         */
/* OUTPUTS:    NONE													 */
/* RETURN:     NONE													 */
/*************************************************************************/
/*  NAME           DATE               REMARKS                            */
/* ==========  ============   ===========================================*/
/*  Qorse		2003-03-25     创建初始版本                              */
/*************************************************************************/


VOID ImeDrawSplit();
VOID __ImeDrawInputBoxHead(UINT uType);
VOID ImeDrawIndexNum(UINT8 index,UINT uType);

//=============================================
//==========IMe 输入法切换List=================

/****************************************************************************/
/* FUNCTION:   ImeSDialogHandleEvent                                       */
/* DESCRIPTION:输入法选择列表的消息处理函数                                */
/* INPUTS:     handle      对话框的句柄									*/
/*              pEvent      消息指针                                        */
/* OUTPUTS:        NONE                                                    */
/* RETURN:     消息处理函数返回值                                          */
/****************************************************************************/
/*  NAME           DATE               REMARKS                               */
/* ==========  ============   ==============================================*/
/*  Qorse		2003-03-24		创建学生机(无笔点)版本                      */
/****************************************************************************/
FOR_IME_ALL
VOID	ImeSelectDraw( VOID);

const UINT8 g_ImeHelp[] = 
{
	"1. 共有八种输入法,按[上下][左右]方向键进行选择,再按[确认]键完成选择并退出输入法选择画面。\n"
	"2. 英数输入法:\n"
	"按键盘上的字母键即可输入,按住[SHIFT]键可切换英文大小写。\n"
	"3. 拼音输入法:\n"
	"3.1 采用完整的拼音输入,用26个字母键输入拼音,其中的“ü”用“v”代替。\n"
	"3.2 按[空格]键切换声调,顺序为一声、二声、三声、四声、轻声(“5”表示轻声)。输入汉字的拼音,屏幕最下一行最多显示5个候选字,如果右下角显示有左右箭头,按[左右]键翻页显示另一屏候选字。\n"
	"3.3 输入完拼音后,按[确认]键、[左右]方向键或[空格]键,候选汉字左上角显示出数字,按对应的数字键即可实现所选汉字的输入。\n"
	"3.4 选取汉字后,如果该汉字有联想字,则屏幕底行显示联想字,继续按左上角数字键选择联想字。	\n"
	"4. 五笔输入法:\n"
	"4.1 这是一种以拆分汉字字形结构为特点的一种输入法,同PC上的五笔输入法。\n"
	"4.2 输入全码直接显示汉字,汉字左上角显示出数字,按对应的数字键即可完成候选字的选取,输入五笔码,如果有多个对应的汉字,则屏幕底行显示所有的候选字,按对应的数字键即可实现所选汉字的输入,直接按[确认]键,可选取第一个候选字。如输入“YNKY(赢)”,按[1]或[确认]键即输入汉字“赢”。输入简码显示出所要的字时,直接按[空格]键,即可完成输入。\n"
	"4.3 五笔输入法有联想字功能。 	\n"
	"5. 符号输入法:\n"
	"5.1 键盘上没有的符号通过符号输入法输入。\n"
	"5.2 选择符号输入法,按数字键选择相应的符号,如果本屏没有输入的符号,按[左右]键可显示另一行符号。选择左上角的数字键即输入符号。 \n"
	"6. 部首输入法:\n"
	"先输入部首的笔画数,按[确认]键,再按对应的数字键,找到需要的部首,然后输入除部首外的笔画数,再按[确认]键,显示出候选字,按对应的数字键,选取候选字。\n"
	"7. 笔画输入法:\n"
	"对于部首无法辨认的字可以采用笔画输入法。输入所需字的笔画数,按[确认]键,即显示出全部的候选字,找到后,按对应的数字键,即可完成输入。\n"
	"8. 难检字输入法:\n"
	"对于部首无法辨认的字也可采用难检字输入法。方法同上“笔画输入法”。\n"
	"9. 日文输入法:\n"
	"9.1 按键盘上的字母键即可输入。如输入“あ”,同按字母键“A”。\n"
	"9.2 输入完日文后,按[确认]键,[左右]方向键或[空格]键,候选字左上角显示出数字,按对应的数字键即可实现所选汉字的输入。\n"
};
UINT32 ImeSelectHandleEvent(IMEGUI_STRUCT *pApGui,  UINT uEvent, UINT uParam)
{
	UINT16 wTmptype;
	UINT16 wImetype;

	if( uEvent == EVENT_INITIALIZE)
	{
//		ListSetCurrentLine((MList*)(pApGui+1),g_uImeSelect );
//		ListSetTotalLine( (MList*)(pApGui+1), IME_MAXNUMBER );
		SetGuiHelp((UINT)g_ImeHelp);		//add by lichao
		return 1;	
	}
	else if((uEvent == EVENT_KEY)||(uEvent == EVENT_KEYREPEAT ))
    {
		switch (uParam)
		{
			case MVK_ENTER:
//				g_uImeSelect = ListGetCurrentLine((MList*)(pApGui+1))
//							+ ListGetTopLine((MList*)(pApGui+1));
				wTmptype = IME_SELECT_LIST[g_uImeSelect];
//				ImeSetDefault(wTmptype);				
				MsgPost(NULL,EVENT_IME,MAKELONG(IME_ACTION_SETCURRENT,wTmptype) );
				ExitAp(EXIT_CODE_NORMAL );
				break;
			case '1':
			case '2':
			case '3':
			case '4':
			case '5':
			case '6':
			case '7':
				wImetype = uParam - '1';
				wTmptype = IME_SELECT_LIST[wImetype];
				if (ImeShowAbility(wTmptype))
				{
					g_uImeSelect = wTmptype - 1;
//					ImeSetDefault(wTmptype);				
					MsgPost(NULL,EVENT_IME,MAKELONG(IME_ACTION_SETCURRENT,wTmptype) );
				}
				ExitAp(EXIT_CODE_NORMAL );
				break;
			case	MVK_UP:	
				if( g_uImeSelect == 1)
				{
					g_uImeSelect = IME_MAXNUMBER-1;
				}
				else if( g_uImeSelect == 0)
				{
					g_uImeSelect = IME_MAXNUMBER-1-IME_MAXNUMBER%2;
				}
				else
				{
					g_uImeSelect -= 2;
				}
				ImeSelectDraw();
				break;
			case	MVK_DOWN:
				if( g_uImeSelect == IME_MAXNUMBER-1)
				{
					g_uImeSelect = 1;
				}
				else if( g_uImeSelect == IME_MAXNUMBER-2)
				{
					g_uImeSelect = 0;
				}
				else
				{
					g_uImeSelect += 2;
				}
				ImeSelectDraw();
				break;
			case	MVK_LEFT:
				if(g_uImeSelect >0)
				{
					g_uImeSelect -=1;
				}
				else
				{
					g_uImeSelect = IME_MAXNUMBER-1;
				}
				ImeSelectDraw();
				break;
			case	MVK_RIGHT:
				if( g_uImeSelect== IME_MAXNUMBER-1 )
				{
					g_uImeSelect =0;
				}
				else
				{
					g_uImeSelect += 1;
				}
				ImeSelectDraw();
				break;
			case MVK_ESC:
				ExitAp(EXIT_CODE_NORMAL );
				break;				
			default:
				return 0;
		}
		return 1;
    }
	else if(uEvent == EVENT_DRAW)
	{
		ImeSelectDraw();
	}
	return 0;
}
VOID  ImeSelectDrawFrame(VOID);
const  UINT8  * const IMESELECTITEMNAME[] = {
		"英文",
		"拼音",
		"符号",
		"五笔",
		"部首",
		"笔画",		
		"难检",		
		"日文",
		"手写",
		"韩文"
};

VOID	ImeSelectDraw( VOID)
{
	UINT16	i;
	
	GraphDisableRefresh();
	GraphClearScreen();
	ImeSelectDrawFrame();
	GraphDrawText( IMECATALOG_HINT_TEXT_STARTX,IMECATALOG_HINT_TEXT_STARTY,0,0,"请选择输入法");	
	for( i = 0; i< IME_MAXNUMBER; i++ )
	{
		if( i == g_uImeSelect)
		{
			if( i%2 == 0)
			{
				GraphDrawIcon( IMECATALOG_ITEM_ICON_STARTX,IMECATALOG_ITEM_ICON_STARTY+(i/2)*IMECATALOG_ITEMICON_Y_INTERVAL,
					0,0,MAKE_ID( IME_SELECTED_ICON ) );			
				
				GraphDrawText( IMECATALOG_ITEM_TEXT_STARTX,IMECATALOG_ITEM_TEXT_STARTY+(i/2)*IMECATALOG_ITEMTEXT_Y_INTERVAL,
					0,0,(UINT8 *)IMESELECTITEMNAME[i]);				
			}
			else
			{
				GraphDrawIcon( IMECATALOG_ITEM_ICON_STARTX+IMECATALOG_ITEMICON_X_INTERVAL,IMECATALOG_ITEM_ICON_STARTY+(i/2)*IMECATALOG_ITEMICON_Y_INTERVAL,
					0,0,MAKE_ID( IME_SELECTED_ICON ) );	
				GraphDrawText( IMECATALOG_ITEM_TEXT_STARTX+IMECATALOG_ITEMTEXT_X_INTERVAL,IMECATALOG_ITEM_TEXT_STARTY+(i/2)*IMECATALOG_ITEMTEXT_Y_INTERVAL,
					0,0,(UINT8 *)IMESELECTITEMNAME[i]);								
			}
		}
		else
		{
			if( i%2 == 0)
			{
				GraphDrawIcon( IMECATALOG_ITEM_ICON_STARTX,IMECATALOG_ITEM_ICON_STARTY+(i/2)*IMECATALOG_ITEMICON_Y_INTERVAL,
					0,0,MAKE_ID( IME_NOSELECTED_ICON ) );			
				
				GraphDrawText( IMECATALOG_ITEM_TEXT_STARTX,IMECATALOG_ITEM_TEXT_STARTY+(i/2)*IMECATALOG_ITEMTEXT_Y_INTERVAL,
					0,0,(UINT8 *)IMESELECTITEMNAME[i]);				
				
			}
			else

⌨️ 快捷键说明

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