📄 graph.c
字号:
#include <windows.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#include "hq.h"#include "hq_cl.h"#include "msg.h" //10,20,30GRAPH_PARA def_para ={30, 40, 30};LPGRAPH_PARA gra_para[] ={&GraphData.xlt, &GraphData.jlt, NULL};LPSTR gra_items[] ={"XLT", "JLT", NULL};extern BOOL GetInitString(LPSTR, LPSTR, LPSTR);extern BOOL PutInitString(LPSTR, LPSTR, LPSTR);extern ErrMsg(HWND, LPSTR);extern HWND ghWndMain, ghWndXlt, ghWndJlt;extern BOOL IsZsRec(int, int);HBITMAP hBmp =NULL;//this macro return respond x coor accroding to time value#define COOR(tim) (tim>=HqTime[GraphData.jys].pm_min_start?HqTime[GraphData.jys].am_min_count+(tim-HqTime[GraphData.jys].pm_min_start):tim -HqTime[GraphData.jys].am_min_start)//this macro return respond time value accroding to set serial#define TIME(x) (x>=HqTime[GraphData.jys].am_min_count?HqTime[GraphData.jys].pm_min_start+x-HqTime[GraphData.jys].am_min_count:HqTime[GraphData.jys].am_min_start+x)#define R_DOTS 0 //预留空间 BOOL GraphInit(){ int i; char tmp[100]; LPSTR tok; int r, g, b; LOGFONT lf; i =0; while(gra_items[i]) { if(!GetInitString("GRAPH", gra_items[i], tmp)) { memcpy(gra_para[i], &def_para, sizeof(GRAPH_PARA)); sprintf(tmp, "%i,%i,%i", def_para.ma[0], def_para.ma[1], def_para.ma[2]); PutInitString("GRAPH", gra_items[i], tmp); } else { if(!(tok =strtok(tmp, ","))) { memcpy(gra_para[i], &def_para, sizeof(GRAPH_PARA)); i++; continue; } while(*tok ==' ') tok++; gra_para[i]->ma[0] =atoi(tok); if(!(tok =strtok(NULL, ","))) { memcpy(gra_para[i], &def_para, sizeof(GRAPH_PARA)); i++; continue; } while(*tok ==' ') tok++; gra_para[i]->ma[1] =atoi(tok); if(!(tok =strtok(NULL, ","))) { memcpy(gra_para[i], &def_para, sizeof(GRAPH_PARA)); i++; continue; } while(*tok ==' ') tok++; gra_para[i]->gap =atoi(tok); } i++; } if(!GetInitString("GRAPH", "COLOR1", tmp)) { strcpy(tmp, "180,180,0"); PutInitString("GRAPH", "COLOR1", tmp); } r =255; if(tok =strtok(tmp, ",")) r =atoi(tok)%256; g =0; if(tok) if(tok =strtok(NULL, ",")) g =atoi(tok)%256; b =255; if(tok) if(tok =strtok(NULL, ",")) b =atoi(tok)%256; GraphData.color[0] =RGB(r, g, b); if(!GetInitString("GRAPH", "COLOR2", tmp)) { strcpy(tmp, "0,255,255"); PutInitString("GRAPH", "COLOR2", tmp); } r =0; if(tok =strtok(tmp, ",")) r =atoi(tok)%256; g =255; if(tok) if(tok =strtok(NULL, ",")) g =atoi(tok)%256; b =255; if(tok) if(tok =strtok(NULL, ",")) b =atoi(tok)%256; GraphData.color[1] =RGB(r, g, b); memset(&lf, 0, sizeof(lf)); lf.lfHeight =13; lf.lfWeight =FW_NORMAL; strcpy(lf.lfFaceName, "Termianl"); GraphData.hFont =CreateFontIndirect(&lf); if(GraphData.hFont ==NULL) { ErrMsg(ghWndMain, "Create font failed!"); } return TRUE;}void GraphExit(void){ if(GraphData.hFont) DeleteObject(GraphData.hFont); if(hBmp) DeleteObject(hBmp);}int vLineTo(HDC hDC, int x1, int y1){ int x0,y0,i; DWORD dw; dw =GetCurrentPosition(hDC); x0 =LOWORD(dw); y0 =HIWORD(dw); if(y1>y0) { for(i=y0;i<=y1;i++) { if(i-(int)(i/4)*4==0) SetPixel(hDC,x0,i,RGB(80,80,80)); } } if(y1<y0) { for(i=y0;i>=y1;i--) { if(i-(int)(i/4)*4==0) SetPixel(hDC,x0,i,RGB(80,80,80)); } } return 0;}int hLineTo(HDC hDC, int x1, int y1){ int x0,y0,i; DWORD dw; dw =GetCurrentPosition(hDC); x0 =LOWORD(dw); y0 =HIWORD(dw); if(x1>x0) { for(i=x0;i<=x1;i++) { if(i-(int)(i/4)*4==0) SetPixel(hDC,i,y0,RGB(100,100,100)); } } if(x1<x0) { for(i=x0;i>=x1;i--) { if(i-(int)(i/4)*4==0) SetPixel(hDC,i,y0,RGB(100,100,100)); } } return 0;}int DrawXlt(HDC hDC, LPRECT rc){ int i, k,j; int ma; double fplus; float zjjg; double fhdj, fwdt, f ,zgjg; HPEN hPen, hPenRed, hPenGreen; int tim; char tmp[20]; //画Y坐标 hPen =CreatePen(PS_SOLID, 2, RGB(255, 255, 255)); SelectObject(hDC, hPen); MoveTo(hDC,rc->left,rc->bottom); LineTo(hDC,rc->left,rc->top+2); LineTo(hDC,rc->right-1,rc->top+2); SelectObject(hDC,GetStockObject(WHITE_PEN)); DeleteObject(hPen); if(GraphData.minEnd <=0 || GraphData.minCount <=0) return -1; SelectObject(hDC, GetStockObject(WHITE_PEN)); fwdt =(double)(rc->right-rc->left)/(HqTime[HqPaintData.jys].am_min_count +HqTime[HqPaintData.jys].pm_min_count+R_DOTS); if(GraphData.GraHead.zgjg==0) zgjg = 100.00; else zgjg =GraphData.GraHead.zgjg; fhdj =(double)(rc->bottom-rc->top)/(zgjg*2); SetViewportOrg(hDC, rc->left, rc->bottom-(rc->bottom-rc->top)/2); SetTextColor(hDC, RGB(255, 255, 0)); SelectObject(hDC, GraphData.hFont); //画X坐标 hPen =CreatePen(PS_SOLID, 1, RGB(80, 80, 80)); SelectObject(hDC, hPen); for(f =-GraphData.GraHead.zgjg; f<=zgjg+0.001;f+=zgjg/5) { MoveTo(hDC, rc->right-rc->left-2, (int)(f*fhdj)); LineTo(hDC, 0, (int)(f*fhdj)); sprintf(tmp, "%.2f", f+GraphData.GraHead.zrsp); if((int)(f*100) >0) SetTextColor(hDC, RGB(255, 0, 0)); else if((int)(f*100) <0) SetTextColor(hDC, RGB(0, 255, 0)); else SetTextColor(hDC, RGB(255, 255, 255)); SetTextAlign(hDC, TA_RIGHT|TA_BASELINE); TextOut(hDC, -4, -(int)(f*fhdj), tmp, strlen(tmp)); sprintf(tmp, "%.1f%c", f*100/GraphData.GraHead.zrsp,'%'); SetTextAlign(hDC, TA_LEFT|TA_BASELINE); TextOut(hDC, rc->right-rc->left+2, -(int)(f*fhdj), tmp, strlen(tmp)); } SelectObject(hDC, GetStockObject(WHITE_PEN)); DeleteObject(hPen); hPen =CreatePen(PS_SOLID, 2, RGB(255, 255, 255)); SelectObject(hDC, hPen); MoveTo(hDC, 0, 0); LineTo(hDC, rc->right-rc->left-2, 0); SelectObject(hDC, GetStockObject(WHITE_PEN)); DeleteObject(hPen); tim =GraphData.lpGraData[0].tim; hPenRed =CreatePen(PS_SOLID, 1, RGB(200, 0, 200)); hPenGreen =CreatePen(PS_SOLID, 1, RGB(0, 255, 0)); zjjg =GraphData.lpGraData[0].zjjg; MoveTo(hDC, (int)(fwdt*COOR(tim)), -(int)(fhdj*zjjg)); for(i =1; i<GraphData.minCount; i++) { tim =GraphData.lpGraData[GraphData.lpMinPos[i]].tim; if(tim>HqTime[GraphData.jys].pm_min_start+HqTime[GraphData.jys].pm_min_count) break; if(tim==0) continue; zjjg =GraphData.lpGraData[GraphData.lpMinPos[i]].zjjg; SelectObject(hDC, hPenRed); LineTo(hDC, (int)(fwdt*COOR(tim)), -(int)(fhdj*zjjg)); } SelectObject(hDC, GetStockObject(WHITE_PEN)); DeleteObject(hPenRed); DeleteObject(hPenGreen); for(k =0; k<1; k++) { ma =GraphData.xlt.ma[k]; if(GraphData.minCount<ma) continue; hPen =CreatePen(PS_SOLID, 0, RGB(255,255,0));//GraphData.color[k]); SelectObject(hDC, hPen); //SetROP2(hDC, R2_XORPEN); /////////////////////////////////////////////////////////// //以下为分时平均 //fplus =(float)0.0; //for(i =0; i<ma; i++) // fplus +=GraphData.lpGraData[GraphData.lpMinPos[i]].zjjg; //tim =GraphData.lpGraData[GraphData.lpMinPos[i-1]].tim; //MoveTo(hDC, (int)(fwdt*COOR(tim)), -(int)(fhdj*fplus/ma)); // //for(; i<GraphData.minCount; i++) //{ // zjjg =GraphData.lpGraData[GraphData.lpMinPos[i-ma]].zjjg; // fplus-=zjjg; // zjjg =GraphData.lpGraData[GraphData.lpMinPos[i]].zjjg; // fplus +=zjjg; // tim =GraphData.lpGraData[GraphData.lpMinPos[i]].tim;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -