📄 dispbar.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 + -