📄 t9dispose.h
字号:
#pragma once
#include "HZK.h"
#include "SetControl.h"
class CDispose
{
public:
CZK *pZk;
UINT T9Type; //当前输入法类型(0为数字,1为字母,2为T9拼音)
UINT T9TypeOld;
int m_iKeyPress; //按键次数
int m_iPYNum; //可用拼音总数
int m_iPYNumOld;
CString m_arrInputWord[6]; //当前输入字母
CString m_arrSelectWord[20]; //当前符合拼音组合
CString m_sShowWord; //当前符合的所有汉字(用于显示)
CString m_sOutWord; //当前输出的字符串值(用于输出结果)
CString m_sInputWord; //当前配置好的输入字母
CString m_arrEng[5];
CString m_sEng; //保存当前输入的英文字母
CString m_sNum; //保存当前输入的数字
CControl *pControl; //自定义控件组操作类
CRect pRt; //保存当前自定义控件组的矩形大小
public:
CDispose(void);
~CDispose(void);
void InitDispose(CRect rt, CWnd * pMain);
void T9TypeOperate(); //控制当前输入法的类型切换
void ConfigT9(WCHAR input); //对输入的数字配置T9键位字母
void ConfigWord(WCHAR input);
void OperateT9(void);
void Operate123(WCHAR input);
void OperateABC(void);
void OperateFH(void);
void SetControl(CString strTemp);
CString SelectData(CPoint point);
CString GetChiWord(CString SelectWord);
CString GetEngWord(int index);
CString Get123(void);
CString GetFH(void);
CString GetResult(void);
CRect GetDisposeRect(void);
void DelControl(void);
void DelInputWord(void);
void DelT9All(void);
void DelABC(void);
void Del123Input(void);
void Del123All(void);
void Show();//测试用
};
CDispose::CDispose(void)
{
pZk = new CZK(); //
T9Type = 0; //T9输入类型初始化
m_iKeyPress = 0; //按键记数初始化
m_iPYNum = 0; //本次输入所得可用拼音总数初始化
m_iPYNumOld = 0; //上一次输入所得可用拼音总数初始化
m_sInputWord.Empty(); //输入字符初始化
m_sShowWord.Empty(); //显示字符初始化
m_sOutWord.Empty(); //输出字符初始化
m_sEng.Empty();
m_sNum.Empty();
pControl = new CControl();
for(int i=0;i<20;i++)
{
if(i < 6)
{
m_arrInputWord[i].Empty();
}
m_arrSelectWord[i].Empty();
}
}
CDispose::~CDispose(void)
{}
void CDispose::T9TypeOperate()
{
m_sOutWord.Empty();
static int type = 0;//(类型转换:0为数字,1为字母,2为T9拼音)
switch(type)
{
case 0:
Del123All();
break;
case 1:
DelABC();
break;
case 2:
DelT9All();
break;
default:
break;
}
type++;
if(type > 2)
{
type = 0;
}
T9Type = type;
}
void CDispose::InitDispose(CRect rt,CWnd *pMain)
{
pControl->InitCStatic(&rt,pMain);
pRt = pControl->GetControlRect();
}
void CDispose::ConfigT9(WCHAR input)
{
if(input == _T('#'))
{
T9TypeOperate();
return ;
}
if(input == _T('*'))
{
OperateFH();
return ;
}
if(T9Type == 0)
{
Operate123(input);
}
else
{
switch(input)
{
case '1':
return;
case '2':
m_sInputWord = "abc";
break;
case '3':
m_sInputWord = "def";
break;
case '4':
m_sInputWord = "ghi";
break;
case '5':
m_sInputWord = "jkl";
break;
case '6':
m_sInputWord = "mno";
break;
case '7':
m_sInputWord = "pqrs";
break;
case '8':
m_sInputWord = "tuv";
break;
case '9':
m_sInputWord = "wxyz";
break;
//case '*':
// OperateFH();
// return;
default:
break;
}
if(input == '0')
{
m_sOutWord = _T(" ");
return;
}
if(T9Type == 1)
{
OperateABC();
return;
}
if(m_iKeyPress < 6)
{
m_arrInputWord[m_iKeyPress] = m_sInputWord; //保存当前输入至字符串数组
m_iKeyPress++;
}
else
{
return ;
}
if(T9Type == 2)
{
OperateT9();
}
}
}
void CDispose::OperateABC(void)
{
pControl->DelData();
pControl->SetEngData(m_sInputWord);
}
void CDispose::OperateFH(void)
{
m_sShowWord = pZk->GetInputString(_T("*"),1);
pControl->DelData();
pControl->SetFHData(m_sShowWord);
}
void CDispose::Operate123(WCHAR input)
{
m_sNum = input;
m_sOutWord = m_sNum;
}
void CDispose::OperateT9()
{
CString strTemp;
CString arrTemp[20];
int count1,count2;//count1为外循环(上次可用拼音组合次数),count2为内循环(当前按键字母数)
if(m_iKeyPress == 1)//如初次按键则赋外循环为1,只判断当前按键字母的拼音组合
{
count1 = 1;
}
else
{
count1 = m_iPYNumOld; //外循环次数为上次可用拼音组合
}
count2 = m_arrInputWord[m_iKeyPress-1].GetLength();
CString str1,str2,temp;
m_iPYNum = 0; //当前可用拼音组合总数(用于当前可用拼音组合数组下标)
for(int m=0;m<count1;m++)
{
str1 = m_arrSelectWord[m];
for(int n=0;n<count2;n++)
{
str2 = m_arrInputWord[m_iKeyPress-1].Mid(n,1);
temp = str1 + str2;
// AfxMessageBox(m_arrInputWord[m_iKeyPress-1]);
m_sShowWord = pZk->GetInputString(temp,m_iKeyPress);
if(!m_sShowWord.IsEmpty())
{
arrTemp[m_iPYNum] = temp;
//m_arrSelectWord[index] = arrTemp[index];
m_iPYNum++; //可用拼音组合计数
}
}
}
if(m_iPYNum <= 0)
{
for(int i=m_iKeyPress-1;i>-1;i--)
{
if(m_arrInputWord[i] != _T(""))
{
m_arrInputWord[i].Empty();
m_iKeyPress--;
return;
}
}
}
m_iPYNumOld = m_iPYNum;
//先清空数组,再从(临时)可用拼音数组保存至(成员变量)可用拼音组合数组
for(int i=0;i<20;i++)
{
m_arrSelectWord[i].Empty();
m_arrSelectWord[i] = arrTemp[i];
}
}
void CDispose::SetControl(CString strTemp)
{
pControl->SetChiData(strTemp);
}
CString CDispose::SelectData(CPoint point)
{
CString strTemp = _T("");
strTemp = pControl->SelectData(point,T9Type);
if(strTemp!=_T(""))
{
m_sOutWord += strTemp;
pControl->DelData();
if(T9Type == 2)
{
DelT9All();
}
if(T9Type == 1)
{
DelABC();
}
}
return strTemp;
}
void CDispose::DelABC(void)
{
m_sInputWord.Empty();
}
void CDispose::DelT9All(void)
{
m_iKeyPress = 0;
m_iPYNum = 0;
m_iPYNumOld = 0;
m_sShowWord.Empty();
for(int i=0;i<20;i++)
{
if(i < 6)
{
m_arrInputWord[i].Empty();
}
m_arrSelectWord[i].Empty();
}
}
void CDispose::DelInputWord()
{
for(int i=m_iKeyPress-1;i>-1;i--)
{
if(m_arrInputWord[i] != _T(""))
{
m_arrInputWord[i].Empty();
m_iKeyPress--;
if(m_iKeyPress == 0)
{
m_sShowWord = _T("");
m_iKeyPress = 0;
m_iPYNum = 0;
}
for(int z=0;z<20;z++)
{
m_arrSelectWord[z].Empty();
}
CString strTemp;
CString arrTemp[20];
int count1,count2;//count1为外循环(上次可用拼音组合次数),count2为内循环(当前按键字母数)
for(int j=1;j<=m_iKeyPress;j++)
{
if(j == 1)//如初次按键则赋外循环为1,只判断当前按键字母的拼音组合
{
count1 = 1;
}
else
{
count1 = m_iPYNumOld; //外循环次数为上次可用拼音组合
}
count2 = m_arrInputWord[j-1].GetLength();
CString str1,str2,temp;
m_iPYNum = 0; //当前可用拼音组合总数(用于当前可用拼音组合数组下标)
for(int m=0;m<count1;m++)
{
str1 = m_arrSelectWord[m];
for(int n=0;n<count2;n++)
{
str2 = m_arrInputWord[j-1].Mid(n,1);
temp = str1 + str2;
m_sShowWord = pZk->GetInputString(temp,j);
if(m_sShowWord != _T(""))
{
arrTemp[m_iPYNum] = temp;
m_iPYNum++; //可用拼音组合计数
}
}
}
m_iPYNumOld = m_iPYNum;
//先清空数组,再从(临时)可用拼音数组保存至(成员变量)可用拼音组合数组
for(int i=0;i<20;i++)
{
m_arrSelectWord[i] = _T("");
m_arrSelectWord[i] = arrTemp[i];
}
}
return ;
}
}
}
void CDispose::Del123All(void)
{
m_sNum.Empty();
}
void CDispose::Del123Input(void)
{
if(m_sNum != _T(""))
{
int count = m_sNum.GetLength();
m_sNum.Delete(count-1,1);
}
}
void CDispose::DelControl(void)
{
pControl->DelData();
}
CString CDispose::GetChiWord(CString SelectWord)
{
m_sShowWord = pZk->GetInputString(SelectWord,m_iKeyPress);
return m_sShowWord;
}
CString CDispose::GetEngWord(int index)
{
return m_arrSelectWord[index];
}
CString CDispose::Get123(void)
{
return m_sNum;
}
CString CDispose::GetResult(void)
{
return m_sOutWord;
}
CRect CDispose::GetDisposeRect(void)
{
return pRt;
}
void CDispose::Show() //测试用
{
for(int i=0;i<20;i++)
{
if(i<6)
{
AfxMessageBox(m_arrInputWord[i]);
}
//if(m_arrSelectWord[i] != _T(""))
//{
//AfxMessageBox(m_arrSelectWord[i]);
//}
}
}
///读文件词库////////////////////////////////////////////////////////////////////////////////////////
//void CDispose::ReadZK(CString str)
//{
// FILE* fp;
// char cBuffer; //字符缓存
// CString strBuffer; //字符串缓存
// CString strTemp = _T("");
//
// m_iNodeNum = 0;
//
// fp=fopen("CK.tab","r");
// if(fp==NULL)
// {
// fclose(fp);
// return ;
// }
//
// while(true)
// {
// if(fread(&cBuffer,sizeof(cBuffer),1,fp)==0)
// {
// break;
// }
// else
// {
// if(cBuffer == char(10))
// {
// int iTemp = strBuffer.Find(char(32));
//
// if(iTemp>0)
// {
// strTemp = strBuffer.Left(iTemp);
//
// if(CompareZD(strTemp,str))
// {
// m_sSelectWord = strTemp;
// m_sShowWord = strBuffer.Mid(iTemp+1);
// //AfxMessageBox(m_sShowWord);
// AddListNode(m_sSelectWord, m_sShowWord);
// }
// }
// strBuffer = _T("");
// }
// else
// {
// strBuffer += cBuffer;
// }
// }
// }
// m_sShowWord = m_pHead->sChiWord;
// fclose(fp);
//}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -