📄 ppeditbox.h
字号:
#ifndef __GUIPP_EDITBOX_H__
#define __GUIPP_EDITBOX_H__
#include "GUIpp.h"
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
// 输入框
#define EDIT_MAX_TEXT_LEN 40
////////// 输入框风格,默认为0
#define EDIT_STYLE_NO_FRAME 0x00000001 // 无边框
#define EDIT_STYLE_NEG 0x00000002 // 文字反显
#define EDIT_STYLE_WITH_ICON 0x00000004 // 在最右侧显示一个图标
#define EDIT_STYLE_ALIGN_MID 0x00000008 // 文字居中,否则为左对齐
//////////////////////////////////////////////////////////////////////////
//@ltq001.2005-8-4 添加下滑线属性
#define EDIT_STYLE_UNDERLINE 0x00000010 // 下滑线
///////////////////////////////////////////
// @ltq001.2005-8-1.start
//
// 添加输入法(IME)相关常量定义
//
//IME序号
#define IME_ID_digit 0 //数字输入法
#define IME_ID_EN 1 //英文字母输入法
#define IME_ID_CH 2 //中文输入法
//IME内部状态
#define IME_ST_digit 1 //数字输入状态
#define IME_ST_EN_IDLE 2 //英文输入状态:空闲
#define IME_ST_EN_CHOOSE 3 //英文输入状态:刚刚按下某键之后的1秒钟内,此状态下按下相同键起到选择重码英文字母作用
#define IME_ST_punc 4 //标点输入状态:显示全部可选标点,等待用户选择确定
#define IME_ST_CH_IDLE 5 //中文输入状态:无候选汉字,无输入拼音数字码
#define IME_ST_CH_CHOOSE 6 //中文输入状态:有候选汉字,有输入拼音数字码,可以选择,也可修改拼音或退出
#define IME_ST_punc_CHOOSE 7 //中文或者英文输入状态下,按下0键切换标点输入
//IME相关按键
#define IME_KEY_NUM0 0
#define IME_KEY_NUM1 1
#define IME_KEY_NUM2 2
#define IME_KEY_NUM3 3
#define IME_KEY_NUM4 4
#define IME_KEY_NUM5 5
#define IME_KEY_NUM6 6
#define IME_KEY_NUM7 7
#define IME_KEY_NUM8 8
#define IME_KEY_NUM9 9
#define IME_KEY_SELUP 10 //选择候选符号,向前(上)
#define IME_KEY_SELDOWN 11 //选择候选符号,向后(下)
#define IME_KEY_OK 12 //选定
#define IME_KEY_ESC 13 //删除拼音,退出子状态,取消输入
#define IME_KEY_SELSPELL IME_KEY_NUM1 //选择候选拼音,这里我们复用1键(在IME_ST_CH_CHOOSE状态下)
#define IME_KEY_PUNC IME_KEY_NUM1 //标点输入键,这里我们复用1键(在IME_ST_EN_IDLE或IME_ST_CH_IDLE状态下)
#define IME_KEY_SWITCH_IME 14 //输入方法切换键
#if _USE_GUI == 1
class CCandidateBar;
class CEditBox : public CWnd
{
private:
CTimer w_EditBoxTimer;
int w_nTextLimint;
int w_nStyle; // 风格
int w_bHaveFocus; // 是否具有输入焦点
char w_strText[EDIT_MAX_TEXT_LEN]; // 文本,注意不要溢出
int w_nCursorIndex; // 光标位置
int w_nTextCounter; // 文字统计,中文和英文都是一个字符
int w_bShowCursor; // 显示光标旗标 0 不显示 1 显示
enum enFontType w_fontType;
int w_nIME_Index; //当前输入框的输入法(数字,英文,中文)
int w_nIME_State; //当前输入框的输入法状态(数字,英文,标点,中文,有汉字待选)
int w_nEN_KeyNumber; //前1秒内最后一次按键的数字值
int w_nEN_CurCandidate; //1秒内重复按键的当前候选
int w_nEN_TicksRemained; //从上次按键到1秒尚剩余的tick个数
int w_nCH_PY_DCODE; //用户输入的拼音数字码
int w_nCH_PY_CurPYIndex; //当前用户选择的重码拼音序号
CCandidateBar* w_pCandidateBar;
public:
CEditBox();
virtual ~CEditBox();
virtual int CreateWindow(
CWnd * pParentWnd,
int nX1,
int nY1,
int nWidth,
int nHeight,
int nTextLimit);
protected:
virtual void OnPaint();
virtual void OnTimer(CTimer *pTimer);
virtual void OnKey(int nKeyCode, int bKeyDown);
public:
void Clear();
void CursorMove(int nStep);
void SetCurChar(char c);
void Insert(char * strChar);
void Delete();
void Backspace();
int GetTextCounter();
void SetFont(enum enFontType font);
void SetStyle(int nStyle);
void SetIME(int nIME_Index);
void SetFocus(int bHaveFocus);
int HaveFocus();
int HandleKey(int nKeyCode, int flag);
};
// 输入法的候选栏
class CCandidateBar : public CWnd
{
private:
char* w_strCodeString; //编码字符串
char* w_strCandidateString; //候选字串
int w_nCandidateCnt; //候选字个数
int w_nCurrentCandidate; //当前候选字的起始索引
int w_nCandidatePerScreen; //每屏能够显示的候选字个数
int w_nFirstCandidateOnScreen; //当前屏显示的第一个候选汉字索引
int w_nCandidateScreenWidth;
int w_nMaxCodeStringWidth; //编码字符串显示所占宽度
int w_nCodeStringStartPosX; //编码字符串显示起始位置
int w_nCandidateStringStartPosX; //候选字符串显示起始位置
enum enFontType w_fontType; //用于显示的字体
public:
static CCandidateBar* Instance();
virtual int CreateWindow(
CWnd * pParentWnd,
int nX1,
int nY1,
int nWidth,
int nHeight,
enum enFontType fontType);
protected:
virtual void OnPaint();
virtual void OnTimer(CTimer *pTimer);
private:
static CCandidateBar s_CandidateBar;
CCandidateBar();
virtual ~CCandidateBar();
public:
//寻找一个可以附着的位置
void Pop(CRect * prc);
void SetCandidate(char *strCodeString, char *strCandidateString);
void MoveCandidate(int nStep);
void GetSelectItem(char *strSel);
};
#endif // end of _USE_GUI == 1
#endif // __GUIPP_EDITBOX_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -