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

📄 mmicalculator.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 5 页
字号:
                i=0;
                memset(string,0,sizeof(string));
                while( data->result[i]=='0'&&data->result[i+1]!='.' )
                    i++;
                strcpy(string,data->result+i);
                strcpy(data->result,string);
                memset(string,0,sizeof(string));
                if( data->result[0]=='.' )
                {
                    strcpy(string,"0");
                    strcat(string,data->result);
                    strcpy(data->result,string);
                }
                i=0;
                j=0;
                k=strlen(data->result);
                while( (data->result[i]!='.')&&(i<strlen(data->result)) )
                    i++;
                if( i<strlen(data->result) )
                {
                    for( j=i;j<=strlen(data->result);j++ )
                    {
                        if( data->result[j]!='0'&&data->result[j]!=0 )
                            k=j;
                    }
                    data->result[k+1]=0;
                }
            }
            if( strlen(data->result)<=MAXLEN+3 )
            {
                data->continues=TRUE;
                data->resultflag=TRUE;
                winShow(win); 
                reset_calculator(data);
            }
            else
            {
                dialog_info_init(&display_info);                    
                display_info.TextId2     =TxtError;                  
                display_info.Time       = FOREVER;
                display_info.iconindex=REMIND_NORECORD;

                display_info.Callback     = (T_VOID_FUNC)NULL;
                /*
                 * Call Info Screen
                 */
                info_dialog (win, &display_info);
                SEND_EVENT(win, CALCULATOR_INIT, 0, 0);
            }
        }
        break;
    case KCD_HUP:
        calculator_destroy(win);
        break;
    default:
        break;
    }
    return MFW_EVENT_CONSUMED;
}



//extern const unsigned char icnMnuListBkg[];
void calcDisplay(CalcData* data)
{
#if (MAIN_LCD_SIZE==3)
   game_Line line;
   int old_color,i,j;   
   char string[MAXLEN],string1[MAXLEN+1],s[3];

   TRACE_EVENT("calcDisplay");
  
   memset(string,0,MAXLEN);
   memset(string1,0,MAXLEN+1);
   memset(s,0,3);

   //display the bitmap
   DRAW_ICON_SEL(ICON_CALCULATOR,2);
   DRAW_ICON_SEL(ICON_CALCULATOR,0);
   DRAW_ICON_SEL(ICON_CALCULATOR,1);
   
   //display the operate number   
   string[0]=0;
   i=0;
   while((data->operate_number1[i]!='.')&&(i<strlen(data->operate_number1)))
   	i++;
   if(i>14)
   	{
   	  if(data->operate_number1[0]=='-')
   	  	{
   	  	string[0]=data->operate_number1[0];
   	    string[1]=data->operate_number1[1];
   	    string[2]='.';
   	    strncat(string,data->operate_number1+2,6);
    	if(data->result[8]>'4')
   	       string[8]=data->operate_number1[7]+1;
   	    else
   	       string[8]=data->operate_number1[7];
   	  	}
   	  else
   	  	{
    	  string[0]=data->operate_number1[0];
    	  string[1]='.';
    	  strncat(string,data->operate_number1+1,6);
   	      if(data->result[7]>'4')
   	        string[7]=data->operate_number1[6]+1;
    	  else
    	    string[7]=data->operate_number1[6];
   	  	}
   	  strcat(string,"E+");
   	  if(data->operate_number1[0]=='-')
   	  	sprintf(s,"%02d",i-2);
   	  else
    	sprintf(s,"%02d",i-1);
   	  strcat(string,s); 
   	  set_font_type(UNI12X12_FONT);
      dspl_colorTextOut(26+94-strlen(string)*6, 16, DSPL_TXTATTR_TRANSPARENT, (char *)string, 0x000000);//jhxu 288  modify 6 to 16
   	}
   else
   	{
   	i=0;
   	while(((data->operate_number1[i]<'1')||(data->operate_number1[i]>'9'))&&(i<strlen(data->operate_number1)))
   		i++;
   	if(i>14)
   		{
   		if(data->operate_number1[0]=='-')
   	    	strncpy(string,data->operate_number1,2);
   		else strncpy(string,data->operate_number1,1);
   		strcat(string,".");
   	    if(strlen(data->operate_number1)-i)
   	      strncat(string,data->operate_number1+i+1,6);
   	    else strcat(string,"0");   	    	
   	   // if(data->result[strlen(data->result)]>'4')
   	   //   string[6]=data->result[i+5]+1;
   	   // else
   	   //   string[6]=data->result[i+5];
   	    strcat(string,"E-");
   	    sprintf(s,"%02d",i);
   	    strcat(string,s);   	    
   		set_font_type(UNI12X12_FONT);   	  
        dspl_colorTextOut(26+94-strlen(string)*6, 16, DSPL_TXTATTR_TRANSPARENT, (char *)string, 0x000000);//jhxu 288  modify 6 to 16		
   		}
    	else
   		{
   	     set_font_type(UNI12X12_FONT);
   	     dspl_colorTextOut(26+94-strlen(data->operate_number1)*6, 16, DSPL_TXTATTR_TRANSPARENT, (char *)data->operate_number1, 0x000000);////jhxu 288  modify 6 to 16
   		}   	  
   	}   
   set_font_type(UNI12X12_FONT);
   dspl_colorTextOut(4, 30, DSPL_TXTATTR_TRANSPARENT, (char*)data->opera, 0x000000);//jhxu 288  modify 20 to 30
   set_font_type(UNI12X12_FONT);
   dspl_colorTextOut(26+94-strlen(data->operate_number2)*6, 30, DSPL_TXTATTR_TRANSPARENT, (char *)data->operate_number2, 0x000000);//jhxu 288  modify 20 to 30

   //jhxu 288  modify 20 to 26
   DrawLine(set_Line(2, 42 ,99+26, 42,line.color=0x000000));////jhxu 288  modify 32 to 42


   TRACE_EVENT("data->result=:");
   TRACE_EVENT(data->result);
   memset(string,0,sizeof(string));
   i=0;
   while((data->result[i]!='.')&&(i<strlen(data->result)))
   	i++;
   if((i>0)&&(i==strlen(data->result)-1))
   	data->result[strlen(data->result)-1]=0;
   if(i>=8)
   	{
   	  string[0]=data->result[0];
   	  string[1]='.';
   	  strncat(string,data->result+1,6);
   	  if(data->result[7]>'4')
   	  	{
   	  	if(data->result[6]!='9')
   	      string[7]=data->result[6]+1;
   	  	else string[7]=data->result[6];
   	  	}
   	  else
   	    string[7]=data->result[6];
   	  strcat(string,"E+");
   	  sprintf(s,"%02d",i-1);
   	  strcat(string,s); 
   	  string[12]=0;
   	  TRACE_EVENT(string);
   	  memset(data->SpecialResult,0,MAXLEN+MAXLEN);  
   	  strcpy(data->SpecialResult,string);
   	  if(!data->sig)
   	     {
   	       strcpy(string1,"-");
   	       strcat(string1,string);   	       
   	       set_font_type(UNI12X12_FONT);   	  
           dspl_colorTextOut(26+94-13*6, 44, DSPL_TXTATTR_TRANSPARENT, (char *)string1, 0x000000);//jhxu 288  modify 34 to 44
   	   	 }
   	   else
   	  	  {   	  
   	        set_font_type(UNI12X12_FONT);   	  
            dspl_colorTextOut(26+94-12*6, 44, DSPL_TXTATTR_TRANSPARENT, (char *)string, 0x000000);//jhxu 288  modify 34 to 44        
   	      }      	   
   	}
   else
   	{
   	i=0;
   	while(((data->result[i]<'1')||(data->result[i]>'9'))&&(i<strlen(data->result)))
   		i++;
   	TraceInt(i);
   	if(i>14)
   		{
   		string[0]=data->result[i];
   	    string[1]='.';
   	    if(strlen(data->result)-i)
   	    	{
   	    	if((strlen(data->result)-i)<7)
   	         strncat(string,data->result+i+1,strlen(data->result)-i);
   	    	else strncat(string,data->result+i+1,6);
   	    	}
   	    else strcat(string,"0");   	    	
   	   // if(data->result[strlen(data->result)]>'4')
   	   //   string[6]=data->result[i+5]+1;
   	   // else
   	   //   string[6]=data->result[i+5];
   	    strcat(string,"E-");
   	    sprintf(s,"%02d",i);
   	    strcat(string,s); 
   	    memset(data->SpecialResult,0,MAXLEN+MAXLEN);   
   	    strcpy(data->SpecialResult,string);
   		if(!data->sig)
   		   {
   		    strcpy(string1,"-");
   		    strcat(string1,string);   		    
   	        set_font_type(UNI12X12_FONT);   	  
            dspl_colorTextOut(26+94-strlen(string1)*6, 44, DSPL_TXTATTR_TRANSPARENT, (char *)string1, 0x000000);//jhxu 288  modify 34 to 44
   		    }
   		else
   			{
   			set_font_type(UNI12X12_FONT);   	  
            dspl_colorTextOut(26+94-strlen(string)*6, 44, DSPL_TXTATTR_TRANSPARENT, (char *)string, 0x000000); //jhxu 288  modify 34 to 44        
   			}   		
   		}
   	else
   		{
   		if((data->result[0]=='0')&&(strlen(data->result)<2))
   			{
   		   	  set_font_type(UNI12X12_FONT);
              dspl_colorTextOut(26+94-strlen(data->result)*6, 44, DSPL_TXTATTR_TRANSPARENT, (char *)data->result, 0x000000);//jhxu 288  modify 34 to 44
              return;
   			}
   		i=0;
   		j=0;
   		while(data->result[i]!='.')
   			i++;
   		if(i)
   			for(j=i;j<strlen(data->result);j++);
   		if(i+j>17)
   			data->result[i+j]=0;   		
    	if((!data->sig)&&strlen(data->result))
        	{
   	   	      strcpy(string1,"-");
    	      strcat(string1,data->result);
   	    	  set_font_type(UNI12X12_FONT);   	  
              dspl_colorTextOut(26+94-strlen(string1)*6, 44, DSPL_TXTATTR_TRANSPARENT, (char *)string1, 0x000000);//jhxu 288  modify 34 to 40
        	}
        else
        	{
              set_font_type(UNI12X12_FONT);
              dspl_colorTextOut(26+94-strlen(data->result)*6, 44, DSPL_TXTATTR_TRANSPARENT, (char *)data->result, 0x000000);//jhxu 288  modify 34 to 40
         	}   		
   		}
   	}
   if(data->leftkey_indication==1)
   	memset(data->opera,0,sizeof(data->opera));
  
#elif ( MAIN_LCD_SIZE==4 )
    extern GLOBAL int get_StringWidth(char *string);

    game_Line line;
    int old_color,i,j;   
    char s[3]= "0";
    char *txt ;
    char string[MAXLEN];
    memset(string,0 ,sizeof(string) );
    if( Mmi_getCurrentLanguage()==CHINESE_LANGUAGE )
        dspl_colorTextOut(35, 0, DSPL_TXTATTR_TRANSPARENT,(char*)MmiRsrcGetText(TxtCalculator),0x000000);
    else
        dspl_colorTextOut(20, 0, DSPL_TXTATTR_TRANSPARENT,(char*)MmiRsrcGetText(TxtCalculator),0x000000);

    //display the bitmap
    /* 2004/06 sunsj modify for picture manage */
    for( i=0 ; i< GET_ICONATTR_NUM(ICON_CALCULATE_OFF); i++ )
    {
        DRAW_ICON_SEL(ICON_CALCULATE_OFF, i);
        /*
       pdspl_BitBlt(icnCalcOptOffAttr[i].area.px+1,icnCalcOptOffAttr[i].area.py+5, 
           icnCalcOptOffAttr[i].area.sx,icnCalcOptOffAttr[i].area.sy, 0,
           icnCalcOptOffAttr[i].icons,
           0);
            */
        //drawIconByIcnAttr((MfwIcnAttr *)&icnCalcOptOffAttr[i], 0);
    }
    if( data->opera[0] != 0x00 )
    {
        if( strcmp(data->opera, "+") == 0 )
        {
            DRAW_ICON_SEL(ICON_CALCULATE_ON, 0);
        }
        else if( strcmp(data->opera, "-") == 0 )
        {
            DRAW_ICON_SEL(ICON_CALCULATE_ON, 1);
        }
        else if( strcmp(data->opera, "*") == 0 )
        {
            DRAW_ICON_SEL(ICON_CALCULATE_ON, 2);
        }
        else if( strcmp(data->opera, "/") == 0 )
        {
            DRAW_ICON_SEL(ICON_CALCULATE_ON, 3);
        }
    }
    /*
    elseif 
        break;
    case '-':
        DRAW_ICON_SEL(ICON_CALCULATE_ON, 1);
        break;
    case '*':
        DRAW_ICON_SEL(ICON_CALCULATE_ON, 2);
        break;
    case '/':
        DRAW_ICON_SEL(ICON_CALCULATE_ON, 3);
        break;
    default:
        break;
    }
    */

    old_color = dspl_SetBkgColor(0x000000);
    dspl_fill_rectangle(20,29,108,70);
    dspl_SetBkgColor(0x2fa6ff);
    dspl_fill_rectangle(22,31,106,68);
    dspl_SetBkgColor(old_color);

    if( data->operate_number2[0] == 0 )
    {
        if( data->operate_number1[0] == 0 )
        {
            txt = (char*)s;
        }
        else
        {
            txt = (char*)data->operate_number1;
        }
    }
    else if( data->resultflag ==0 )
    {
        txt = (char*)data->operate_number2;
    }
    else
    {
        txt = (char*)data->result;
        if( !data->sig )
        {
            string[0] = '-';
        }
        if( strlen(data->result) > MAX_OPTNUMBER )
        {
            int k = 1;
            i = j = -1;
            while( *txt != 0 )
            {
                if( i == -1 )
                {
                    if( *txt != '0' && *txt != '.' )
                        i = (int)txt - (int)data->result;
                }
                if( j == -1 )
                {
                    if( *txt == '.' )
                        j = (int)txt - (int)(char *)data->result;
                }
                txt ++;
            }
            if( j == -1 )j = (int)txt - (int)(char *)data->result;
            txt = (char*)data->result+i;
            data->SpecialResult[0] = *txt++;
            data->SpecialResult[1] = '.';
            while( k <=2 && *txt !=0 )
            {
                if( *txt <= '9' && *txt>= '0' )
                    data->SpecialResult[1 + k++] = *txt;
                txt++;
            }
            while( k<=2 )
                data->SpecialResult[1 + k++] = '0';
            if( i < j )
            {
                strcat(data->SpecialResult,"E+");
                i = j - i -1;
            }
            else
            {
                strcat(data->SpecialResult,"E-"); 
                i = i - j;
            }
            sprintf(s,"%02d",i);
            strcat(data->SpecialResult,s);
            strcat(string,data->SpecialResult);
        }
        else
        {
            strcat(string,data->result);
        }
        txt = (char*)string;


⌨️ 快捷键说明

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