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

📄 dispbar.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 "dispcurve.h"
#include "dispbar.h"

//对棒图中的参数初始化

void LoadBarBMP(void)
  {  unsigned char buf[20]; 
}


void BarDisplayValue()
{



}

/*
h:BAR总高
根据浮点PV值和通道ID
其他输入:
barstru.l_limit
barstru.h_limit
得到单个棒图填充的高度
*/
int GetFillBoxHeight(int id,float ipv2)
{
int high;
int low;
int height;
int dot;
int point;
int ipv;
dot=channel_disp[id].dot;
 high=channel_conf[id].h_limit; // 显示区上限int
 low=channel_conf[id].l_limit ;  // 显示区下限int
high=high*dot*10;

ipv=ipv2*(dot*10);

low=0;

if(ipv>high) height=260;
else if(ipv<=low) height=0;
else height=((ipv-low)*(260))/(high-low);
return height;
}


/*


传入参数:

*/
void DispStat(HDC hdc,int mode)
{
int dev_id;
int id;
int bar_height;//所有棒图固有高度
int bar_width;
unsigned char str_from[50];
unsigned char str_stat[10];
unsigned char str_temp[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,1,0,WIDTH-LEFT,HEIGHT-TOP-BOTTOM);
     SetBkMode(hmemDC,BM_TRANSPARENT);
//设置字体颜色
	SetTextColor(hmemDC,bar_text_color);  //矩形图TAG	   
	  SelectFont(hmemDC,songgb16font);
//遍历所有设备仪表,在仪表注册时候完成初始化
//在测试时候在DeviceDefaultReg()中注册
	/*	for(dev_id=0;dev_id<6;dev_id++)
	{
	if(devicesinfo[dev_id].dev_type==1)//读取AI通道信息
      		{  
      		//遍历所有通道分别是什么设备
      		for(id=0;id<ai_chan_sum;id++)
		{sprintf(str_from,"AI%d 来自: %s",id,devicesinfo[dev_id].dev_name);
      		TextOut(hmemDC,80,60+id*25,str_from);
      			}
		}
		else 
//读取dI通道信息
		if(devicesinfo[dev_id].dev_type==2)//读取DI设备
		{  
      		for(id=0;id<6;id++)
      			{
		sprintf(str_from,"DI %d 来自: %s",id,devicesinfo[dev_id].dev_name);
      		TextOut(hmemDC,40+80*(id%2),40+id*25,str_from);
      			}	
		}
	}*/
//读取do通道信息
        SetPenColor(hmemDC,bar_rect_color);//COLOR_darkgray
        Rectangle(hmemDC, rect_x, rect_y,rect_x+40,rect_y+60);   	   
	 SetBrushColor(hmemDC,RGB2Pixel(hmemDC,68,230,222));
	FillBox(hmemDC,30,28, 100,200 );
      FillBox(hmemDC,300,28, 100,200 );
rect_x=260;	  
 rect_y=30;
for(id=0;id<16;id++)
{
        //SetBrushColor(hmemDC,channel_disp[i].color);
        sprintf(str_from,"继电器 %d     ",id);
        TextOut(hmemDC,50+270*(id%2),30+(id/2)*25,str_from);
       if(doinfo[id].flag)
       	{
        FillBoxWithBitmap(hmemDC,150+270*(id%2),rect_y+(id/2)*25 ,16,16,&staticbmp[1]);					            					              
		TextOut(hmemDC,150+270*(id%2)+20,rect_y+(id/2)*25,"on");
       	}
       else
       	{
        FillBoxWithBitmap(hmemDC,150+270*(id%2),rect_y+(id/2)*25 ,16,16,&staticbmp[0]);					            					              
		TextOut(hmemDC,150+270*(id%2)+20,rect_y+(id/2)*25,"off");
       	}
}

//读取定时器信息
	FillBox(hmemDC,30,240, 100,150 );
      FillBox(hmemDC,200,240, 100,150 );
	  FillBox(hmemDC,370,240, 100,150 );
       
     
 		sprintf(str_from,"计数器",id);
        TextOut(hmemDC,230,240,str_from);
		 sprintf(str_from,"累加器",id);
        TextOut(hmemDC,380,240,str_from);
for(id=0;id<6;id++)
{
 sprintf(str_from,"定时器 %d",id);
    TextOut(hmemDC,50,240+id*25,str_from);
       if(timer_stat[id].flag)
       	{
       	
        	FillBoxWithBitmap(hmemDC,150,240+id*25 ,14,14,&staticbmp[1]);					            					              
		TextOut(hmemDC,150+20,240+id*25,"on");
       	}
       else
       	{
        	FillBoxWithBitmap(hmemDC,150,240+id*25 ,14,14,&staticbmp[0]);					            					              
		TextOut(hmemDC,150+20,240+id*25,"off");
       	}



}
//读取计数器信息


//读取累加器信息

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

}

/*
first:第一个通道,可以为0通道,
n:每页共要显示的通道数目
x:整个棒图显示区起点X坐标
y:整个棒图显示区起点y坐标
w:显示区总宽
h:显示区总高

传入参数:bar_width,bar_height

*/
void DrawBar(HDC hdc,int first,int n,int addr_x,int addr_h)
{
int y,addr_w,x,h;
	//HEIGHT-TOP;
       int bar_height=260;       //所有棒图固有高度
       int bar_width=30;
       int id;
       HDC  hmemDC;
	gal_pixel barcolor,topbackcolor; 
       int rect_x,rect_y,width,height;
       int FillBoxHeight;//填充的绝对高度
       int FillBox_y;
	 int bmp_y;  //报警图片位置

        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
      
	  
y=TOP+TOP2;//离上面的距离
addr_w=WIDTH-addr_x;
h=addr_h-TOP2-BOTTOM2  ;//柱图高度的实际值

FillBox(hmemDC,1,0,addr_w,h+TOP2);
	  
//画上下两行数显
 DrawRect( hmemDC, first , n,  addr_w, addr_h);


	  
      //SetBkMode(hmemDC,BM_TRANSPARENT);
      x=(addr_w/n)/2;
//printf("%d %d\n",first,n);
      for (id=first;id<n+first;id++)
       {
              channel_conf[id].name[6]='\0';
       	//sprintf(channel_disp[id].name,"%s\n",channel_disp[id].name) ;
              rect_x=x+ (addr_w/n)*(id-first)-10;   	//一个矩形的宽度为60       
              rect_y=y;			 //单页上设置坐标		   
       	// 	通道信息结构体(tag,单位,颜色,上下限,取样时间)
       	//    (单通道显示左上坐标,长宽)
             SetPenColor(hmemDC,bar_rect_color);//COLOR_darkgray
             Rectangle(hmemDC, rect_x, rect_y,rect_x+bar_width,rect_y+bar_height);   	   
       	SetTextColor(hmemDC,bar_text_color);  //矩形图TAG	   
       	SelectFont(hmemDC,songgb16font);
		MoveTo(hmemDC,rect_x-10,rect_y+bar_height);
		LineTo(hmemDC,rect_x,rect_y+bar_height);
             TextOut(hmemDC,rect_x,rect_y+bar_height,channel_conf[id].name);//channel_disp[id].desc
        	//SelectFont(hmemDC,songgb16font);   	//矩形图UNIT
        	TextOut(hmemDC,rect_x,rect_y+bar_height+20,channel_conf[id].unit);//channel_disp[id].unit	   
	 //根据PV值计算BAR高度
	FillBoxHeight=GetFillBoxHeight(id,channel_disp[id].fpv);	  //根据PV值设定棒图高度
	FillBox_y=rect_y+(bar_height-FillBoxHeight);
	SetBrushColor(hmemDC,channel_disp[id].color); //填充 barstru[id].barcolor
	FillBox(hmemDC,  rect_x+1, FillBox_y+1, bar_width-2 , FillBoxHeight); //显示矩形
	SetTextColor(hmemDC,bar_text_color);      //设置字体COLOR 	
	//SelectFont(hmemDC,songgb16font);
	TextOut(hmemDC,rect_x+1,FillBox_y+1-20,channel_disp[id].data);//矩形图PV VALUE	
	//显示4档报警指示图片
	//
	bmp_y=GetFillBoxHeight(id,channel_conf[id].hh_alarm);
	bmp_y=rect_y+(bar_height-bmp_y);
	FillBoxWithBitmap(hmemDC,rect_x+32,bmp_y ,8,8,&BarAlertBmp[HH_BMP]);					            					              
	bmp_y=GetFillBoxHeight(id,channel_conf[id].h_alarm);
	FillBoxWithBitmap(hmemDC,rect_x+32,rect_y+(bar_height-bmp_y) ,8,8,&BarAlertBmp[H_BMP]);					            					              
	bmp_y=GetFillBoxHeight(id,channel_conf[id].l_alarm);
	FillBoxWithBitmap(hmemDC,rect_x+32,rect_y+(bar_height-bmp_y) ,8,8,&BarAlertBmp[L_BMP]);					            					              
	bmp_y=GetFillBoxHeight(id,channel_conf[id].ll_alarm);
	FillBoxWithBitmap(hmemDC,rect_x+32,rect_y+(bar_height-bmp_y) ,8,8,&BarAlertBmp[LL_BMP]);					            					              

     }
	
     BitBlt(hmemDC,0,0,addr_w,addr_h,hdc,addr_x,TOP,0);
     DeleteCompatibleDC(hmemDC);      		

}





⌨️ 快捷键说明

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