?? dispcurve.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 + -