⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmichineseinput.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 5 页
字号:
                    /*
                    if( data->Ime.PinyinElementBUF[data->Ime.ElementNumber-1].Count == 1 )
                    {
                        return;
                    }

                    if(data->Ime.Element_Select == data->Ime.PinyinElementBUF[data->Ime.ElementNumber-1].Count-1)
                    {
                        data->Ime.Element_Select = 0;
                    }
                    else
                    {
                        data->Ime.Element_Select++;
                    }
                    candidate_num = Zi_GetElementCandidates(&data->Ime);
                    */
                    data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
                    winShow(win);
                }
                break;

            default:
                break;
            }
            break;
        case KCD_2:
        case KCD_3:
        case KCD_4:
        case KCD_5:
        case KCD_6:
        case KCD_7:
        case KCD_9: 
            switch ( data->Ime.EditorMode )
            {
            case STROKE_INPUT_MODE:
                data->Ime.InputScreenType = STROKE_INPUT_SCREEN;
                IMEKeyPress(&data->Ime, (ZI8WCHAR) (ZiStrokeKeyMap[value][1] + ZI8_BASE_STROKES));
                data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
                winShow(win);
                break;
            case PINYIN_INPUT_MODE:
                temp_ZiKeyMap = (PZI8WCHAR )ZiPinYinKeyMap[value-1];
                data->Ime.InputScreenType = PINYIN_INPUT_SCREEN;
                Zi_onekey_keypress(&data->Ime, temp_ZiKeyMap);
                data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
                winShow(win);
                break;

            default:
                break;
            }
            break;
        default:
            win_show (win);
            break;
        }
        break;
    case CHINESE_INPUT_DESTROY:
        {/* on DEINIT => selfdestroy; sendevent <value> */
            int i;

            if ( data->Callback_Data.DestroyEditor == TRUE )
            {
                ZI8WCHAR Temp, LowByte, HighByte;


                for ( i = 0; i < (/*data->Ime.TextBufferCount*/data->Callback_Data.EditorSize ); i++ )
                {
                    Temp = data->wszTextBuffer[i];
                    LowByte = data->wszTextBuffer[i] & 0x00FF;
                    HighByte = data->wszTextBuffer[i] & 0xFF00;
                    Temp = (LowByte << 8) & 0xFF00;
                    HighByte = (HighByte >> 8) & 0x00FF;
                    Temp = Temp |HighByte;
                    data->wszTextBuffer[i] = Temp;
                }
            }
            for ( i=(data->Ime.TextBufferCount ); i < TEXT_BUFFER_EDIT_SIZE; i++ )
                data->wszTextBuffer[/*data->Ime.TextBufferCount*/i] = 0x0000;//terminate string

            if ( Callback )
            { //TRACE_EVENT("Running Callback");
                (Callback) (parent_win, Identifier, value);
                sprintf(debug, "Identifier: %d", Identifier);
                //TRACE_EVENT(debug);
            }


            if ( data->Callback_Data.DestroyEditor == TRUE )
            {
                chinese_input_destroy(win);
            }
        }

        break;
    case ADD_SYMBOL:
        if ( data->Ime.TextBufferCount < TEXT_BUFFER_EDIT_SIZE )
        {
            int i=0;
            int j=0;

            if ( data->Ime.TextCursor < data->Ime.TextBufferCount ) /* locate the text cursor position for correct character insertion */
            {
                for ( i=data->Ime.TextCursor; i<data->Ime.TextBufferCount; i++ ) /* shift and move characters to make rooms to insert the selected character */
                {
                    //pIME->pTextBuffer[pIME->TextBufferCount - i + 1]=pIME->pTextBuffer[pIME->TextBufferCount - i];
                    data->Ime.pTextBuffer[data->Ime.TextBufferCount - j]=data->Ime.pTextBuffer[data->Ime.TextBufferCount - j - 1];
                    j++;
                }
            }

            //data->Ime.pTextBuffer[data->Ime.TextCursor++]= (ZI8WCHAR)(SymbolChar << 8);
            data->Ime.TextBufferCount++;
        }
        win_show(win);
        break;
    case LATIN_INPUT:
        data->Ime.TextBufferCount = Uni_strlen(data->Ime.pTextBuffer);
        data->Ime.TextCursor = data->Ime.TextBufferCount;
        break;
    }
}


/*******************************************************************************

 $Function:    	chinese_input_win_cb

 $Description:	
 
 $Returns:		void

 $Arguments:	window handle event, win
*******************************************************************************/
static int chinese_input_win_cb (T_MFW_EVENT event, T_MFW_WIN * win)
{
    T_chinese_input * data = (T_chinese_input *)win->user;
    int i = 0;
    int j = 0;
    PZI8WCHAR   Temp_ptr;
    UINT32 oldColor;    /* 2003/10/13 sunsj */
    int current_pixel;  /* 2003/10/13 sunsj */
    int current_x = 0, current_y = 0;   /* 2003/10/13 sunsj */
    BOOL conver_page = FALSE;   /* 2003/10/13 sunsj */
	char spareNum[10];

    //TRACE_EVENT ("chinese_input_win_cb()");

    if ( data EQ 0 )
        return 1;
    switch ( event )
    {
    case E_WIN_VISIBLE:
        if ( win->flags & E_WIN_VISIBLE )
        {
            /* Print the information dialog */
            /* Clear Screen */
            oldColor=dspl_GetBkgColor();
            dspl_SetBkgColor(0xe6ffff);
            dspl_Clear(0,0,120,131);
            //dspl_ClearAll();
            //dspl_BitBlt(0, 0, menuup[0].area.sx, menuup[0].area.sy, 0, (void*)menuup[0].icons, 0);
			DRAW_ICON(ICON_MENUUP);
			sprintf(spareNum, "%d", (data->Ime.TextBufferEditSize/2 - data->Ime.TextBufferCount));
            switch ( data->Ime.InputScreenType )
            {
            case TEXT_DISPLAY_SCREEN:
                {
                    /* This section of the code was written to display the data stored in the text buffer. The text cursor position */
                    /* was also taken into consideration to display the correct portion of text during editing (when data stored in */
                    /* the text buffer is more than two line display.   */
                    ZI8WCHAR TempArray[CANDIDATES_PER_GROUP*2]; //maximum no of chars possible in a line
                    ZI8WCHAR TempArray2[CANDIDATES_PER_GROUP+1];
                    int i;
                    int space_counter;

                    UBYTE first_line= 0; //no of chars in first line(set to minimum)
                    UBYTE second_line=0; //no of chars in second line

                    //dspl_BitBlt(75,0,LINE_HEIGHT,LINE_HEIGHT,0,(char*)TextIconeZiTextSmall,0); 

                    memset(TempArray, 0, CANDIDATES_PER_GROUP*2);
                    //dspl_TextOut(4,FIRST_LINE,DSPL_TXTATTR_UNICODE,(char*)data->wszTextBuffer);
#if 0
                    if ( data->Ime.TextBufferCount == 0 ) //If text buffer is empty
                    {
                        displaySoftKeys(data->Callback_Data.LeftSoftKey,TxtSoftBack);   /* Softkey display*/
                    }
                    else if ( data->Ime.TextBufferCount <= (CANDIDATES_PER_GROUP * 2) ) // data in text buffer is within 2 lines
                    {
                        for ( i=0; i<CANDIDATES_PER_GROUP; i++ )
                            TempArray[i]= data->wszTextBuffer[data->StartOfDisplayIndex+ i];
                        TempArray[CANDIDATES_PER_GROUP] = 0x0000;

                        dspl_TextOut(1,Mmi_layout_first_line(),DSPL_TXTATTR_UNICODE,(char*)/*Temp_ptr*/TempArray);
                        if ( data->Ime.TextBufferCount > CANDIDATES_PER_GROUP )
                        {
                            //Temp_ptr += CANDIDATES_PER_GROUP;
                            for ( i=0; i<CANDIDATES_PER_GROUP; i++ )
                                TempArray2[i]= data->wszTextBuffer[data->StartOfDisplayIndex+ i+CANDIDATES_PER_GROUP];
                            TempArray2[CANDIDATES_PER_GROUP] = 0x0000;
                            dspl_TextOut(1,Mmi_layout_second_line(),DSPL_TXTATTR_UNICODE,(char *)TempArray2);
                        }
                        j = (data->Ime.TextCursor / CANDIDATES_PER_GROUP) + 1;
                        TextCursorDisplayContorl(&data->Ime, data->CursorPosition, j);

                        /* 2003/10/13 sunsj/ mark */
                        //displaySoftKeys(data->Callback_Data.LeftSoftKey,TxtDelete);     /* Softkey display*/
                    }
                    else // data in text buffer is more than 14 characters. 
                    {
                        if ( data->Ime.TextCursor == data->StartOfDisplayIndex )
                        {
                            for ( i=0; i<CANDIDATES_PER_GROUP; i++ )
                                TempArray[i]= data->wszTextBuffer[data->StartOfDisplayIndex+ i];
                            //Temp_ptr = &data->wszTextBuffer[data->StartOfDisplayIndex];
                            TempArray[CANDIDATES_PER_GROUP] = 0x0000;
                            dspl_TextOut(1,Mmi_layout_first_line(),DSPL_TXTATTR_UNICODE,(char *)TempArray);
                            //Temp_ptr += CANDIDATES_PER_GROUP;
                            for ( i=0; i<CANDIDATES_PER_GROUP; i++ )
                                TempArray2[i]= data->wszTextBuffer[data->StartOfDisplayIndex+ i +CANDIDATES_PER_GROUP];
                            TempArray2[CANDIDATES_PER_GROUP] = 0x0000;
                            dspl_TextOut(1,Mmi_layout_second_line(),DSPL_TXTATTR_UNICODE,(char *)TempArray2);
                            TextCursorDisplayContorl(&data->Ime, data->CursorPosition, 1); 
                        }
                        else if ( data->Ime.TextCursor > data->StartOfDisplayIndex )
                        {
                            while ( data->Ime.TextCursor - data->StartOfDisplayIndex >= CANDIDATES_PER_GROUP*2 )
                            {
                                data->StartOfDisplayIndex = data->StartOfDisplayIndex + CANDIDATES_PER_GROUP;
                            }
                            //Temp_ptr = &data->wszTextBuffer[data->StartOfDisplayIndex];
                            for ( i=0; i<CANDIDATES_PER_GROUP; i++ )
                                TempArray[i]= data->wszTextBuffer[data->StartOfDisplayIndex+ i];
                            TempArray[CANDIDATES_PER_GROUP] = 0x0000;
                            dspl_TextOut(1,Mmi_layout_first_line(),DSPL_TXTATTR_UNICODE,(char *)TempArray);

                            //Temp_ptr += CANDIDATES_PER_GROUP;
                            for ( i=0; i<CANDIDATES_PER_GROUP; i++ )
                                TempArray2[i]= data->wszTextBuffer[data->StartOfDisplayIndex+ i +CANDIDATES_PER_GROUP];
                            TempArray2[CANDIDATES_PER_GROUP] = 0x0000;
                            dspl_TextOut(1,Mmi_layout_second_line(),DSPL_TXTATTR_UNICODE,(char *)TempArray2);

                            if ( (data->Ime.TextCursor - data->StartOfDisplayIndex) < CANDIDATES_PER_GROUP )
                                j = 1;
                            else if ( (data->Ime.TextCursor - data->StartOfDisplayIndex) < CANDIDATES_PER_GROUP * 2 )
                                j = 2;
                            TextCursorDisplayContorl(&data->Ime, data->CursorPosition, j);
                        }
                        else if ( data->Ime.TextCursor < data->StartOfDisplayIndex && data->StartOfDisplayIndex != 0 )
                        {
                            data->StartOfDisplayIndex = data->StartOfDisplayIndex - CANDIDATES_PER_GROUP;
                            //Temp_ptr = &data->wszTextBuffer[data->StartOfDisplayIndex];
                            for ( i=0; i<CANDIDATES_PER_GROUP; i++ )
                                TempArray[i]= data->wszTextBuffer[data->StartOfDisplayIndex+ i ];
                            TempArray[CANDIDATES_PER_GROUP] = 0x0000;
                            dspl_TextOut(1,Mmi_layout_first_line(),DSPL_TXTATTR_UNICODE,(char *)TempArray);
                            //Temp_ptr += CANDIDATES_PER_GROUP;
                            for ( i=0; i<CANDIDATES_PER_GROUP; i++ )
                                TempArray2[i]= data->wszTextBuffer[data->StartOfDisplayIndex+ i +CANDIDATES_PER_GROUP];
                            TempArray2[CANDIDATES_PER_GROUP] = 0x0000;
                            dspl_TextOut(1,Mmi_layout_second_line(),DSPL_TXTATTR_UNICODE,(char *)TempArray2);
                            if ( (data->Ime.TextCursor - data->StartOfDisplayIndex) < CANDIDATES_PER_GROUP )
                                j = 1;
                            else if ( (data->Ime.TextCursor - data->StartOfDisplayIndex) < CANDIDATES_PER_GROUP * 2 )
                                j = 2;
                            TextCursorDisplayContorl(&data->Ime, data->CursorPosition, j);
                        }
                        displaySoftKeys(data->Callback_Data.LeftSoftKey,TxtDelete);     /* Softkey display*/
                    }
#endif
                }
                break;
            case STROKE_INPUT_SCREEN:
                /* Display the correct portion composed text stored in wszTextBuffer. If the text cursor is not pointing at */
                /* the end of the text buffer, the display content is then adjusted to display the correct portion of the   */
                /* text buffer.																				  */

                current_x = 0;
                current_y = FIRST_LINE;
                conver_page = FALSE;
                j=0;
                UnicodeConver(data->wszTextBuffer, data->wszTextBuffer);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -