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

📄 dispcurve.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 "init.h"
#include "fonts.h"
#include "dispcurve.h"
//设置时标
void RRDrawTime(HDC hdc, int CurPos, int x, int y)
{
    gal_pixel tempcolor;
    unsigned char buf[20];

    int tempA,tempB;
    tempA=(CurPos)/60;
    tempB=(CurPos)%60;
	
  sprintf(buf," %02d:%02d:%02d",10,31,31);

    SelectFont(hdc,helfont14);
    tempcolor= RGB2Pixel(hdc,255,255,0);
    SetBkMode(hdc,BM_TRANSPARENT);
    SetTextColor(hdc,tempcolor);
    TextOut(hdc,x,y,buf);

}
void DrawBackRect(void)
{/*
		
*/
}
/*
根据整型值和小数点来定显示区数值
Y坐标


*/
int GetCurveHeight(int id2)
{
int id;
int high=0;
int low=0;
int height=0;//相对高度,
int ipv=0;
int dot;
static int point;
id=id2;
dot=channel_disp[id].dot;
 high=channel_conf[id].h_limit;
 low=channel_conf[id].l_limit;
  ipv=channel_disp[id].ipv/(dot*10);
  //根据下满面板的开关情况,决定按钮面板,再决定
//  显示的高度
 		    height=HEIGHT-TOP;
if(ipv>=high) point=TOP2+20;
else if(ipv<=low) point=height-BOTTOM -20;
else point= height-BOTTOM -(((ipv-low)*(height-BOTTOM- TOP2))/(high-low));
 
return point;
}
/*
绘制上下两排的数显框

*/
void DrawRect(HDC hmemDC,int first ,int n,int w,int h)
 	{
	int i;
	unsigned char str[10];
		int rect_x,rect_y, rect_w,rect_h;
	//绘制背景------------------------------------
	for(i=first;i<first+n;i++){
		if(i<n/2){
				rect_w=w/(n/2);
				rect_x=rect_w*(i-first);   //一个矩形的宽度为60      
				rect_y=0; //单页上设置坐标

			}
			else				
				{
				rect_w=w/(n-n/2);
				rect_x= rect_w*(i-n/2-first);   //一个矩形的宽度为60      
				rect_y=h-BOTTOM2; //单页上设置坐标

			}
			
			Rectangle(hmemDC, rect_x, rect_y,rect_x+rect_w,rect_y+BOTTOM2);   	   
			 SetBrushColor(hmemDC,channel_disp[i].color); //channel_disp[i].color
			FillBox(hmemDC, rect_x+1, rect_y+1, rect_w-1, BOTTOM2-1); 
			 SelectFont(hmemDC,lgfont_11); //设置字体
			TextOut(hmemDC,rect_x+1+rect_w/3,rect_y+BOTTOM2/3,channel_disp[i].data);
 			SelectFont(hmemDC,songgb16font); //设置字体
			TextOut(hmemDC,rect_x,rect_y,channel_conf[i].name);//channel_disp[i].desc
 			SelectFont(hmemDC,lgfontgb12); 
			//单位
       		TextOut(hmemDC,rect_x+1+rect_w-30,rect_y,channel_conf[i].unit);
	sprintf(str,"%ds",channel_conf[i].interval);
      TextOut(hmemDC,rect_x+1+rect_w-30,rect_y+BOTTOM2-12,str);//采样时间间隔			

	}

 	}
 /*画图
 x:绘图区x坐标
y:绘图区y坐标
w:
h:
ipv:实时值
zoom:放大倍数
//纵坐标不放大,横坐标可以变
当	zoom=1时候,实时绘制区的时间显示有

period=1天

 */
void Drawline (HDC hdc,int first ,int n,int addr_x,int addr_h)//,PandectDataStruct *channel_disp)
{
	int y, w,h;


       int j,i;
	int k;
	int channum;
	int point;
	unsigned char str[10];
	int  index;//第N个点 
	int num;   //区域内实时点的个数

	gal_pixel colorl_text;
	HDC  hmemDC;
	int zoom;
	int  seco_perpage;//每页
	//记录列线开始的时间
	 char speriod[8];
	 char mperiod[8];
	 char hperiod[8];

y=TOP;
w=WIDTH-addr_x;
	 
//给时标初始化------------------------
	speriod[8]=seco;
	mperiod[8]=minu;
	hperiod[8]=hour;
   	for(k=1;k<=8;k++)
	 		{
	 		speriod[k-1]=speriod[k]-20;
			mperiod[k-1]=mperiod[k];
			hperiod[k-1]=hperiod[k];
			if(speriod[k-1]<0){speriod[k-1]=60-speriod[k-1];
			mperiod[k-1]--;			}
			if(mperiod[k-1]<0){mperiod[k-1]=60-mperiod[k-1];
			hperiod[k-1]--;			}
			if(hperiod[k-1]<0){hperiod[k-1]=24-hperiod[k-1];
			 			}
	 		}
	
//-------------------------------------------end   
	k=1;
	zoom=gzoom;
	zoom=10;//两个点之间10个象素
	 num=w/zoom;	//把显示区560 ,分为6列
	 RealIndex_max=56;//显示区共包括了120个点
	 //假如一格表示20秒,那么一页表示120秒的数据
	 index=RealIndex;   //控制最小的曲线左移刷新时间
	 hmemDC=CreateCompatibleDC(hdc);
	  
     	SetBkMode(hmemDC,BM_TRANSPARENT);
		SetBrushColor(hmemDC, PIXEL_lightwhite);	
	    FillBox(hmemDC,1,0,w,h);	

  DrawRect( hmemDC, first , n,  w, addr_h);


	 
	//与曲线显示有关----------------------------------
       SetPenColor (hmemDC,COLOR_darkgray);//COLOR_darkgray  PIXEL_lightwhite
    
     // y=y+TOP2;
       h=addr_h-TOP2-BOTTOM2;
	 seco_perpage=w/(zoom*4)+1;//
	 if(index%10==0)//给新的时标赋值
	 	{
	 	for(k=1;k<=8;k++)
	 		{
	 		speriod[k-1]=speriod[k];
			mperiod[k-1]=mperiod[k];
			hperiod[k-1]=hperiod[k];
	 		}
		speriod[k]=seco;
		mperiod[k]=minu;

	 }
	 //根据index来画列线
        for(k=0;k<=8;k++)//每列20个线段
           {   
            MoveTo(hmemDC,k*70+(7-index%7)*10,TOP2);//w+(j-index)*zoom
             LineTo(hmemDC,k*70+(7-index%7)*10,h+TOP2 );   
	      //绘制完本条竖线后绘制对应的时刻
	      sprintf(str," %02d:%02d:%02d",hour,minu,seco);
    		SelectFont(hmemDC,helfont14);
  	       SetBkMode(hmemDC,BM_TRANSPARENT);
 	        SetTextColor(hmemDC,RGB2Pixel(hmemDC,0,0,0));
  	       TextOut(hmemDC,k*70+(7-index%7)*10-70,340,str); 
	
        }	
        for(j=1;j<=h/(zoom*3);j++)
        {	    
        	MoveTo(hmemDC,0,TOP2+zoom*3*j);
          	LineTo(hmemDC,w,TOP2+zoom*3*j);
        }  	 

  	 //根据不同的采用频率显示不同的点
  	 //channel_disp[i].interval,
  	 bdispcurve=1;
	 for(i=first;i<first+n;i++){
		      SetPenColor(hmemDC, channel_disp[i].color);//PIXEL_lightwhite
			 	if(fullscr)
					{
				
					for(j=index;j<=num;j++){	//从左到右
					MoveTo(hmemDC, (j-index-1)*10,  channel_disp[i].point[j-1]);	
					LineTo(hmemDC,(j-index)*10, channel_disp[i].point[j]);
						}//channel_disp[i].point[j]在ReadDefaultValue()函数中被邋赋值
		 			MoveTo(hmemDC, (num-index)*10,  channel_disp[i].point[num]);	
		 			LineTo(hmemDC,(num-index+1)*10,   channel_disp[i].point[0]);
			
					} 
		
				for(j=1;j<=index;j++){
					
					MoveTo(hmemDC, w+(j-index+1)*10,  channel_disp[i].point[j]);	
 					
					LineTo(hmemDC,w+(j-index+0)*10,   channel_disp[i].point[j-1]);
				}  
	 }
//	 for(j=1;j<=index;j++)
//	 printf("%d ",   channel_disp[1].point[j-1]);
	
	
	 BitBlt(hmemDC,0,0,w,addr_h,hdc,addr_x+1,TOP,0);//COPY (0,40)
	 DeleteCompatibleDC(hmemDC);
	   bdispcurve=0;
	 //   topbackcolor=RGB2Pixel(hdc,0,0,100);
	 //SetBrushColor(hdc,topbackcolor);  
	 //FillBox(hdc,1,1,WIDTH,BOTTOM); 

 }



















































 

⌨️ 快捷键说明

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