mmihz.c
来自「是一个手机功能的模拟程序」· C语言 代码 · 共 1,669 行 · 第 1/5 页
C
1,669 行
/*******************************************************************************
$Function: hz_exec_cb
$Description: Dialog function for chinese win.
$Returns: None.
$Arguments: None.
*******************************************************************************/
static void hz_exec_cb(T_MFW_HND win, USHORT event, SHORT value, T_MFW_KBD *kc)
{
T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
T_HZ_INFO * data = (T_HZ_INFO *)win_data->user;
T_MFW_HND parent_win = data->parent;
T_MFW_WIN *parentwin_data =((T_MFW_HDR *)parent_win)->data;
T_EDITOR_INFO *parentdata =(T_EDITOR_INFO *)parentwin_data->user;
MfwHdr *edit_hdr=(MfwHdr *)parentdata->edt_edt;
MfwEdt *edit_controll=(MfwEdt *)edit_hdr->data;
// MfwEdtAttr * edtattr=&parentdata->editor_data.editor_attr;
T_MFW_HND * l_parent;
char msg[100];
TRACE_EVENT("hz_exec_cb()");
sprintf(msg,"win:%d",(int *)win);
TRACE_EVENT(msg);
switch(event)
{
case HZINIT:
data->InitPx=56;
data->InitPy=98;
data->CurPx=data->InitPx;
data->CurPy=data->InitPy;
data->memoryPx=0;
data->memoryPy=0;
memset(data->memoryBuf,0,sizeof(data->memoryBuf));
InitializeForChineseInput(&data->chineseData);
if((int)kc->code==KCD_0||(int)kc->code==KCD_OK||(int)kc->code==KCD_ABC
||getSymbolNumSpare(edit_controll)<1)
{
hz_destroy(data->hz_win);
return;
}
data->l_intimelong = timCreate(data->hz_win, TIM_TAKE_OVERLONG, (MfwCb)TimerEH);
timStart(data->l_intimelong);
data->l_intime = timCreate(data->hz_win, TIM_TAKE_OVER, (MfwCb)TimerEH);
timStart(data->l_intime);
Input_one_key(win,(int) kc->code);
data->hz_kbd = kbdCreate(data->hz_win, KEY_ALL, (MfwCb) hzEventKbd);
sprintf(msg,"zxp beforeinput:%s",(char *)data->chineseData.ConditionStr);
TRACE_EVENT(msg);
//Input_one_key(win,(int) kc->code);
break;
case HZEXIT:
hz_destroy(data->hz_win);
break;
}
}
/*******************************************************************************
$Function: hz_destroy
$Description: Destroy the hz_win.
$Returns: None.
$Arguments: None.
*******************************************************************************/
void hz_destroy (T_MFW_HND window)
{
T_MFW_WIN * win = ((T_MFW_HDR *)window)->data;
T_HZ_INFO * data = (T_HZ_INFO *)win->user;
T_MFW_HND parent_win =data->parent;
T_MFW_WIN *parentwin_data =((T_MFW_HDR *)parent_win)->data;
T_EDITOR_INFO *parentdata =(T_EDITOR_INFO *)parentwin_data->user;
// MfwHdr *edit_hdr=(MfwHdr *)parentdata->edt_edt;
// MfwEdt *edit_controll=(MfwEdt *)edit_hdr->data;
TRACE_EVENT ("hz_destroy()");
if (data)
{
g_norejectkeyflag=0;
if((!editForChineseInput)&&(!(parentdata->editor_data.edtInPbk)))
editForChineseInput=1;
parentdata->hz_input=NULL;
// kbd_delete (data->hz_kbd);
win_delete (data->hz_win);
// edit_controll->cp_curr_x=0;//reset the flag.we set it in editorkeycb before hz_start.
/*
* Free Memory
*/
FREE_MEMORY ((void *)data, sizeof (T_HZ_INFO));
}
else
{
return ;
}
}
static void DispPromptBuf(T_MFW_HND win)
{
T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
T_HZ_INFO * data = (T_HZ_INFO *)win_data->user;
char* ConditionStr =(char*)data->chineseData.ConditionStr;
unsigned short* ConditionHz=(unsigned short*)data->chineseData.ConditionHz;
unsigned short Word,memoryWord,TempBuf[20];
char Ch[5],memoryCh[5],HzTempbuf[8],CharTempBuf[20],CharPromptBuf[200];
char msg[100];
USHORT px;
UINT32 oldColor,oldFontColor;
U8 mode;
TRACE_EVENT("DispPromptBuf");
mode=dspl_Enable(0);
if(wordstrcmp(data->chineseData.PromptBuf, data->memoryBuf)!=0/*||dsplflag==0*/||flagForNewWin==1)/*&&InTheTime==0*/
dspl_Clear(0, 82, 120, 131);
memset(TempBuf,0,sizeof(TempBuf));
memset(HzTempbuf,0,sizeof(HzTempbuf));
memset(CharTempBuf,0,sizeof(CharTempBuf));
memset(CharPromptBuf,0,sizeof(CharPromptBuf));
if(wordstrlen(ConditionHz))
strcpy(CharTempBuf,"");
else if(strlen(ConditionStr)&&(ConditionStr[5]!=':')){
if(data->chineseData.InTheTime)
sprintf(CharTempBuf," %s ",ConditionStr);
else sprintf(CharTempBuf," %s_ ",ConditionStr);
}
else if(strlen(ConditionStr)&&(ConditionStr[5]==':')){
sprintf(CharTempBuf," %s ",ConditionStr);
}
if(data->chineseData.PageNum)
{ CharTempBuf[11]='<';
CharTempBuf[12]='-';
CharTempBuf[13]=' ';
}
if(data->chineseData.SatisfyNum>data->chineseData.MAX_Satisfy)
{
CharTempBuf[12]='-';
CharTempBuf[13]='>';
}
else {
CharTempBuf[13]=' ';
}
CharTempBuf[14]='\0';
//oldColor=dspl_GetBkgColor();
//dspl_SetBkgColor(0xe6ffff);
dspl_TextOut(0 , 82, 0,CharTempBuf);
//dspl_SetBkgColor(oldColor);
//else dspl_TextOut(0 , 78,0,CharTempBuf);
while(data->chineseData.SatisfyNum<=(data->CurPy-data->InitPy)/16*5&&data->CurPy>data->InitPy)
data->CurPy-=16;
while(data->chineseData.SatisfyNum<((data->CurPy-data->InitPy)/16*5+data->CurPx/24+1)&&data->CurPx>8)
data->CurPx-=24;
if((ConditionStr[5] != ':')/*&&(InTheTime==0)*/){//Chinese
if(wordstrcmp(data->chineseData.PromptBuf, data->memoryBuf)==0/*&&dsplflag==1&&(memoryBuf!=NULL)*/&&(!flagForNewWin))
{
TRACE_EVENT("buf not changed");
memoryWord=data->memoryBuf[((data->memoryPy-data->InitPy)/16*5+data->memoryPx/24)*2+1];
memoryCh[0]=0x80;
memoryCh[1]=(char)(memoryWord>>8);
memoryCh[2]=(char)memoryWord;
memoryCh[3]='\0';
memoryCh[4]='\0';
dspl_TextOut(data->memoryPx, data->memoryPy, DSPL_TXTATTR_UNICODE, memoryCh);
}
else {
TRACE_EVENT("buf changed");
Wbuf2Cbuf(CharPromptBuf,data->chineseData.PromptBuf);
CharPromptBuf[41] ='\0';
CharPromptBuf[42] ='\0';
set_font_type(CHNINPUT_FONT);
dspl_TextOut(0 , data->InitPy, DSPL_TXTATTR_UNICODE,CharPromptBuf);
// dsplflag=1;
}
Word=(unsigned short)data->chineseData.PromptBuf[((data->CurPy-data->InitPy)/16*5+data->CurPx/24)*2+1];
Ch[0]=0x80;
Ch[1]=(char)(Word>>8);
Ch[2]=(char)Word;
Ch[3]='\0';
Ch[4]='\0';
dspl_colorTextOut(data->CurPx, data->CurPy, DSPL_TXTATTR_INVERS|DSPL_TXTATTR_UNICODE, Ch,0x008080);
}
else /*if(InTheTime==0)*/{ //Label
if(wordstrcmp(data->chineseData.PromptBuf, data->memoryBuf)==0/*&&dsplflag==1&&(memoryBuf!=NULL)*/&&(!flagForNewWin))
{
TRACE_EVENT("buf not changed");
if(data->chineseData.PageNum==0)
{ if(data->memoryPy==data->InitPy&&data->memoryPx<=data->InitPx)
memoryWord=data->memoryBuf[(data->memoryPx/24)*2+1];
else if(data->memoryPy==data->InitPy&&data->memoryPx>=80)
memoryWord=data->memoryBuf[7+(data->memoryPx-80)/24*2+1];
else memoryWord=data->memoryBuf[11+(data->memoryPx/24)*3+1];
}
else memoryWord=data->memoryBuf[(data->memoryPy-data->InitPy)/16*15+(data->memoryPx/24)*3+1];
Sprintf(msg,"memoryword:%d",memoryWord);
TRACE_EVENT(msg);
memoryCh[0]=0x80;
memoryCh[1]=(char)(memoryWord>>8);
memoryCh[2]=(char)memoryWord;
memoryCh[3]='\0';
memoryCh[4]='\0';
dspl_TextOut(data->memoryPx, data->memoryPy, DSPL_TXTATTR_UNICODE, memoryCh);
}
else{
TRACE_EVENT("buf changed");
Wbuf2Cbuf(CharPromptBuf,data->chineseData.PromptBuf);
// TraceMMI(CharPromptBuf);
if(data->chineseData.PageNum==0)
{ CharPromptBuf[52]='\0';
CharPromptBuf[53]='\0';
}
else {CharPromptBuf[60]='\0';
CharPromptBuf[61]='\0';
}
// oldColor=dspl_GetBkgColor();
//dspl_SetBkgColor(0xffe1e1);
dspl_TextOut(0 , data->InitPy, DSPL_TXTATTR_UNICODE,CharPromptBuf);
// dspl_SetBkgColor(oldColor);
// dsplflag=1;
}
if(data->chineseData.PageNum==0)
{ if(data->CurPy==data->InitPy&&data->CurPx<=data->InitPx)
Word=data->chineseData.PromptBuf[(data->CurPx/24)*2+1];
else if(data->CurPy==data->InitPy&&data->CurPx>=80)
Word=data->chineseData.PromptBuf[7+(data->CurPx-80)/24*2+1];
else Word=data->chineseData.PromptBuf[11+(data->CurPx/24)*3+1];
}
else Word=data->chineseData.PromptBuf[(data->CurPy-data->InitPy)/16*15+(data->CurPx/24)*3+1];
Ch[0]=0x80;
Ch[1]=(char)(Word>>8);
Ch[2]=(char)Word;
Ch[3]='\0';
Ch[4]='\0';
//oldColor=dspl_GetBkgColor();
//dspl_SetBkgColor(0xffe1e1);
dspl_colorTextOut(data->CurPx, data->CurPy, DSPL_TXTATTR_INVERS|DSPL_TXTATTR_UNICODE, Ch,0x008080);
//dspl_SetBkgColor(oldColor);
// displaySoftKeys(TxtSoftSelect, TxtSoftBack);
}
data->memoryPx=data->CurPx;
data->memoryPy=data->CurPy;
memset(data->memoryBuf, 0, sizeof(data->memoryBuf));
wordstrcat(data->memoryBuf, data->chineseData.PromptBuf);
/*
oldColor=dspl_GetBkgColor();
dspl_SetBkgColor(GetPreDefinedColor(ColorSoftKeyBG));
oldFontColor=dspl_GetFrgColor();
dspl_SetFrgColor(GetPreDefinedColor(ColorSoftKeyFont));
*/
if(wordstrlen(ConditionHz)||(strlen(ConditionStr)&&(ConditionStr[5]==':')))
displaySoftKeys(TxtSoftSelect, TxtSoftBack);
else if(strlen(ConditionStr)&&(ConditionStr[5]!=':'))
displaySoftKeys(TxtSoftOK, TxtDelete);
/*
dspl_SetBkgColor(oldColor);
dspl_SetFrgColor(oldFontColor);
*/
//dspl_SetFrgColor(0x0000ff);
dspl_DrawRect(0, 82, 119, 131);
//dspl_SetFrgColor(oldFontColor);
dspl_Enable(mode);
}
#if 0
static int PinYinCode(char * ConditionStr,char CheckChar)
{ int Loop;
// char g_str[10];
for(Loop=0;Loop<MaxPinYin;Loop++)
{ if ( strncmp(Table[Loop],ConditionStr,strlen(ConditionStr))==0 &&
Table[Loop][strlen(ConditionStr)]==CheckChar )
return 1;
}
return 0;
}
static void SetOtherMightChar(chinese_Data* pchinese_Data,int KeyCode)
{ unsigned int Position;
Position=0;
memset(pchinese_Data->OtherMightChar,0,sizeof(pchinese_Data->OtherMightChar));
while(KeyCode>1 && strlen(InputMethodOtherChar[KeyCode-2])!=Position)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?