📄 uikbd_mkword.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 + -