📄 keyboarddlg.cpp
字号:
}
else count=10;
temp2=(char*)malloc(count*3+1);
for (i=0;i<count;i++){
temp2[3*i]='0'+i%10;
temp2[3*i+1]=kb_hz_field[2*(i+kb_select_roll*10)];
temp2[3*i+2]=kb_hz_field[2*(i+kb_select_roll*10)+1];
}
temp2[3*count]='\0';
m_edit2.Format("%s",temp2);
free(temp2);
GetDlgItem(IDC_KEY12)->EnableWindow(true);
WinRefresh(IDC_EDIT2,m_edit2);
}
}
}
void CKeyboardDlg::OnKey14()
// "选择""加速"键
{
if(kb_input_mode==INPUT_LETTER||kb_input_mode==INPUT_CAPLETTER){
kb_last_keytime=0;
}else if(kb_input_mode==INPUT_CHINESE){
kb_selecting=1;
kb_key_next=strlen(kb_key_input)+1;
kb_key_repeat=0;
if(strlen(kb_hz_field)>20)
GetDlgItem(IDC_KEY13)->EnableWindow(true);
GetDlgItem(IDC_KEY14)->EnableWindow(false);
}
}
void CKeyboardDlg::OnKey15()
// "撤销"键
{
int hlen;
if(kb_input_mode>=0&&kb_input_mode<=2){
hlen=strlen(kb_hz_inputed);
if(kb_hz_inputed[hlen-2]>'z')
kb_hz_inputed[hlen-2]='\0';
else
kb_hz_inputed[hlen-1]='\0';
m_edit1.Format("%s",kb_hz_inputed);
WinRefresh(IDC_EDIT1,m_edit1);
//enable "撤销"
if(hlen<=1) GetDlgItem(IDC_KEY15)->EnableWindow(false);
}else if(kb_input_mode==INPUT_CHINESE){
hlen=strlen(kb_hz_inputed);
if (kb_selecting==1){
kb_selecting=0;
kb_select_roll=0;
}
kb_key_repeat=0;
kb_last_key=0;
kb_last_keytime=0;
if (!strcmp(kb_key_input,"")){
if(hlen>0) kb_hz_inputed[hlen-2]='\0';
}
strcpy(kb_key_input,"");
if (kb_hz_field){
free(kb_hz_field);
kb_hz_field=NULL;
}
m_edit1.Format("%s",kb_hz_inputed);
m_edit2.Format("%s","");
m_edit3.Format("%s","");
WinRefresh(IDC_EDIT1,m_edit1);
WinRefresh(IDC_EDIT2,m_edit2);
WinRefresh(IDC_EDIT3,m_edit3);
if(!strcmp(kb_key_input,"")&&!strcmp(kb_hz_inputed,""))
GetDlgItem(IDC_KEY15)->EnableWindow(false);
GetDlgItem(IDC_KEY12)->EnableWindow(false);
GetDlgItem(IDC_KEY13)->EnableWindow(false);
GetDlgItem(IDC_KEY14)->EnableWindow(false);
}
}
void CKeyboardDlg::OnKey16()
// "输入法"键
{
int hlen;
if(kb_input_mode==INPUT_CHINESE){
hlen=strlen(kb_hz_inputed);
if (kb_selecting==1){
kb_selecting=0;
kb_select_roll=0;
}
kb_key_repeat=0;
kb_last_key=0;
kb_last_keytime=0;
strcpy(kb_key_input,"");
if (kb_hz_field){
free(kb_hz_field);
kb_hz_field=NULL;
}
m_edit2.Format("%s","");
m_edit3.Format("%s","");
WinRefresh(IDC_EDIT2,m_edit2);
WinRefresh(IDC_EDIT3,m_edit3);
}
kb_input_mode++;
kb_input_mode%=4;
SetKeyBoard();
}
void CKeyboardDlg::OnOK()
{
// MessageBox(kb_hz_inputed);
test();
CDialog::OnOK();
}
void CKeyboardDlg::OnCancel()
{
CDialog::OnCancel();
}
void CKeyboardDlg::test()
{
CString sttr;
char line[1024],tempchar;
int No=0,k=0,sum=0;
FILE *fp1,*fp2;
fp1=fopen("pytable.txt","rt");
fp2=fopen("output.txt","wt");
do{
fscanf(fp1,"%s\n",line);
k=k+2;
if (!strcmp(line,"*******"))
// empty line
{
// sttr.Format("%d",k/2-1);
// MessageBox(sttr);
No=No+1;
fprintf(fp2," // %c\n\n",'a'+No);
k=0;
}
else
{
fprintf(fp2," wcscpy(pytable[%d].node[%d].yinjie,_T(\"%s\"));\n",No,k/2-1,line);
fscanf(fp1,"%s\n",line);
fprintf(fp2," pytable[%d].node[%d].count=%d;\n",No,k/2-1,strlen(line)/2);
sum=sum+strlen(line)/2;
fprintf(fp2," pytable[%d].node[%d].hzs=(TCHAR *)malloc((pytable[%d].node[%d].count+1)*MIN_UNIT_LEN);\n",No,k/2-1,No,k/2-1);
fprintf(fp2," if(pytable[%d].node[%d].hzs==NULL){\n remv_pytable();\n return KB_ERROR;\n }\n",No,k/2-1);
fprintf(fp2," wcscpy(pytable[%d].node[%d].hzs,_T(\"%s\"));\n\n",No,k/2-1,line);
}
}while(!feof(fp1));
sttr.Format("%d",sum);
MessageBox(sttr);
fclose(fp1);
fclose(fp2);
}
int CKeyboardDlg::NumberKey(char cur_key)
{
int tlen;
tlen=strlen(kb_hz_inputed);
kb_hz_inputed[tlen]=cur_key;
kb_hz_inputed[tlen+1]='\0';
m_edit1.Format("%s",kb_hz_inputed);
WinRefresh(IDC_EDIT1,m_edit1);
//enable "撤销"
GetDlgItem(IDC_KEY15)->EnableWindow(true);
return KB_OK;
}
int CKeyboardDlg::EnglishKey(char cur_key,int key_circle)
{
int tlen;
tlen=strlen(kb_hz_inputed);
// 判断是否存在连续按同一个键,修改kb_key_repeat值
CTime time0=CTime::GetCurrentTime();
if ((time0-kb_last_keytime<KB_KEYDELAY)&&(kb_last_key==cur_key)){
kb_key_repeat=kb_key_repeat+1;
// 当前输入的英文字母
kb_hz_inputed[tlen-1]=cur_key+(kb_key_repeat-1)%key_circle;
kb_hz_inputed[tlen]='\0';
}else{
kb_key_repeat=1;
kb_hz_inputed[tlen]=cur_key+(kb_key_repeat-1)%key_circle;
kb_hz_inputed[tlen+1]='\0';
}
// 修改键盘全局变量
kb_last_key=cur_key;
kb_last_keytime=time0;
m_edit1.Format("%s",kb_hz_inputed);
WinRefresh(IDC_EDIT1,m_edit1);
//enable "撤销"
GetDlgItem(IDC_KEY15)->EnableWindow(true);
return KB_OK;
}
int CKeyboardDlg::LetterKey(char cur_key,int key_circle)
{
char temp[8],temp1[32]="\0",*temp2;
int i,tlen,count;
// 判断是否存在连续按同一个键,修改kb_key_repeat值
CTime time0=CTime::GetCurrentTime();
if ((time0-kb_last_keytime<KB_KEYDELAY)&&(kb_last_key==cur_key)){
kb_key_repeat=kb_key_repeat+1;
}else{
kb_key_next=strlen(kb_key_input)+1;
kb_key_repeat=1;
}
// 修改键盘全局变量
kb_last_key=cur_key;
kb_last_keytime=time0;
// 判断当前拼音音节是否合法,如果合法从对照表里找出相应字段,更新显示
strcpy(temp,kb_key_input);
tlen=strlen(temp);
if( tlen>0 && tlen==kb_key_next && kb_key_repeat>1)
{ temp[tlen-1]=cur_key+(kb_key_repeat-1)%key_circle;
temp[tlen]='\0';
}
else
{ temp[tlen]=cur_key+(kb_key_repeat-1)%key_circle;
temp[tlen+1]='\0';
}
temp2=lookup_pytable(temp); // 查找相应的汉字字段
if (temp2==NULL){
// 发错误提示音
sndPlaySound("res://IDB_WAVE_DING",SND_SYNC);
return KB_ERROR;
}else{
if(kb_hz_field) free(kb_hz_field);
kb_hz_field=temp2;
// 修改当前音频音节
strcpy(kb_key_input,temp);
// 刷新显示
m_edit3.Format("%s",kb_key_input);
if(strlen(kb_hz_field)<=20) count=strlen(kb_hz_field)/2;
else count=10;
temp2=(char*)malloc(count*3+1);
for (i=0;i<count;i++){
temp2[3*i]='0'+i%10;
temp2[3*i+1]=kb_hz_field[2*i];
temp2[3*i+2]=kb_hz_field[2*i+1];
}
temp2[3*count]='\0';
m_edit2.Format("%s",temp2);
free(temp2);
WinRefresh(IDC_EDIT1,m_edit1);
WinRefresh(IDC_EDIT2,m_edit2);
WinRefresh(IDC_EDIT3,m_edit3);
// enable "选择"键
GetDlgItem(IDC_KEY14)->EnableWindow(true);
GetDlgItem(IDC_KEY15)->EnableWindow(true);
}
return KB_OK;
}
int CKeyboardDlg::SelectKey(int cur_key_int)
{
int hlen=strlen(kb_hz_inputed);
cur_key_int=kb_select_roll*10+cur_key_int;
kb_hz_inputed[hlen]=kb_hz_field[cur_key_int*2];
kb_hz_inputed[hlen+1]=kb_hz_field[cur_key_int*2+1];
kb_hz_inputed[hlen+2]='\0';
kb_key_repeat=0;
kb_key_next=0;
kb_last_key=0;
kb_last_keytime=0;
kb_selecting=0;
kb_select_roll=0;
strcpy(kb_key_input,"");
if (kb_hz_field)
{ free(kb_hz_field);
kb_hz_field=NULL;
}
m_edit1.Format("%s",kb_hz_inputed);
m_edit2.Format("%s","");
m_edit3.Format("%s","");
WinRefresh(IDC_EDIT1,m_edit1);
WinRefresh(IDC_EDIT2,m_edit2);
WinRefresh(IDC_EDIT3,m_edit3);
GetDlgItem(IDC_KEY12)->EnableWindow(false);
GetDlgItem(IDC_KEY13)->EnableWindow(false);
GetDlgItem(IDC_KEY15)->EnableWindow(true);
// GetDlgItem(IDC_KEY16)->EnableWindow(false);
return KB_OK;
}
void CKeyboardDlg::WinRefresh(int win_id,CString sttr)
{
CWnd *pWnd;
CDC *pDC;
pWnd=GetDlgItem(win_id);
pDC=pWnd->GetDC();
pDC->SetBkColor(RGB(0xd4,0xd0,0xcb));
pDC->SelectObject(&kb_font_English);
pWnd->Invalidate();
pWnd->UpdateWindow();
pDC->TextOut(5,5,sttr);
}
void CKeyboardDlg::SetKeyBoard()
{
switch(kb_input_mode){
case 0://数字
GetDlgItem(IDC_KEY0)->SetWindowText("0");
GetDlgItem(IDC_KEY1)->SetWindowText("1");
GetDlgItem(IDC_KEY2)->SetWindowText("2");
GetDlgItem(IDC_KEY3)->SetWindowText("3");
GetDlgItem(IDC_KEY4)->SetWindowText("4");
GetDlgItem(IDC_KEY5)->SetWindowText("5");
GetDlgItem(IDC_KEY6)->SetWindowText("6");
GetDlgItem(IDC_KEY7)->SetWindowText("7");
GetDlgItem(IDC_KEY8)->SetWindowText("8");
GetDlgItem(IDC_KEY9)->SetWindowText("9");
GetDlgItem(IDC_KEY12)->SetWindowText("-");
GetDlgItem(IDC_KEY13)->SetWindowText("+");
GetDlgItem(IDC_KEY12)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_KEY13)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_KEY14)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_KEY15)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_KEY16)->SetWindowText("输入法/数");
GetDlgItem(IDC_EDIT2)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDIT3)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDIT1)->MoveWindow(0,2,572,180,true);
break;
case 1://小写英文
GetDlgItem(IDC_KEY0)->SetWindowText("空格");
GetDlgItem(IDC_KEY1)->SetWindowText("abc");
GetDlgItem(IDC_KEY2)->SetWindowText("def");
GetDlgItem(IDC_KEY3)->SetWindowText("ghi");
GetDlgItem(IDC_KEY4)->SetWindowText("jkl");
GetDlgItem(IDC_KEY5)->SetWindowText("mn");
GetDlgItem(IDC_KEY6)->SetWindowText("opq");
GetDlgItem(IDC_KEY7)->SetWindowText("rst");
GetDlgItem(IDC_KEY8)->SetWindowText("uvw");
GetDlgItem(IDC_KEY9)->SetWindowText("xyz");
GetDlgItem(IDC_KEY12)->SetWindowText(".");
GetDlgItem(IDC_KEY13)->SetWindowText("_");
GetDlgItem(IDC_KEY14)->SetWindowText("加速");
GetDlgItem(IDC_KEY16)->SetWindowText("输入法/英");
GetDlgItem(IDC_KEY14)->ShowWindow(SW_SHOW);
break;
case 2://大写英文
GetDlgItem(IDC_KEY1)->SetWindowText("ABC");
GetDlgItem(IDC_KEY2)->SetWindowText("DEF");
GetDlgItem(IDC_KEY3)->SetWindowText("GHI");
GetDlgItem(IDC_KEY4)->SetWindowText("JKL");
GetDlgItem(IDC_KEY5)->SetWindowText("MN");
GetDlgItem(IDC_KEY6)->SetWindowText("OPQ");
GetDlgItem(IDC_KEY7)->SetWindowText("RST");
GetDlgItem(IDC_KEY8)->SetWindowText("UVW");
GetDlgItem(IDC_KEY9)->SetWindowText("XYZ");
break;
case 3://中文
GetDlgItem(IDC_KEY0)->SetWindowText("0/加速");
GetDlgItem(IDC_KEY1)->SetWindowText("1 ABC");
GetDlgItem(IDC_KEY2)->SetWindowText("2 DEF");
GetDlgItem(IDC_KEY3)->SetWindowText("3 GHI");
GetDlgItem(IDC_KEY4)->SetWindowText("4 JKL");
GetDlgItem(IDC_KEY5)->SetWindowText("5 MN");
GetDlgItem(IDC_KEY6)->SetWindowText("6 OPQ");
GetDlgItem(IDC_KEY7)->SetWindowText("7 RST");
GetDlgItem(IDC_KEY8)->SetWindowText("8 UVW");
GetDlgItem(IDC_KEY9)->SetWindowText("9 XYZ");
GetDlgItem(IDC_KEY12)->SetWindowText("前翻页");
GetDlgItem(IDC_KEY13)->SetWindowText("后翻页");
GetDlgItem(IDC_KEY14)->SetWindowText("选择");
GetDlgItem(IDC_KEY16)->SetWindowText("输入法/汉");
GetDlgItem(IDC_KEY12)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_KEY13)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_KEY14)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_KEY15)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_KEY12)->EnableWindow(false);
GetDlgItem(IDC_KEY13)->EnableWindow(false);
GetDlgItem(IDC_KEY14)->EnableWindow(false);
GetDlgItem(IDC_EDIT1)->MoveWindow(0,2,572,122,true);
GetDlgItem(IDC_EDIT2)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_EDIT3)->ShowWindow(SW_SHOW);
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -