📄 draw.c
字号:
areay=klineareay; areaheight=klineareaheight; break; case COLUMEAREA: areax=columeareax; areay=columeareay; areaheight=columeareaheight; break; case JSZBAREA: areax=zbareax; areay=zbareay; areaheight=zbareaheight; break; default: areax=klineareax; areay=klineareay; areaheight=klineareaheight; break; } tmpjc=areazgj-areazdj; x=areax+(klinewidth+1)*(num-1); x1=x+klinewidth-1; y=(areazgj-stock[anum].zgj)*areaheight/tmpjc+areay; y1=(areazgj-stock[anum].zdj)*areaheight/tmpjc+areay; ry=(areazgj-stock[anum].spj)*areaheight/tmpjc+areay; gdk_draw_line(g->pixmap,penaline,x,y,x,y1); gdk_draw_line(g->pixmap,penaline,x,ry,x1,ry);}void drawAlinearea(int wherearea){ int i; if(frechflag == 0) return; for(i=0;i<areaklinenum && areastart+i<=stocksum;i++){ drawAline(wherearea,areastart+i,i+1); } return; }void drawKline(int wherearea,int anum,int num){ int x,y,x1,y1; int rx,rx1,ry,ry1; int tmpjc; int areax,areay,areaheight; if(frechflag == 0) return; switch(wherearea){ case KLINEAREA: areax=klineareax; areay=klineareay; areaheight=klineareaheight; break; case COLUMEAREA: areax=columeareax; areay=columeareay; areaheight=columeareaheight; break; case JSZBAREA: areax=zbareax; areay=zbareay; areaheight=zbareaheight; break; default: areax=klineareax; areay=klineareay; areaheight=klineareaheight; break; } tmpjc=((areazgj-areazdj)>0?(areazgj-areazdj):1); x=areax+(klinewidth+1)*(num-1); x1=x+klinewidth/2+1; y=(areazgj-stock[anum].zgj)*areaheight/tmpjc+areay; y1=(areazgj-stock[anum].zdj)*areaheight/tmpjc+areay; rx=x1-klinewidth/2; rx1=x1+klinewidth/2; ry=(areazgj-stock[anum].kpj)*areaheight/tmpjc+areay; ry1=(areazgj-stock[anum].spj)*areaheight/tmpjc+areay; if(stock[anum].kpj>stock[anum].spj){ gdk_draw_line(g->pixmap,penklinedown,x1,y,x1,y1); gdk_draw_rectangle(g->pixmap,penklinedown,TRUE,rx,ry, klinewidth,ry1-ry); } else{ if(stock[anum].kpj==stock[anum].spj){ if(anum-1 < 1){ gdk_draw_line(g->pixmap,penklineup,x1,y,x1,y1); gdk_draw_rectangle(g->pixmap,penklineup,TRUE,rx,ry1, klinewidth,1); } else{ if(stock[anum].spj > stock[anum-1].spj){ gdk_draw_line(g->pixmap,penklineup,x1,y,x1,y1); gdk_draw_rectangle(g->pixmap,penklineup,TRUE,rx,ry1, klinewidth,1); } else{ gdk_draw_line(g->pixmap,penklinedown,x1,y,x1,y1); gdk_draw_rectangle(g->pixmap,penklinedown,TRUE,rx,ry1, klinewidth,1); } } } else{ gdk_draw_line(g->pixmap,penklineup,x1,y,x1,y1); gdk_draw_rectangle(g->pixmap,penklineup,TRUE,rx,ry1, klinewidth,ry-ry1); } } }void drawKlinearea(int wherearea){ int i; if(frechflag == 0) return; for(i=0;i<areaklinenum && areastart+i<=stocksum;i++){ drawKline(wherearea,areastart+i,i+1); } return; }void drawColume(int wherearea,int anum,int num){ int x,rx,ry,ry1; int areax,areay,areaheight; float tmp; if(frechflag == 0) return; switch(wherearea){ case KLINEAREA: areax=klineareax; areay=klineareay; areaheight=klineareaheight; break; case COLUMEAREA: areax=columeareax; areay=columeareay; areaheight=columeareaheight; break; case JSZBAREA: areax=zbareax; areay=zbareay; areaheight=zbareaheight; break; default: areax=klineareax; areay=klineareay; areaheight=klineareaheight; break; } x=areax+(klinewidth+1)*(num-1); rx=x+1; //float overflow tmp=areacjl-stock[anum].cjsl; tmp=tmp/areacjl*areaheight+areay; ry=(int)tmp; ry1=areay+areaheight; if(stock[anum].kpj > stock[anum].spj){ gdk_draw_rectangle(g->pixmap,penklinedown,TRUE,rx,ry, klinewidth,ry1-ry); } else{ if(stock[anum].kpj==stock[anum].spj){ if(anum-1 < 1){ gdk_draw_rectangle(g->pixmap,penklineup,TRUE,rx,ry, klinewidth,ry1-ry); } else{ if(stock[anum].spj > stock[anum-1].spj){ gdk_draw_rectangle(g->pixmap,penklineup,TRUE,rx,ry, klinewidth,ry1-ry); } else{ gdk_draw_rectangle(g->pixmap,penklinedown,TRUE,rx,ry, klinewidth,ry1-ry); } } } else{ gdk_draw_rectangle(g->pixmap,penklineup,TRUE,rx,ry, klinewidth,ry1-ry); } } }void drawColumearea(int wherearea){ int i; if(frechflag == 0) return; for(i=0;i<areaklinenum && areastart+i<=stocksum;i++){ drawColume(wherearea,areastart+i,i+1); } return; }void drawAverageLine(int num,GdkGC *pen){ int x,x1,y,y1; int i,tmpjc,tmp; if(!frechflag) return; tmpjc=areazgj-areazdj; for(i=0;i<areaklinenum && areastart+i<stocksum;i++){ if(areastart <= 1){ if(i<num) continue; } x=klineareax+(klinewidth+1)*i+klinewidth/2+1; x1=x+klinewidth+1; tmp=getAverageLine(areastart+i,num); y=(areazgj-tmp)*klineareaheight/tmpjc+klineareay; tmp=getAverageLine(areastart+i+1,num); y1=(areazgj-tmp)*klineareaheight/tmpjc+klineareay; gdk_draw_line(g->pixmap,pen,x,y,x1,y1); } }void drawAverageColume(int num,GdkGC *pen){ int x,x1,y,y1; int i; long tmp; float tmp1; if(!frechflag) return; for(i=0;i<areaklinenum && areastart+i<stocksum;i++){ if(areastart <= 1){ if(i<num) continue; } x=klineareax+(klinewidth+1)*i+klinewidth/2+1; x1=x+klinewidth+1; tmp=getAverageColume(areastart+i,num); tmp1=areacjl-tmp; tmp1=tmp1/areacjl*columeareaheight+columeareay; y=(int)tmp1;// y=(areacjl-tmp)*columeareaheight/areacjl+columeareay; tmp=getAverageColume(areastart+i+1,num); tmp1=areacjl-tmp; tmp1=tmp1/areacjl*columeareaheight+columeareay; y1=(int)tmp1;// y1=(areacjl-tmp)*columeareaheight/areacjl+columeareay; gdk_draw_line(g->pixmap,pen,x,y,x1,y1); } }void drawJszbLine(){ int x,x1,y,y1; int i; int num; jpointer jc=100; jpointer zg=0,zd=0; jpointer tmp; char tmpstr[256]; if(!frechflag) return; if(jszbrec[curjszbno].gdz){ zg=jszbrec[curjszbno].maxgdz; zd=jszbrec[curjszbno].mingdz; jc=jszbrec[curjszbno].maxgdz-jszbrec[curjszbno].mingdz; } else{ zg=getJszbZg(areastart,areastart+areaklinenum); zd=getJszbZd(areastart,areastart+areaklinenum); jc=getJszbZg(areastart,areastart+areaklinenum)- getJszbZd(areastart,areastart+areaklinenum); } sprintf(tmpstr,"%3.2f",zg);
gdk_draw_string(g->pixmap, efont,penfont, CHARADD,zbareay+10,tmpstr); sprintf(tmpstr,"%3.2f",zd);
gdk_draw_string(g->pixmap, efont,penfont, CHARADD,zbareay+zbareaheight-5,tmpstr); if(jszbrec[curjszbno].spiltlinenum<MAXSPILTLINENUM){ for(i=0;i<jszbrec[curjszbno].spiltlinenum;i++){ gdk_draw_line(g->pixmap,penlayoutline,zbareax, zbareay+zbareaheight*(i+1)/(jszbrec[curjszbno].spiltlinenum+1), zbareax+zbareawidth, zbareay+zbareaheight*(i+1)/(jszbrec[curjszbno].spiltlinenum+1)); sprintf(tmpstr,"%3.2f", zg-jc*(i+1)/(jszbrec[curjszbno].spiltlinenum+1));
gdk_draw_string(g->pixmap, efont,penfont, CHARADD, zbareay+zbareaheight*(i+1)/(jszbrec[curjszbno].spiltlinenum+1)+5, tmpstr); } } // printf("%3.2f| %3.2f| %3.2f\n",zg,zd,jc);// printf("%d %d\n",zbareaheight,zbareay); for(num=0;num<jszbrec[curjszbno].num;num++){ if(!jszbrec[curjszbno].initflag[num]) continue; if(jszbrec[curjszbno].type[num] == JSZBKLINETYPE){ drawKlinearea(JSZBAREA); continue; } if(jszbrec[curjszbno].type[num] == JSZBLINETYPE){ for(i=0;i<areaklinenum && areastart+i<stocksum;i++){ if(areastart <= jszbrec[curjszbno].arg[num]){ if(i<jszbrec[curjszbno].arg[num]) continue; } x=zbareax+(klinewidth+1)*i+klinewidth/2+1; x1=x+klinewidth+1; tmp=jszbrec[curjszbno].jszbdata[num][areastart+i]; y=(int)(ABS(tmp-zg)*zbareaheight/jc+zbareay); tmp=jszbrec[curjszbno].jszbdata[num][areastart+i+1]; y1=(int)(ABS(tmp-zg)*zbareaheight/jc+zbareay); gdk_draw_line(g->pixmap,penjszb[num],x,y,x1,y1);/* printf("%3.2f %3.2f %d %d %d %d %d\n",tmp,zg,zbareaheight,x,x1,y,y1); printf("%3.2f %3.2f %3.2f\n",tmp,zg,ABS(tmp-zg));*/ } continue; } if(jszbrec[curjszbno].type[num] == JSZBCOLUMETYPE){ y=(int)(ABS(0-zg)*zbareaheight/jc+zbareay); gdk_draw_line(g->pixmap,penklineup,zbareax,y, zbareax+zbareawidth,y); for(i=0;i<areaklinenum && areastart+i<stocksum;i++){ if(areastart <= jszbrec[curjszbno].arg[num]){ if(i<jszbrec[curjszbno].arg[num]) continue; } x=zbareax+(klinewidth+1)*i+klinewidth/2+1; tmp=jszbrec[curjszbno].jszbdata[num][areastart+i]; y1=(int)(ABS(tmp-zg)*zbareaheight/jc+zbareay); if(tmp>=0) gdk_draw_line(g->pixmap,penup,x,y,x,y1); else gdk_draw_line(g->pixmap,pendown,x,y,x,y1); } } } }void drawXcur(int linex,int liney){ int x,x1; if(mouselineflag){ x=klineareax+(klinewidth+1)*(linex-areastart); x1=x+klinewidth/2+1; gdk_draw_line(drawing_area->window,penxcur,x1,0 ,x1,drawing_area->allocation.height); gdk_draw_line(drawing_area->window,penxcur,0,liney ,drawing_area->allocation.width,liney); }}void drawTotalRectangle(int start,int end){ int x,x1; if(areatotalflag && areatotalstartflag){ x=klineareax+(klinewidth+1)*(start-areastart); x1=klineareax+(klinewidth+1)*(end-areastart)+1; gdk_draw_rectangle (drawing_area->window,
pentotal, FALSE,
x,klineareay+1, x1-x, klineareaheight-2);
}}void drawJsRecord(int num){ char tmp[200]; int i,x; float ap1,ap2,ap3; long al1,al2; gdk_draw_rectangle(drawing_area->window, penbackground,TRUE, 280,1, 200,CHARHEIGHT-1); gdk_draw_rectangle(drawing_area->window, penbackground,TRUE, klineareax+1,klineareay-CHARHEIGHT+1, klineareawidth-2,CHARHEIGHT-1); gdk_draw_rectangle(drawing_area->window, penbackground,TRUE, columeareax+1,columeareay-CHARHEIGHT+1, columeareawidth-2,CHARHEIGHT-1); gdk_draw_rectangle(drawing_area->window, penbackground,TRUE, zbareax+1,zbareay-CHARHEIGHT+1, zbareawidth-2,CHARHEIGHT-1); if(num > stocksum || !frechflag){ return; } ap1=getAverageLine(num,5); ap1=ap1/100; ap2=getAverageLine(num,10); ap2=ap2/100; ap3=getAverageLine(num,30); ap3=ap3/100; sprintf(tmp,"日期:%d ",stock[num].jydate);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -