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

📄 mmistopwatch.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 5 页
字号:
    winShow(win);
    return data->win;
}

/* 秒钟窗口事件处理函数 若记录不满则启动定时器,开始计时 */
static void stopw_DialogCB (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
{
    T_MFW_WIN      *win_data    = ( (T_MFW_HDR *) win )->data;
    StopwData      *data        = (StopwData *) win_data->user;
    T_EDITOR_DATA   editor_data;
    T_DISPLAY_DATA  display_info;

    TRACE_EVENT("stopw_DialogCB");

    data->event = event;
    data->type  = value;   
    switch( event )
    {
    case STOPW_COUNT:
        strcpy((char*)data->timebuffer,"00:00:00:0");           
        data->RightKey=TRUE;        
        data->recordNumber=0;
        winShow(win); 
        //dspl_Clear(20, 69, 117, 89);
        reset();
        data->groupNumber=StopwMemoRead();//gdy add 27/08/02   
        if( data->groupNumber>4 )             //记录满
        {
            dialog_info_init(&display_info);//gdy add

            display_info.TextId2     =TxtFull;          
            display_info.Time       = FOREVER;
            display_info.Callback     = (T_VOID_FUNC)NULL;//sepa_dialog_cb;
            display_info.iconindex = REMIND_NORECORD;           
            /*
            * Call Info Screen
            */
            info_dialog (win, &display_info);
            stopwatch_destroy(stopw_win);
            break;
        }
        data->kbd =  kbd_create(win, KEY_ALL, (T_MFW_CB)stopw_kbd_cb);
        data->info_tim=timCreate(data->win,100,(T_MFW_CB)stopw_tim_cb); //0.1S为单位
        tim_start(data->info_tim);          
        break;
    case STOPW_EXIT:
        stopwatch_destroy(win);
        break;
    }
}
/* 定时器溢出处理函数 不满一小时继续启动定时器 满一小时 */
static T_MFW_CB  stopw_tim_cb(MfwEvt e, MfwTim *tc) 
{
    T_MFW_HND       win         = mfw_parent (mfw_header());
    T_MFW_WIN     * win_data    = ((T_MFW_HDR *)win)->data;
    StopwData     * data        = (StopwData*)win_data->user;
    T_DISPLAY_DATA  display_info;  
    unsigned int    t           = 0;
    char            str[4];


    TRACE_EVENT("stopwatch_tim_cb");

    if( data->counter<36000 )   /*The maxmum record number is 5 by name*/
    {
        if( data->recordNumber<A_GROUP_NUMBER )  /*Tne maxemu record number of each name is 40*/
        {
            data->counter++;           
            tim_start(data->info_tim);
        }
        else
        {
            data->groupNumber++;
            data->recordNumber=0;
            tim_stop(data->info_tim);         
            //SEND_EVENT(win, SUBMENU, data->Identifier,0);/*create submenu to choice the next step*/		
        }
        sprintf((char*)str,"%02d:",data->counter/36000);
        strcpy((char*)data->timebuffer,(char*)str);
        sprintf((char*)str,"%02d:",(data->counter%36000)/600);
        strcat((char*)data->timebuffer,(char*)str);
        sprintf((char*)str,"%02d:",((data->counter%36000)%600)/10);
        strcat((char*)data->timebuffer,(char*)str);
        sprintf((char*)str,"%d",((data->counter%36000)%600)%10);
        strcat((char*)data->timebuffer,(char*)str);      

        /*
        * Print the elapsed time
        */

        /*  2003.11.19 WYJ 修正电话进来时窗口显示的bug */
        if( (stopw_win NEQ NULL) && winIsFocussed(stopw_win) )
#if(MAIN_LCD_SIZE==4)
			dspl_colorTextOut(28, 72, 0,(char*)data->timebuffer,0x5474A7);		
#elif (MAIN_LCD_SIZE==3)
            dspl_colorTextOut(20, 18, 0,(char*)data->timebuffer,0x5474A7);
#endif
		    /***end yhf modify***/
        //dspl_colorTextOut(22, 66, 0,(char*)data->timebuffer,0x0000ff);

        /*
        * Print softkeys         */
    }
    else
    {
        dialog_info_init(&display_info);//gdy add
        display_info.KeyEvents    = KEY_OK | KEY_RIGHT | KEY_LEFT;
        display_info.LeftSoftKey  = '\0';
        display_info.RightSoftKey = TxtSoftBack;
        display_info.TextString   = '\0';
        display_info.TextString2  = '\0';
        display_info.TextId2     =TxtFull;
        display_info.TextId      = '\0';
        display_info.Time       = FOREVER;
        display_info.Callback     = (T_VOID_FUNC)NULL;//sepa_dialog_cb;
        display_info.iconindex = REMIND_COMPLETE;
        display_info.Identifier =0;
        /*
        * Call Info Screen
        */
        info_dialog (win, &display_info);
        stopwatch_destroy(stopw_win);
    } 

    return 0;
}

/* 秒表窗口显示回调函数 */
static int  stopw_win_cb (T_MFW_EVENT event, T_MFW_WIN * win)
{
    StopwData* data = (StopwData *)win->user;
    T_DISPLAY_DATA display_info;
    char str[4];
    int old_color;
    game_Line line;

    TRACE_EVENT ("stopw_win_cb()");

    if( data EQ 0 )
        return 1;

    switch( event )
    {
    case E_WIN_VISIBLE:
        if( win->flags & E_WIN_VISIBLE )
        {
			U8 uMode = 0;
			uMode = dspl_Enable(0);
			
        	//title display
            dspl_ClearAll(); 
#if(MAIN_LCD_SIZE==3)
			/* 2004/05/18 yhf modify */
			TD_drawBkg(BG_rect, BG_attr);
#endif
            /* 2004/06 sunsj modify for picture manage */
            DRAW_ICON(ICON_MENUUP);
            /*
            dspl_BitBlt( menuup[FlashSettingData.theme].area.px,menuup[FlashSettingData.theme].area.py,
                         menuup[FlashSettingData.theme].area.sx,menuup[FlashSettingData.theme].area.sy,
                         menuup[FlashSettingData.theme].nIcons,menuup[FlashSettingData.theme].icons,0);
            */
			
			// icon display
#if(MAIN_LCD_SIZE==4)
			/* 2004/05/31 yhf modify */
			if( !data->type )
                dspl_colorTextOut(28, 0, DSPL_TXTATTR_TRANSPARENT, MmiRsrcGetText(TxtSeparately), 0x0);
            else
                dspl_colorTextOut(28, 0, DSPL_TXTATTR_TRANSPARENT, MmiRsrcGetText(TxtBycircle), 0x0); 
			if( data->type )
			{
                DRAW_ICON_ATTRIBUTE(ICON_STOPWATCH_CIRCLE, 2, 72, 0, ICON_LOCATION|ICON_MASK_OWN);
                /*
                dspl_BitBlt(2, 71, 12, 12, 0, (void *)circle, DSPL_BMPXOR);
				dspl_BitBlt(2, 71, 12, 12, 0, (void *)circle_mask, DSPL_BMPAND);
				dspl_BitBlt(2, 71, 12, 12, 0, (void *)circle, DSPL_BMPXOR);
                */
			}
            else
			{
                DRAW_ICON_ATTRIBUTE(ICON_STOPWATCH_SEPA, 2, 72, 0, ICON_LOCATION|ICON_MASK_OWN);
                /*
                dspl_BitBlt(2, 71, 12, 12, 0, (void *)sepa, DSPL_BMPXOR);
				dspl_BitBlt(2, 71, 12, 12, 0, (void *)sepa_mask, DSPL_BMPAND);
				dspl_BitBlt(2, 71, 12, 12, 0, (void *)sepa, DSPL_BMPXOR);
                */
			}
#elif(MAIN_LCD_SIZE==3)
			if( !data->type )
                dspl_colorTextOut(32, 0, DSPL_TXTATTR_TRANSPARENT, MmiRsrcGetText(TxtSeparately), 0x0);
            else
                dspl_colorTextOut(32, 0, DSPL_TXTATTR_TRANSPARENT, MmiRsrcGetText(TxtBycircle), 0x0);
			if( data->type )
			{
                DRAW_ICON_ATTRIBUTE(ICON_STOPWATCH_CIRCLE, 2, 20, 0, ICON_LOCATION|ICON_MASK_OWN);
                /*
                dspl_BitBlt(2, 71, 12, 12, 0, (void *)circle, DSPL_BMPXOR);
				dspl_BitBlt(2, 71, 12, 12, 0, (void *)circle_mask, DSPL_BMPAND);
				dspl_BitBlt(2, 71, 12, 12, 0, (void *)circle, DSPL_BMPXOR);
                */
			}
            else
			{
                DRAW_ICON_ATTRIBUTE(ICON_STOPWATCH_SEPA, 2, 20, 0, ICON_LOCATION|ICON_MASK_OWN);
                /*
                dspl_BitBlt(2, 71, 12, 12, 0, (void *)sepa, DSPL_BMPXOR);
				dspl_BitBlt(2, 71, 12, 12, 0, (void *)sepa_mask, DSPL_BMPAND);
				dspl_BitBlt(2, 71, 12, 12, 0, (void *)sepa, DSPL_BMPXOR);
                */
			}
#endif		

#if(MAIN_LCD_SIZE==4)
			drawSolidRectangle(20, 69, 116 , 88, 1,0xFFFFFF,0x95668A);//0x5AC7FF			

            line.x1=20;
            line.x2=116;
            line.y1=89;
            line.y2=89;
            line.color=0xCDAAC5;
            DrawLine(line);

            line.x1=117;
            line.x2=117;
            line.y1=69;
            line.y2=88;
            line.color=0xCDAAC5;
            DrawLine(line);

			dspl_colorTextOut(28, 72, DSPL_TXTATTR_TRANSPARENT,(char*)data->timebuffer,0x000000);			
#elif(MAIN_LCD_SIZE==3)
		    
			drawSolidRectangle(20, 18, 99, 30, 1,0xFFFFFF,0x95668A);//0x5AC7FF			

            line.x1=20;
            line.x2=99;
            line.y1=31;
            line.y2=31;
            line.color=0xCDAAC5;
            DrawLine(line);

            line.x1=99;
            line.x2=99;
            line.y1=19;
            line.y2=30;
            line.color=0xCDAAC5;
            DrawLine(line);

            dspl_colorTextOut(20, 18, DSPL_TXTATTR_TRANSPARENT,(char*)data->timebuffer,0x000000);		
#endif
            if( (data->RightKey)&&(data->recordNumber<A_GROUP_NUMBER) )
                displaySoftKeys(TxtSoftOK, TxtStop);//confirm 
            else
                displaySoftKeys(TxtSoftOptions, TxtSoftBack);      
			
			dspl_Enable(uMode );
        }
        break;
    default:
        return 0;
    }
    return 1;
}
/* 计时窗口按键处理 */
static int stopw_kbd_cb (T_MFW_EVENT event, T_MFW_KBD *keyboard)
{
    T_MFW_HND       win  = mfw_parent (mfw_header());
    T_MFW_WIN     * win_data = ((T_MFW_HDR *)win)->data;
    StopwData* data = (StopwData *)win_data->user;
    T_DISPLAY_DATA display_info;

    TRACE_EVENT("stopw_kbd_cb");

    g_norejectkeyflag=1;
    switch( keyboard->code )
    {
    case KCD_LEFT:
    case KCD_OK:
        if( (data->RightKey)&&(data->recordNumber<A_GROUP_NUMBER) ) //计时没停且记录未满
        {
            if( !data->type )             //分别计时
            {
                temp_data.record[data->recordNumber]=data->counter;
                temp_data.group_number=data->groupNumber+1;                       
            }
            else                        //以圈计时
            {
                temp_data.record[data->recordNumber]=data->counter;
                temp_data.group_number=data->groupNumber+1;
                data->counter=0;
            }
            temp_data.type=data->type;  
            data->recordNumber++;
            if( data->recordNumber==A_GROUP_NUMBER )
            {
                tim_stop(data->info_tim);
                data->RightKey=FALSE;                  
                displaySoftKeys(TxtSoftOptions, TxtSoftBack);  
#if(MAIN_LCD_SIZE==3)
				draw_softkeybar_updown_arrow();//jhxu720
#endif
                winShow(win);
            }
        }
        else
        {
            if( !temp_data.record[0] )
            {
                dialog_info_init(&display_info);//gdy add

                display_info.TextId2     =TxtNorecord;          
                display_info.Time       = FOREVER;
                display_info.Callback     = (T_VOID_FUNC)NULL;//sepa_dialog_cb;
                display_info.iconindex = REMIND_NORECORD;           
                /*
                * Call Info Screen
                */
                info_dialog (win, &display_info);
                g_norejectkeyflag=0;
                stopwatch_destroy(stopw_win);
                break;
            }
            dspl_Clear(20, 69, 117, 89);
            g_norejectkeyflag=0;
            ToolkitTitle=TxtStopwatch;
            data->menu_options_win = bookMenuStart(stopw_menu_win,CountMenuAttributes(),PhbkToolkit);
            SEND_EVENT(data->menu_options_win, ADD_CALLBACK, NULL, (void*)stopw_menu_cb);                                  
        }
        break;
    case KCD_RIGHT:
        if( data->RightKey )                  //没停
        {
            tim_stop(data->info_tim);
            data->RightKey=FALSE;
            displaySoftKeys(TxtSoftOptions, TxtSoftBack);
            winShow(win);
        }
        else
            SEND_EVENT(win, STOPW_EXIT, 0, 0);
        break;
    case KCD_HUP:
        SEND_EVENT(win, STOPW_EXIT, 0, 0);
        break;
    default:
        break;
    }
    return MFW_EVENT_CONSUMED;
}

static void stopw_menu_cb(T_MFW_HND parent_win, UBYTE identifier, UBYTE reason)
{
    T_MFW_WIN           *win_data   = ( (T_MFW_HDR *) parent_win )->data;
    StopwData* data = (StopwData *) win_data->user;

    switch( reason )
    {
    case INFO_KCD_RIGHT:
        bookMenuDestroy(data->menu_options_win);
        stopwatch_destroy(parent_win);
        break;
    default:
        break;
    }
}

/* 销毁秒表窗口 */
void stopwatch_destroy(MfwHnd own_window)
{
    T_MFW_WIN     * win  = ((T_MFW_HDR *)own_window)->data;
    StopwData* data   = (StopwData*)win->user;

    TRACE_EVENT ("stopwatch_destroy()");  
    g_norejectkeyflag=0;
    if( own_window )
    {
        /*
         * Delete WIN Handler
         */

        stopw_win=NULL;
        win_delete (own_window);
        /*

⌨️ 快捷键说明

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