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

📄 configcumul.c

📁 采用MINIGUI开发的一套GUI界面
💻 C
字号:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include <pwd.h>
#include <math.h>
#include <minigui/common.h>
#include <minigui/minigui.h>
#include <minigui/gdi.h>
#include <minigui/window.h>
#include <minigui/control.h>
#include <sys/types.h>
#include <sys/shm.h>
#include <sys/ipc.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "common.h"

#include "fonts.h"

#include "configcumul.h"

void Savecudata ( STRUCT_CUDATA cu_data)
{
int i;
time_t t;    
struct tm* tm;
time(&t);
tm = localtime(&t);
temp=0;
cumul_per_day=0;

 
//判断当前时间在设定时间范围之内
if( (   cu_data.s_year <= tm->tm_year + 1900 ||
       cu_data.s_year == tm->tm_year + 1900 && cu_data.s_month <= tm->tm_mon+1 ||
	cu_data.s_year == tm->tm_year + 1900 && cu_data.s_month == tm->tm_mon+1&&cu_data.s_day <= tm->tm_mday||
	cu_data.s_year == tm->tm_year + 1900 && cu_data.s_month == tm->tm_mon+1&&cu_data.s_day == tm->tm_mday&&cu_data.s_hour <= tm->tm_hour||
	cu_data.s_year == tm->tm_year + 1900 && cu_data.s_month == tm->tm_mon+1&&cu_data.s_day == tm->tm_mday&&cu_data.s_hour == tm->tm_hour&& cu_data.s_minute <= tm->tm_min||
	cu_data.s_year == tm->tm_year + 1900 && cu_data.s_month == tm->tm_mon+1&&cu_data.s_day == tm->tm_mday&& cu_data.s_hour == tm->tm_hour&&cu_data.s_minute == tm->tm_min&&cu_data.s_second <= tm->tm_sec) 
     &&
     ( cu_data.e_year >= tm->tm_year + 1900|| 
       cu_data.e_year == tm->tm_year + 1900 && cu_data.e_month >= tm->tm_mon+1 ||
	cu_data.e_year == tm->tm_year + 1900 && cu_data.e_month == tm->tm_mon+1&&cu_data.e_day>=tm->tm_mday||
	cu_data.e_year == tm->tm_year + 1900 && cu_data.e_month == tm->tm_mon+1&&cu_data.e_day==tm->tm_mday&&cu_data.e_hour >= tm->tm_hour||
	cu_data.e_year == tm->tm_year + 1900 && cu_data.e_month == tm->tm_mon+1&&cu_data.e_day==tm->tm_mday&&cu_data.e_hour == tm->tm_hour&& cu_data.e_minute >= tm->tm_min||
	cu_data.e_year == tm->tm_year + 1900 && cu_data.e_month == tm->tm_mon+1&&cu_data.e_day==tm->tm_mday&& cu_data.e_hour == tm->tm_hour&&cu_data.e_minute == tm->tm_min&&cu_data.e_second >= tm->tm_sec))
 { 
   	
	Dealcudata ( cu_data, tm);	//计算日累加量
	 if(tm->tm_min>58){
	 	//  每1小时送入文件一次
	 	hour++;
		Write2file( cu_data, tm,cumul_per_day,days*sizeof(float));
		if(hour>22){
			days++;
			cumul_per_month=+cumul_per_day;
			cumul_per_day=0; //又从零开始
			hour=0;
			if(days>30){
				mont++;
				Write2file( cu_data, tm,cumul_per_month,50*12*31*sizeof(float)+(mont-1)*sizeof(float));
				cumul_per_year=+cumul_per_month;
				days=0;			
				cumul_per_month=0;
				if(mont>11){
					year++;				
					Write2file( cu_data, tm,cumul_per_year,50*12*31*sizeof(float)+50*12*sizeof(float)+(year-1)*sizeof(float));
					cumul_per_year=0;

				}	

			}

		}

	 }



}

}


void Write2file ( STRUCT_CUDATA cu_data, struct tm* tm,int data,int len)
{
FILE *fp;
char buff[20]; 
 char startTime[15]; 
 char add[20];
 struct  stat  buf;
      
// int d_addr=;  //天,月,年在文件中的地址
 //int m_addr=;
 //int y_addr=;
  int L;
  L=len;
 
 
 sprintf(startTime, "%4d/%02d/%02d/%02d:%02d:%02d",cu_data.s_year,cu_data.s_month,cu_data.s_day,cu_data.s_hour,cu_data.s_minute,cu_data.s_second);

if (stat("cumul.dat", &buf) < 0){   //文件不存在,新建
	fp=fopen("cumul.dat","w+b");
	
	//文件开头
	fseek(fp, 0, SEEK_SET);
	fwrite(&startTime,strlen(startTime),1,fp);//记录开始 时间   
	fseek(fp, 0, SEEK_CUR);
       /* sprintf(add, "%d/%d/%d/",d_addr,m_addr,y_addr);
	fwrite(&add,strlen(add),1,fp);//记录按天,按月,按年存储位置的首地址
	*/
}	
   //开始记录数据

	fseek(fp, 29+L, SEEK_SET);
	fwrite(&data,sizeof(data),1,fp);//记录按天,按月,按年存储位置的首地址
       fclose(fp);

}




///////////////////////////////////

//每来一次数据调用一次
void  Dealcudata  ( STRUCT_CUDATA cu_data, struct tm* tm)
{
int i;
float cuavg;  //需要累计的值
STRUCT_OLDTIME oldtime; //记录上次累加时刻的时间 

 oldtime.year=cu_data.s_year;     
 oldtime.month=cu_data.s_month;
 oldtime.day=cu_data.s_day;
 oldtime.hour=cu_data.s_hour;
 oldtime.minute=	cu_data.s_minute;
 oldtime.second =cu_data.s_second;  
 
 i=atoi(cu_data.name);    
 temp+=channel_disp[i].fpv;
 if( tm->tm_sec==oldtime.second+cu_data.interval){ 	//间隔到,累加
 	oldtime.year=tm->tm_year + 1900;     //记录此刻时间
 	oldtime.month=tm->tm_mon + 1;
	oldtime.day= tm->tm_mday;
	oldtime.hour=tm->tm_hour;
	oldtime.minute= tm->tm_min;
	oldtime.second = tm->tm_sec;
	cuavg=temp/cu_data.interval;
	cumul_per_day+=cuavg;         //计算日累加量
	temp=0;
	
	//return cumul_per_day;

	}
	

}


/*


传入参数:

*/
void DispCumul(HDC hdc, int type,int time )
{
int bar_height;//所有棒图固有高度
int bar_width;
int value;       
gal_pixel bar_rect_color;
gal_pixel bar_text_color;
gal_pixel bar_back_color;

unsigned char str_pv[10];
       	HDC  hmemDC;
       	gal_pixel barcolor,topbackcolor; 
       	int i,j;
         	int rect_x,rect_y,width,height;
       	int FillBoxHeight;//填充的绝对高度
       	int FillBox_y;
	    	  bar_height=260;
 		 bar_width=30;
	
     hmemDC=CreateCompatibleDC(hdc); 
  	bar_back_color=PIXEL_lightwhite;//背景PIXEL_black	 
  	bar_rect_color=RGB2Pixel(hmemDC,0,0,255);//边框颜色
  	bar_text_color=PIXEL_black;//RGB2Pixel(hmemDC,0,0,255);//文字颜色	 
     SetBrushColor(hmemDC,bar_back_color);//lightwhite
     SetBkMode(hmemDC,BM_TRANSPARENT);//?   SetBkMode
     FillBox(hmemDC,0,0,WIDTH-LEFT,HEIGHT-TOP-BOTTOM);
     SetBkMode(hmemDC,BM_TRANSPARENT);









	
     BitBlt(hmemDC,0,0,WIDTH-LEFT,HEIGHT-TOP-BOTTOM,hdc,LEFT,TOP,0);
     DeleteCompatibleDC(hmemDC);      		

}

//累积,历史记录
int  InitCumulDialog(HWND hDlg)
{
     int i;
     unsigned char buff[20];
     sprintf(buff,"AI1");	
  // sprintf(str,"AI%d",i);
     SetDlgItemText(hDlg,CU_EDIT_NAME,buff);
     for(i=0;i<3;i++)
	 	SendDlgItemMessage(hDlg,CU_BOX_DISTYPE,CB_ADDSTRING,0,(LPARAM)mode[i]);
     for(i=0;i<7;i++)
	 	SendDlgItemMessage(hDlg,CU_BOX_INTERWALL,CB_ADDSTRING,0,(LPARAM)interval_init[i]);
     for (i=0;i<3;i++)	 
              SendDlgItemMessage(hDlg,CU_BOX_DEVICE,CB_ADDSTRING,0,(LPARAM)device[i]);
      for (i=0;i<4;i++)	 
              SendDlgItemMessage(hDlg,CU_BOX_WAY,CB_ADDSTRING,0,(LPARAM)way[i]);
     for (i=1;i<=24;i++){
	 	sprintf(buff,"%d",i);
	      SendDlgItemMessage(hDlg,BOX_CUMUL_HOUR,CB_ADDSTRING,0,(LPARAM)buff);
             i++;
     	}
      for (i=1;i<=60;i++){
	 	sprintf(buff,"%d",i);
	      SendDlgItemMessage(hDlg,BOX_CUMUL_MINU,CB_ADDSTRING,0,(LPARAM)buff);
             i++;
     	}
	for (i=1;i<=60;i++){
	 	sprintf(buff,"%d",i);
	      SendDlgItemMessage(hDlg,BOX_CUMUL_SECO,CB_ADDSTRING,0,(LPARAM)buff);
             i++;
     	}  
	for (i=2000;i<=2050;i++){
	 	sprintf(buff,"%d",i);
	      SendDlgItemMessage(hDlg,BOX_CUMUL_YEAR,CB_ADDSTRING,0,(LPARAM)buff);
             i++;
     	}  
	
       for (i=1;i<=12;i++){
	 	sprintf(buff,"%d",i);
	      SendDlgItemMessage(hDlg,BOX_CUMUL_MONT,CB_ADDSTRING,0,(LPARAM)buff);
             i++;
     	}
      GetDlgItemText(hDlg,BOX_CUMUL_MONT,buff,4);
       
       for (i=1;i<=31;i++){
	 	sprintf(buff,"%d",i);
	      SendDlgItemMessage(hDlg,BOX_CUMUL_DAYS,CB_ADDSTRING,0,(LPARAM)buff);
             i++;
     	}
return 1;
}

int  CumulDialogProc (HWND hDlg, int message, WPARAM wParam, LPARAM lParam)
{
   HDC hdc;
   static int keydowned;
   int id;
   	id= LOWORD (wParam);
	
    switch (message) 
    { 
    	case MSG_INITDIALOG:		
			InitCumulDialog(hDlg);
		return 1;
	case MSG_SHOWWINDOW:
			{  
		      }  		      
		 break;       	        
	case MSG_PAINT:
		hdc=BeginPaint(hDlg);			
		SetBrushColor(hdc,PIXEL_black);		 
		SetPenColor (hdc,COLOR_darkgray);
  		// Rectangle(hdc,180,80,380,160);  		
		//SetBrushColor(hdc,PIXEL_darkgreen);
		//FillBox(hdc,180,80,80,40);
		SelectFont(hdc,songgb16font);
           	SetTextColor(hdc,PIXEL_black);
	      SetBkColor(hdc,PIXEL_lightgray);
           	 TextOut(hdc, 180,250, "日期格式:  年/月/日");
	       //TextOut(hdc, 200,130, "样例:   07/01/01");
	       TextOut(hdc, 480,240, "时间格式: 时:  分:  秒");
	       //TextOut(hdc, 200,270, "样例:   08:01:59");
			 
		
		EndPaint(hDlg,hdc);
		break;
 	case MSG_KEYDOWN:
		
	if(!keydowned)
		{
	if(id==KEY_LEFT)SendDlgItemMessage(hDlg, CONF_CUMUL_LEFT, MSG_LBUTTONDOWN, 0,0);
	if(id==KEY_RIGHT)SendDlgItemMessage(hDlg, CONF_CUMUL_RIGHT, MSG_LBUTTONDOWN, 0,0);
	if(id==KEY_UP)SendDlgItemMessage(hDlg, CONF_CUMUL_UP, MSG_LBUTTONDOWN, 0,0);
	if(id==KEY_DOWN)SendDlgItemMessage(hDlg, CONF_CUMUL_DOWN, MSG_LBUTTONDOWN, 0,0);
	 if(id==KEY_ENTER)SendDlgItemMessage(hDlg, CONF_CUMUL_ENTER, MSG_LBUTTONDOWN, 0,0);
	if(id==KEY_DLEFT)SendDlgItemMessage(hDlg, CONF_CU_DLEFT, BM_SETSTATE , BST_PUSHED ,0);
	 if(id==KEY_DRIGHT)SendDlgItemMessage(hDlg, CONF_CU_DRIGHT, BM_SETSTATE , BST_PUSHED ,0);
	 if(id==KEY_RETURN)SendDlgItemMessage(hDlg, CONF_CUMUL_BACK, BM_SETSTATE , BST_PUSHED ,0);


		keydowned=1;//CONF_CU_DLEFT
		}
	  break;	
	
	 case MSG_KEYUP:
	{
		keydowned=0;
		if(id==KEY_EXIT)  		EndDialog (hDlg, 0);
		if(id==SCANCODE_F2)  		EndDialog (hDlg, 0);
	if(id==KEY_LEFT)SendDlgItemMessage(hDlg, CONF_CUMUL_LEFT, MSG_LBUTTONUP, 0,0);
	if(id==KEY_RIGHT)SendDlgItemMessage(hDlg, CONF_CUMUL_RIGHT, MSG_LBUTTONUP, 0,0);
	if(id==KEY_UP)SendDlgItemMessage(hDlg, CONF_CUMUL_UP, MSG_LBUTTONUP, 0,0);
	if(id==KEY_DOWN)SendDlgItemMessage(hDlg, CONF_CUMUL_DOWN, MSG_LBUTTONUP, 0,0);
	 if(id==KEY_ENTER)SendDlgItemMessage(hDlg, CONF_CUMUL_ENTER, MSG_LBUTTONUP, 0,0);
	if(id==KEY_DLEFT)SendDlgItemMessage(hDlg, CONF_CU_DLEFT, BM_SETSTATE, 0,0);
	 if(id==KEY_DRIGHT)SendDlgItemMessage(hDlg, CONF_CU_DRIGHT, BM_SETSTATE, 0,0);
	 if(id==KEY_RETURN)SendDlgItemMessage(hDlg, CONF_CUMUL_BACK, BM_SETSTATE, 0,0);
		
	 	}
		  break;	
	case MSG_COMMAND:
       {

	 

	 if(id==CONF_CUMUL_CANCEL)     EndDialog (hDlg, 0);
	 
	 if(id==CONF_CUMUL_BACK)     EndDialog (hDlg, 0);
	 
	}
	break;
	 case MSG_DESTROY:
 //	 KillTimer(hDlg,_ID_TIMER_ALARM);
 	
 	break;
	case MSG_CLOSE:

		
		break;
    	}
   	 return DefaultDialogProc (hDlg, message, wParam, lParam);
    

}
void  DlgCumul (HWND hWnd)
{
    DlgCumu.controls = ctrl_conf_cumul;
    
    DialogBoxIndirectParam (&DlgCumu, hWnd, CumulDialogProc, 0L);
}


⌨️ 快捷键说明

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