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

📄 dispcumul.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 "dispcumul.h"
   
/*
要得到那个通道那年那月那天的累积量
传入参数    为那个通道那年那月那天
传出参数    那天的累积量
*/


void SaveCuDateDay(int id, int year,int month,int day )
{
    FILE *fd;
    unsigned char filename[20];
    unsigned char buffdata[9],buffday[5],bufffday[5],buffyemo[7];
    unsigned char buff[21],bufff[8];
    int i;
	struct stat file;
    sprintf(filename,"data/cu%02d.dat",id);
//	printf("filename=%s\n",filename);
	 if(stat(filename,&file)<0)//假设不存在本文件则新建
	 	{
 		  fd=fopen(filename,"r+w+b");
		 	
		// fclose(fd);	
		//  fd=fopen(filename,"r+");
	 	}
    else {
    		fd=fopen(filename,"r+");
    	}
	
     fseek(fd,0,SEEK_SET);
     fgets(bufff,8,fd);
    // printf("bufffxx=%s\n",bufff);
     		
    //写入当前时间{第一行}
     sprintf(buff,"%4d%2d%2d%2d%2d%2d:",year,month,day,hour,minu,seco);
     fseek(fd,0,SEEK_SET); 	   
     fwrite(buff,15,1,fd);
     bzero(buff,sizeof(buff));
     //cumul_fvalue=32.9;//channel_disp[id].cupv;
    
     sprintf(buffdata,"%10d",cumul_fvalue);
     sprintf(buff,"%s\r\n",buffdata);

     //写入当前该通道的当前数据{第一行}
     fwrite(buff,18,1,fd);

     //{第一行}
     //看是否有该年该月的数据
     sprintf(buffyemo,"%4d%2d:",year,month);
     if (strncmp (bufff,buffyemo,6))
     	{
     	fseek(fd,0,SEEK_END);
	fwrite("\r\n",2,1,fd);	
       fwrite(buffyemo,7,1,fd);
	   printf("xi             eijjjj\n");
     	}
     

     //写入当前数据
     fseek(fd,-18,SEEK_END);
     bzero(buff,sizeof(buff)); 
     fread(buff,7,1,fd);
     //printf("come her\n");
     //printf("rebuff=%s\n",buff);	 
     sprintf(buffday,"%2dday:",day);
     sprintf(bufffday,":%2dday",day);
     if (!strncmp (buff,bufffday,5))
     	{
     	bzero(buff,sizeof(buff));

      sprintf(buff,"%s:",buffdata); 

     	fwrite(buff,11,1,fd);

     	}
     else
     	{
     	
     	bzero(buff,sizeof(buff)); 
			 //printf("buffdata2=%s\n",buffdata);
			   //printf("buffx=%s\n",buff);
       sprintf(buff,"%s:",buffdata); 
	   	  // printf("buffxe=%s\n",buff);
     	fseek(fd,0,SEEK_END);
	  //printf("buffday=%s\n",buffday);
       fwrite(buffday,6,1,fd);
	   	   //printf("buffxee=%s\n",buff);
	fwrite(buff,11,1,fd);
     	}
	 
     fclose(fd);

	
};

void GetCuDateDay(int id, int year,int month,int day)
{
     static int cuday;
	 unsigned char *tokenPtr;
	unsigned  char buff[500],buffyemo[7];
	unsigned char buffer[20];
	static int i5=0;
	 FILE *fd;

	unsigned char filename[20];  //文件名由通通的id  构成后缀为".cu"
      int i2=1,i3=1,i4=0;
	// sprintf(filename,"data/cu%02d.dat",id);
	// printf("filename0=%s\n",filename);
	 sprintf(buffyemo,"%4d%2d:",year,month);
	 //
	 bzero(buffer,20);
     if ( (fd=fopen(filename,"r"))==NULL)
         printf ("file could not be opened \n");
     else {
	 	while (!feof (fd) &&i4==0)
             {
             //bzero(buff,sizeof(buff));
             fgets(buff,1999,fd); 
	       //printf("buffaa=%s\n",buff);
		//printf("hang = %d\n",i3);
		i3+=1;
		i2=1;
		if (!strncmp (buff,buffyemo,6)&& i3>2)
			{
			//printf("buffxd=%s\n",buff);
			i4=1;
             tokenPtr=strtok(buff,":");
			 while ( tokenPtr!= NULL) {
			 	
                          //printf ("%s\n",tokenPtr);
                          if( ((i2-1)%2==0) &&((i2-1)%4!=0)){
                          //ccuday[i5].cdata = tokenPtr;
                        //  cccudata[i5] = tokenPtr;
                       strncpy( buffer,tokenPtr,20);
			 	  
						  
			 sprintf(cccudata[i5],"%s",buffer);	
				//  printf("ddd  %s\n",cccudata[i5]);		
			  //  memcpy(cccudata[i5],  tokenPtr,);
                          i5+=1;
				 }
                          tokenPtr= strtok(NULL,":");
      			      i2+=1;		
			 	}
	 		}
	 	}
	 }

	 fclose(fd);
	//printf("Databack[%d] = %5s\n",day*2+1,Data[day*2+1]);
    
};
/*void GetCuDateMonth(int id, int year,int month )
{
static int cumomth;

return cumonth;
};*/
/* 月累积量显示函数*/
void DispCumulYear(HDC hmemDC, int year,int month )
{
      
       static char buff[20];
       
       int cuyear;  //每年的累积量
       int cumonth;  //每月的累积量
       char *cutype="cho5 wp302-05"; //	累积量型号

       int i;
       int rect_x,rect_y,width,height;
	   
	rect_x=100;
	rect_y=100;
   
      SelectFont(hmemDC,GBWFont); //设置字体
      //开始的月份2006年7月累积情况
//      sprintf (buff,"%d 年%d 月%s",year,month,"到");  
//      TextOut(hmemDC,rect_x+50,rect_y-45,buff);
	//结束的月份到2006年8月累积情况  
      sprintf (buff,"%d 年",year,"累积情况");  
      TextOut(hmemDC,rect_x+100,rect_y-45,buff);// 
      SelectFont(hmemDC,lgfont_11); //设置字体
      //型号如	CH05 WP302-05
      sprintf (buff,"%s",cutype);  
      TextOut(hmemDC,rect_x+50,rect_y-20,buff);
     //前半年的情况
      for (i=1; i<=6; i++){
      sprintf (buff,"%d-%d%s%d",year,i+6," :",cumonth);
     TextOut(hmemDC,rect_x,rect_y+20*i,buff);
	// printf ("xierong=%d%s%d\n",i," :",cuday);
     	}
      //后半年的情况
     for (i=1; i<=6; i++){
     sprintf (buff,"%d-%d%s%d",year+1,i," :",cumonth);
     TextOut(hmemDC,rect_x+200,rect_y+20*i,buff);
	// printf ("xierong=%d%s%d\n",i," :",cuday);
     	}
     SelectFont(hmemDC,GBWFont); //设置字体
     //本年度总累积
     sprintf (buff,"%s%d","本年度总累积:",cuyear);
     TextOut(hmemDC,rect_x+50,rect_y+250,buff);//如本月累积情况


	 

}

/* 日累积量显示函数*/
void DispCumulMonth(HDC hmemDC, int year,int month )
{

      static char buff[10];
      int cuday;  //每天的累积量
      int cumonth;  //每月的累积量
      char *cutype="cho5 wp302-05"; //	累积量型号

      int i;
      int rect_x,rect_y;
	rect_x=100;
	rect_y=35;


     SelectFont(hmemDC,GBWFont); //设置字体
     //哪个月如2006年7月累积情况
     sprintf (buff,"%d 年%d 月%s",year,month,"累积情况");  //如2006年7月累积情况
     TextOut(hmemDC,rect_x+50,rect_y-15,buff);//如2006年7月累积情况
     SelectFont(hmemDC,lgfont_11); //设置字体
      //型号如	CH05 WP302-05
     sprintf (buff,"%s",cutype); 
     TextOut(hmemDC,rect_x+50,rect_y,buff);
     //前半个月
     for (i=1; i<=15; i++){
     sprintf (buff,"%2d%s%s",i," :",cccudata[i]);
     TextOut(hmemDC,rect_x,rect_y+20*i,buff);
     	}
     //后半个月
     for (i=16; i<=31; i++){
     sprintf (buff,"%2d%s%s",i," :",cccudata[i]);
     TextOut(hmemDC,rect_x+200,rect_y+20*(i-15),buff);
     	}
     SelectFont(hmemDC,GBWFont); //设置字体
     //本月总累积
     sprintf (buff,"%s%d","本月总累积:",cumonth);
     TextOut(hmemDC,rect_x+50,rect_y+340,buff);//如本月累积情况

    

}

/*************************************************
  Function:       // 函数名称
  Description:    // 函数功能、性能等的描述
  Calls:          // 被本函数调用的函数清单
  Called By:      // 调用本函数的函数清单
  Table Accessed: // 被访问的表(此项仅对于牵扯到数据库操作的程序)
  Table Updated:  // 被修改的表(此项仅对于牵扯到数据库操作的程序)
  Input:          // 输入参数说明,包括每个参数的作
                  // 用、取值说明及参数间关系。
  Output:         // 对输出参数的说明。
  Return:         // 函数返回值的说明
  Others:         // 其它说明
*************************************************/

int  DisCumulDialogProc (HWND hDlg, int message, WPARAM wParam, LPARAM lParam)
{
    
    HDC hdc;
	    HDC  hmemDC;
    static  RECT  rect;
    static int cumulmode; //累积的显示的页面切换的index
    static int year,month;  //累积的显示的页面,哪年,哪月
    int id;
    static int i;
	int p;
	static  int day=1;
      gal_pixel bar_rect_color;
      gal_pixel bar_text_color;
      gal_pixel bar_back_color;
	  
    id= LOWORD (wParam);
    switch (message) 
    { 
    	case MSG_INITDIALOG:		
		cumulmode=0;
		year=2007;
		month=1;

			day=1;
		cumulmode=1;//默认为显示按日累积
		cumul_fvalue=123456;
		for(i=1;i<31;i++)
			{
			cumul_fvalue=cumul_fvalue+123;
		     //   SaveCuDateDay(9, 2007,1,day );
    			}
		//for(i=1;i<31;i++)
			// GetCuDateDay(9, 2007,1,day ) ;
		return 1;
	case MSG_SHOWWINDOW:
		      
		 break;       	        
	case MSG_PAINT:
		   
		hdc=BeginPaint(hDlg);
	        hmemDC=CreateCompatibleDC(hdc); 
			
  	bar_back_color=PIXEL_black;//背景PIXEL_black	 
  	bar_text_color=RGB2Pixel(hmemDC,0,128,128);;//RGB2Pixel(hmemDC,0,0,255);//文字颜色	 

      SetBrushColor(hmemDC,PIXEL_lightwhite);//lightwhite
      SetBkMode(hmemDC,BM_TRANSPARENT);// SetBkMode
      FillBox(hmemDC,0,0,WIDTH-LEFT,HEIGHT-TOP-BOTTOM);
      SetBkMode(hmemDC,BM_TRANSPARENT);
	  
      SetTextColor(hmemDC,bar_text_color);
	  
          if(cumulmode==MODE_MON)
	    DispCumulYear(hmemDC,2007,1);    
	    if(cumulmode==MODE_DAY)
	    DispCumulMonth(hmemDC,2007,1);	 
	    
	       BitBlt(hmemDC,0,0,WIDTH-LEFT,HEIGHT-TOP-BOTTOM,hdc,LEFT,0,0);
     DeleteCompatibleDC(hmemDC);      		

		EndPaint(hDlg,hdc);
		break;
	case MSG_COMMAND:
       {
        if(id==CONF_DISCUMUL_ANDAY)   //按日显示
        	{
        	cumulmode=MODE_DAY;
	      SetRect (&rect, 80,0,640,400);
	      InvalidateRect (hDlg, &rect, FALSE);
		}
	 if(id==CONF_DISCUMUL_ANMONTH)  //按月显示
        	{
        	cumulmode=MODE_MON;
	      SetRect (&rect, 80,0,640,400);
	      InvalidateRect (hDlg, &rect, FALSE);
        	}
	 if(id==CONF_DISCUMUL_BACK)     EndDialog (hDlg, 0); 	
	}
	break;
		case MSG_KEYDOWN:
		
	if(!keydowned)
		{
	if(id==KEYC_MODE)	
		SendDlgItemMessage(hDlg, DISCU_MODE, BM_SETSTATE , BST_PUSHED ,0);
		
	if(id==KEYC_EXIT)SendDlgItemMessage(hDlg, DISCU_EXIT, BM_SETSTATE , BST_PUSHED ,0);
	if(id==KEYC_CLEAR)SendDlgItemMessage(hDlg, DISCU_CLEAR, BM_SETSTATE , BST_PUSHED ,0);
	if(id==KEYC_CONF)SendDlgItemMessage(hDlg, DISCU_CONF, BM_SETSTATE , BST_PUSHED ,0);
	 if(id==KEYC_BACK)SendDlgItemMessage(hDlg, DISCU_BACK, BM_SETSTATE , BST_PUSHED ,0);
	 
		keydowned=1;
		}
	  break;	
	
	 case MSG_KEYUP:
		keydowned=0;

		 if(id==KEYC_MODE)    
		 	{
		      SendDlgItemMessage(hDlg, DISCU_MODE, BM_SETSTATE, 0,0);
		 	cumulmode+=1;
			if(cumulmode>2)cumulmode=1;
       	      SetRect (&rect, 80,0,640,400);
       	      InvalidateRect (hDlg, &rect, FALSE);
		 	}
		if(id==KEYC_EXIT)
 		{
 		   SendDlgItemMessage(hDlg, DISCU_EXIT, BM_SETSTATE, 0,0);
		
		}
		 if(id==KEYC_CLEAR) 
		 	{
		 	  SendDlgItemMessage(hDlg, DISCU_CLEAR, BM_SETSTATE, 0,0);
	          
       	      SetRect (&rect, 80,0,640,400);
       	      InvalidateRect (hDlg, &rect, FALSE);
		 	}
		  if(id==KEYC_CONF)
		 	{
		 	          SendDlgItemMessage(hDlg, DISCU_CONF, BM_SETSTATE, 0,0);
			
			 
		  	}
		  if(id==KEYC_BACK)
		 	{
		 	          SendDlgItemMessage(hDlg, DISCU_BACK, BM_SETSTATE, 0,0);
			
			EndDialog (hDlg, 0);
		  	}
		
		 break;
	case MSG_CLOSE:
		EndDialog (hDlg, 0);
		break;
    	}
   	 return DefaultDialogProc (hDlg, message, wParam, lParam);
    

}

void  DlgDisCumul (HWND hWnd)
{
    DlgDisCumu.controls = ctrl_conf_displaycumul;
    
    DialogBoxIndirectParam (&DlgDisCumu, hWnd, DisCumulDialogProc, 0L);
}


⌨️ 快捷键说明

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