📄 uisw_kbd.h
字号:
/*********************************************************************/
// 文 件 名: uiSw_Kbd.h
// 程序说明: 键盘管理和键盘控件
// 程序设计: 党德华
// 2001.10.26 设计完成 说明文档:R004-S211-0001
// 宋军霞 2002.02.02 增加键盘复位功能
// 宋军霞 2002.06.07 更正键盘控件结构中候选字存储区不对齐的问题
// 程序审查: 宋军霞
// 2002.01.22 审查完成 说明文档:R004-S211-0001
// 项目编号: R004-S211
// 版 本: V1.0
// 版 权: Reality Plus Technology (ShenZhen) Co.,Ltd.
/*********************************************************************/
#ifndef _GUI_SWKBD_H
#define _GUI_SWKBD_H
#include <pr2k.h>
#include <typedefine.h>
#include <uiControl.h>
// 特殊按键
#define KEY_BACKSPACE 0x0008 // 退格键
#define KEY_SPACE 0x0020 // 空格键
#define KEY_TAB 0x0009 // 制表键
#define KEY_ENTER 0x000D // 回车键
#define KEY_DELETE 0x0006 // 删除键
/* ============================================================================ */
// 系统键盘管理
/* ============================================================================ */
// 键盘输入信息的添加方式
#define INPUT_MODE_ADD 0 // 添加到光标所在位置
#define INPUT_MODE_REPLACE_1 1 // 替换光标前的第一个字符
#define INPUT_MODE_REPLACE_2 2 // 替换光标前的第二个字符
//各个键盘处理的回调函数
typedef void (*PF_KBD_ACTION)(HNDL handle,WORD message,WORD x,WORD y);
typedef void (*PF_KBD_START)(HNDL handle);
typedef void (*PF_KBD_END)(HNDL handle);
typedef void (*PF_KBD_SHOW)(HNDL handle,int region,WORD *buffer);
// 键盘信息数据结构
#define SWKBD_MAX_NAME_SIZE 16 // 键盘名称最大字符数
#define GUI_KBDINFO_CHECK_FLAG 8221 // 键盘有效检查标志
typedef struct tagKbd_Info
{
BYTE bClass; // 键盘类型,如中、英等
char szName[SWKBD_MAX_NAME_SIZE+1]; // 键盘名称,如“拼音”、“五笔”等
short checkFlag; // 键盘有效性检查标志
BYTE *paBmp; // 键盘图片数据指针
PF_KBD_ACTION actionFun; // 回调函数:消息响应
PF_KBD_START startFun;
PF_KBD_END endFun;
PF_KBD_SHOW showFun;
}TKbd_Info;
// 引用外部的全局变量
extern const WORD gGUI_MAX_KBD; // 最大可安装键盘数,在uiUser_Kbd.cpp中定义
extern TKbd_Info *gpKbd_Info; // 键盘信息,在uiSw_Kbd.cpp中定义
// 初始化键盘信息
DLL_EXP(STATUS) guiKbd_Init(void);
// 增加一个新键盘
DLL_EXP(STATUS) guiKbd_Add(TKbd_Info *pKbd_Info);
// 获取下一个有效键盘的编号
DLL_EXP(STATUS) guiKbd_GetNext(WORD oldType, WORD *newType);
// 获取与当前键盘类型相同的下一个有效键盘的编号
DLL_EXP(STATUS) guiKbd_GetNextInType(WORD oldType, WORD *newType);
//获取键盘的大小
DLL_EXP(STATUS) guiKbd_GetSize(WORD type, WORD *width, WORD *height);
//获取键盘名称
DLL_EXP(STATUS) guiKbd_GetName(WORD type,char *name);
//获取已安装的键盘数
DLL_EXP(WORD) guiKbd_GetNum(void);
// 将键盘上的输入信息发送到GUI系统
DLL_EXP(void) guiKbd_SendMsg(HNDL handle,short sendCode,BYTE mode);
// 获取某一类键盘中的一个有效键盘的编号
DLL_EXP(STATUS) guiKbd_GetType(BYTE bClass, WORD *type);
// 获取键盘的类型
DLL_EXP(STATUS) guiKbd_GetClass(WORD type, BYTE *bClass);
// 检查键盘编号的合法性
DLL_EXP(STATUS) guiKbd_CheckType(WORD type);
// 获取键盘位置指针
DLL_EXP(STATUS) guiKbd_GetBmp(WORD type,int *paBmp);
/* ============================================================================ */
// 键盘控件
/* ============================================================================ */
// 键盘控件数据结构
#define MAX_INPUT_STR_NUM 7 // 中文输入法中的最大输入字符数
#define HWR_MAXCHAR_NUM 20 // 手写识别中的最大候选字数
typedef struct tagGuiSw_Kbd // 108 Bytes
{
TGuiControl base; //基本属性
char InputStr[MAX_INPUT_STR_NUM+1]; //保存输入的字符串
DWORD Offset; //重码字开始位置
WORD TotalNum; //重码字个数
WORD StartPos; //显示区中字符在重码字中的相对位置
int SelPos; //扩展属性,可作为一个变量使用
WORD HWR_Buf1_Num; //手写1区域候选字个数
WORD HWR_Buf2_Num; //手写2区域候选字个数
WORD HWR_Buf3_Num; //手写3区域候选字个数
char HWR_Buf1[HWR_MAXCHAR_NUM+2]; //手写1区域候选字
char HWR_Buf2[HWR_MAXCHAR_NUM+2]; //手写2区域候选字
char HWR_Buf3[HWR_MAXCHAR_NUM+2]; //手写3区域候选字
char First_Stroke1;
char First_Stroke2;
char First_Stroke3;
}TGuiSw_Kbd;
typedef struct tagSwKbd_Coor
{
WORD left; // 座标
WORD top;
WORD right;
WORD bottom;
WORD code; //代码
}TSwKbd_Coor;
#define KEY_KBD_END 0x0ffff // 键盘座标和代码信息结束码
// 创建一个键盘控件
DLL_EXP(HNDL) guiSwKbd_Create(WORD left, WORD top, WORD Type);
// 切换到下一个有效键盘
DLL_EXP(STATUS) guiSwKbd_SwitchToNext(HNDL handle);
// 切换到与当前键盘类型相同的下一个有效键盘
DLL_EXP(STATUS) guiSwKbd_SwitchToNextInType(HNDL handle);
// 切换到另一类型的键盘
DLL_EXP(STATUS) guiSwKbd_SwitchClass(HNDL handle, BYTE bClass);
// 设定当前键盘为指定的键盘
DLL_EXP(STATUS) guiSwKbd_SetType(HNDL handle, WORD type);
// 获取键盘当前的键盘类型和编号
DLL_EXP(STATUS) guiSwKbd_GetType(HNDL handle, BYTE *bClass ,WORD *type);
// 搜索笔点的键盘位置
DLL_EXP(int) guiSwKbd_SearchPos(TSwKbd_Coor const *tSwKbd_Coor, WORD x, WORD y);
// 复位窗口中的键盘
DLL_EXP(void) guiSwKbd_Reset(HNDL handle);
/* ============================================================================ */
// 用户键盘管理
/* ============================================================================ */
// 用户键盘分类,类型码必须为BYTE类型
#define KBDCLASS_ENGLISH 0
#define KBDCLASS_CHINESE 1
#define KBDCLASS_SYMBOL 2
#define KBDCLASS_HAND 3
#define KBDCLASS_NUMERIC 4
#define KBDCLASS_CHT 5
// 用户键盘常数,常数的数值必须与键盘加入的序号相对应
#define KBD_HAND 0 // 手写
#define KBD_ENGLISH 1 // 英文小写
#define KBD_ENGLISH_CAP 2 // 英文大写
#define KBD_CHINESE_PY 3 // 中文拼音
#define KBD_CHINESE_WB 4 // 中文五笔
#define KBD_CHINESE_MAKEWORD 5 // 简体造字
#define KBD_CHT_ZY 6 // 符号
#define KBD_CHT_CJ 7 // 符号
#define KBD_CHT_MAKEWORD 8 // 繁体造字
#define KBD_SYMBOL 9 // 符号
//#define KBD_NUMERIC 8 // 数字
// 定义用户键盘中的几个特殊功能键
#define KEY_CHINESE 0x0300 // 切换(到)中文键盘
#define KEY_ENGLISH 0x0301 // 切换(到)英文键盘
#define KEY_SYMBOL 0x0302 // 切换(到)符号键盘
#define KEY_HAND 0x0303 // 切换(到)手写键盘
#define KEY_IMECODE 0x0304 // 拼音或五笔编码输入区
#define KEY_CANDIDATE 0x0305 // 候选区
#define KEY_CANDIDATE2 0x0306 // 第2个候选区
#define KEY_LEFT 0x0307 // 左箭头
#define KEY_RIGHT 0x0308 // 右箭头
#define KEY_CAPSLOCK 0x0309 // 大写/小写或拼音/五笔切换
#define KEY_HANDREGION 0x030A // 手写区
#define KEY_NUMERIC 0x030B // 切换(到)数字键盘
//#define KEY_MAKEWORD 0x030C // 造字键盘切换(到)
#define KEY_SWITCHMKWORD 0x030D // 造字键盘切换(到)
#define CJ_KEY_BACKSPACE 0x0400
#define CJ_KEY_DELETE 0x0401
#define CJ_KEY_ENTER 0x0402
#define CJ_KEY_SPACE 0x0403
// 用户键盘初始化,本函数为GUI系统的回调函数,用户不可以删除它,但可以根据规则来修改它的内容
STATUS guiKbd_UserInit(void);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -