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

📄 uikbd_mkword.c

📁 嵌入工linux开发的源码
💻 C
字号:
#include <uiWnd.h>
#include <uiKbd_MkWord.h>
#include <uiKbd_MkWord.res>
#include <uiFont.h>
#include <uiFontEx.h>
#include <uiSound.h>

// 反显按键
/*
#define KBD_MKWORD_INVERT_GB(handle,i) \
		guiInvertRect(handle, KBDCOOR_MKWORD_GB[i].left+1,KBDCOOR_MKWORD_GB[i].top+1,\
			KBDCOOR_MKWORD_GB[i].right-1,KBDCOOR_MKWORD_GB[i].bottom-1);

#define KBD_MKWORD_INVERT_BIG5(handle,i) \
		guiInvertRect(handle, KBDCOOR_MKWORD_BIG5[i].left+1,KBDCOOR_MKWORD_BIG5[i].top+1,\
			KBDCOOR_MKWORD_BIG5[i].right-1,KBDCOOR_MKWORD_BIG5[i].bottom-1);
*/

void KBD_MKWORD_INVERT(HNDL handle, int i)
{
	char langType;
	
	langType = guiQueryLanguageType();
	if(langType>2)
		langType = LANGUAGE_CHS;
	
	if(langType==LANGUAGE_CHT)
	{
		guiInvertRect(handle, KBDCOOR_MKWORD_GB[i].left+1,KBDCOOR_MKWORD_GB[i].top+1,\
			KBDCOOR_MKWORD_GB[i].right-1,KBDCOOR_MKWORD_GB[i].bottom-1);
	}
	else
	{
		guiInvertRect(handle, KBDCOOR_MKWORD_BIG5[i].left+1,KBDCOOR_MKWORD_BIG5[i].top+1,\
			KBDCOOR_MKWORD_BIG5[i].right-1,KBDCOOR_MKWORD_BIG5[i].bottom-1);
	}
}

/*********************************************************************/
//dest: 显示自造字
//para: handle
//return:void
/*********************************************************************/
void _guiSwKbd_showMkWord( HNDL handle)
{
	TGuiSw_Kbd *pControl;
	char buf[3],i;
	char langType;
	
	langType = guiQueryLanguageType();
	if(langType>2)
		langType = LANGUAGE_CHS;

	if(langType==LANGUAGE_CHT)
		buf[0]=0xc6;
	else            
		buf[0]=0xf8;
	
	pControl=(TGuiSw_Kbd *)handle;
	guiPutImage(handle,0,0,239,60,KBDBMP_MKWORD);
	if(pControl->First_Stroke1!=1)		// 显示第1区
	{
		//for(i=0;i<43;i++)
		for(i=0;i<32;i++)
		{
			buf[1]=0xa1+i;
			//guiShowWord(handle,buf,31+(i%11)*15,(i/11)*15+2,GUI_BLACK,0);
			guiShowWord(handle,buf,30+(i%8)*15,(i/8)*13+1,GUI_BLACK,0);
		}
		guiPutImage(handle,150,8 ,159, 18 ,icon_Gui_RightArrow8X12_UP);
		pControl->First_Stroke1=1;
	}
	else								// 显示第2区
	{
		//buf[0]=0xf8;
		//for(i=0;i<43;i++)
		for(i=0;i<32;i++)
		{
			//buf[1]=0xa1+i+43;
			buf[1]=0xa1+i+32;
			//guiShowWord(handle,buf,31+(i%11)*15,(i/11)*15+2,GUI_BLACK,0);
			guiShowWord(handle,buf,30+(i%8)*15,(i/8)*13+1,GUI_BLACK,0);
		}
		guiPutImage(handle,150, 8, 159, 18 , icon_Gui_LeftArrow8X12_UP);
		pControl->First_Stroke1=-1;
	}
}

/*********************************************************************/
//dest: 自造字键盘开始
//para: void
//return:void
/*********************************************************************/
void _guiSwKbd_startMkWord( HNDL handle )
{
	_guiSwKbd_showMkWord( handle);
	return;
}

/*********************************************************************/
//dest: 自造字键盘结束
//para: void
//return:void
/*********************************************************************/
void _guiSwKbd_endMkWord( HNDL handle )
{
	return;
}

/*********************************************************************/
//dest: 自造字键盘对笔点消息的响应
//para: 
//	handle:	键盘控件的handle值
//	message:笔点消息类型
//	x,y:	笔点位置座标
//return:void
/*********************************************************************/
void _guiSwKbd_actionMkWord(HNDL handle, WORD message, WORD x, WORD y)
{
	BYTE	bClass;
	WORD    code;
	int		result;
	TGuiSw_Kbd *pControl;                     
	char langType;
	
	langType = guiQueryLanguageType();
	if(langType>2)
		langType = LANGUAGE_CHS;

	
	guiEnterWCS();
	pControl=(TGuiSw_Kbd *)handle;

	//转换成相对于控件的坐标
	x -= pControl->base.left;
	y -= pControl->base.top;

	if(langType==LANGUAGE_CHT)
	{
		result=guiSwKbd_SearchPos(KBDCOOR_MKWORD_BIG5, x, y);		// 搜索位置
		if(result == -1)		// 不在有效范围之内
		{
			if(pControl->SelPos != -1)
			{
					KBD_MKWORD_INVERT(handle,pControl->SelPos);		// 恢复已按下的键
			}
			pControl->SelPos = -1;
			guiExitWCS();
			return;
		}
	}
	else 	
	{
		result=guiSwKbd_SearchPos(KBDCOOR_MKWORD_GB, x, y);		// 搜索位置
		if(result == -1)		// 不在有效范围之内
		{
			if(pControl->SelPos != -1)
				KBD_MKWORD_INVERT(handle,pControl->SelPos);		// 恢复已按下的键
			pControl->SelPos = -1;
			guiExitWCS();
			return;
		}
	}
	
	if(langType==LANGUAGE_CHT)
		code=KBDCOOR_MKWORD_BIG5[result].code;
	else
		code=KBDCOOR_MKWORD_GB[result].code;
	
	switch(message)
	{
	case PENUP:
		if(pControl->SelPos != -1)
		{
			KBD_MKWORD_INVERT(handle,pControl->SelPos);
			pControl->SelPos=-1;
		}
		switch(code)
		{
		case KEY_ENGLISH:						// 切换到英文键盘
			guiSwKbd_SwitchClass(handle,KBDCLASS_ENGLISH);
			break;
		case KEY_CHINESE:						// 切换到中文键盘
			//guiSwKbd_SwitchClass(handle,KBDCLASS_CHINESE);
			if(langType==LANGUAGE_CHT)
				guiSwKbd_SwitchClass(handle,KBDCLASS_CHT);
			else
				guiSwKbd_SwitchClass(handle,KBDCLASS_CHINESE);

			break;
		case KEY_SYMBOL:						// 切换到下一个符号键盘
			guiSwKbd_SwitchClass(handle,KBDCLASS_SYMBOL);
			break;
		case KEY_HAND:							// 切换到手写键盘
			guiSwKbd_SwitchClass(handle,KBDCLASS_HAND);
			break;
		case KEY_NUMERIC:						// 切换到数字键盘
			guiSwKbd_SwitchClass(handle,KBDCLASS_NUMERIC);
			break;
//		case KEY_MAKEWORD:						// 切换到造字键盘
//			guiSwKbd_SwitchClass(handle,KBDCLASS_MAKEWORD);
//			break;
		case KEY_CAPSLOCK:
			if(langType==LANGUAGE_CHT)
				guiSwKbd_SetType(handle, KBD_CHT_ZY);
			else
				guiSwKbd_SetType(handle, KBD_CHINESE_WB);

			break;
		case KEY_SWITCHMKWORD:
			_guiSwKbd_showMkWord( handle);		// 切换到造字键盘另一区
			break;
		case KEY_SPACE:
		case KEY_BACKSPACE:
		case KEY_DELETE:
		case KEY_ENTER:
			guiKbd_SendMsg(handle,code,INPUT_MODE_ADD);	// 输入一个按键
			break;
		default:
			if(pControl->First_Stroke1!=1)
				//code+=0x2b00;
#ifdef __WIN32__
				code+=0x2000;
#else
				code+=0x0020;
#endif
			if(guiFontEx_GetBitmap( (char *)(&code) ))
				guiKbd_SendMsg(handle,code,INPUT_MODE_ADD);	// 输入一个按键
			break;
		}
		guiPenSound();
		break;
	case PENMOVE:				// 在键盘中移动触笔
		if( pControl->SelPos == result )
			break;
	case PENREENTER:				// 触笔移入键盘
	case PENDOWN:
		if(pControl->SelPos != -1)
			KBD_MKWORD_INVERT(handle,pControl->SelPos);	// 取消以前的笔点区域
		KBD_MKWORD_INVERT(handle,result);		// 反显笔点区域
		pControl->SelPos=result;				// 记录笔点位置
		break;
	case PENREMOVE:				// 触笔移出键盘
		if(pControl->SelPos != -1)
		{
			KBD_MKWORD_INVERT(handle,pControl->SelPos);			// 取消原选中位置
			pControl->SelPos = -1;
		}
		break;
	}
	guiExitWCS();
}

⌨️ 快捷键说明

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