📄 draw.c
字号:
#include <time.h>#include "jszb.h"#include "gmclient.h"#include "draw.h"#include "stocksql.h"static typgraphics *g=NULL;static GdkGC * penbackground =NULL;static GdkGC * penframeline =NULL;static GdkGC * penlayoutline =NULL;static GdkGC * penfont =NULL;static GdkGC * penklineup =NULL;static GdkGC * penklinedown =NULL;static GdkGC * penaline =NULL;static GdkGC * penkavgline1 =NULL;static GdkGC * penkavgline2 =NULL;static GdkGC * penkavgline3 =NULL;static GdkGC * penkavgline4 =NULL;static GdkGC * penkavgline5 =NULL;static GdkGC * penjszb[5]={NULL,NULL,NULL,NULL,NULL};/*十字光标GC*/static GdkGC * penxcur = NULL;/*区域统计GC*/static GdkGC *pentotal = NULL;static GdkGC *penwhite = NULL;static GdkGC *penup = NULL;static GdkGC *pendown = NULL;static GdkGC *penequal = NULL;static GdkGC *penfsline = NULL;static GdkGC *penfsavgline = NULL;static GdkGC *penfscolume = NULL;static GdkFont *efont=NULL;static GdkFont *sifont=NULL;static GdkFont *srfont=NULL;/*画图区间K线数量*/int areaklinenum;/*k线和成交量画图区域的宽度和高度*/int klineareawidth;int klineareaheight;int columeareawidth;int columeareaheight;int zbareawidth;int zbareaheight;int drawareawidth;int drawareaheight;int statusbarwidth;int statusbarheight;int gpmxareawidth;int gpmxareaheight;int fspricewidth;int fspriceheight;int fscolumewidth;int fscolumeheight;int fszbwidth;int fszbheight;int jsfspricewidth;int jsfspriceheight;int jsfscolumewidth;int jsfscolumeheight;/*k线和成交量画图区域的起始座标x,y*/int klineareax;int klineareay;int columeareax;int columeareay;int zbareax;int zbareay;//状态栏区域坐标int statusbarx;int statusbary;//股票明细数据显示区域坐标int gpmxareax;int gpmxareay;/*分时区域坐标*/int fspricex;int fspricey;int fscolumex;int fscolumey;int fszbx;int fszby;//技术分析区域分时微缩图坐标int jsfspricex;int jsfspricey;int jsfscolumex;int jsfscolumey;//分笔成交显示区域坐标int tracex;int tracey;int tracewidth;int traceheight;//上海,深圳综合指数显示区域坐标int zsfspricex;int zsfspricey;int zsfscolumex;int zsfscolumey;int zsfspricewidth;int zsfspriceheight;int zsfscolumewidth;int zsfscolumeheight;/*区域显示标志 0--显示技术指标区域 1--显示分时区域 2--显示大盘综合指数区域 3--显示指数区域*/int fsflag;/*分时指标显示标志 0--不显示 1--显示*/int fszbflag;static char *eg1="-adobe-courier-medium-o-normal--11-80-100-100-m-60-iso8859-1";static char *sr1="-cclib-song-medium-r-normal-jiantizi-16-160-75-75-c-160-gb2312.1980-1";static char *si1="-tlc-song-medium-i-normal--0-0-0-0-c-0-gb13000.1993-1";/*k线的宽度*/int klinewidth;/*鼠标线移动位址*/int mouselinex;int mouseliney;/*十字鼠标线显示标志 0--no 1--yes*/int mouselineflag;/*十字鼠标线能否显示标志 0--no 1--yes*/int cursormouseflag; /*价格均线显示标志 0--no 1--yes*/int drawavglineflag;/*成交量均线显示标志 0--no 1--yes*/int drawavgcolumeflag;/*走势线类型 1--K线 2--美国线*/int linetype;int candrawflag;void drawarea_init(){ mouselinex=1; mouseliney=1; mouselineflag=0; cursormouseflag=0; klinewidth=9; drawavglineflag=1; drawavgcolumeflag=1; linetype = 1; candrawflag = 0; areatotalflag = 0; fszbflag = 0; fsflag = 0; gdk_draw_rectangle (drawing_area->window,
penbackground, TRUE,
0, 0,
drawing_area->allocation.width,
drawing_area->allocation.height);
}typgraphics * newGraphics(){ typgraphics *gfx; gfx=(typgraphics *)g_malloc(sizeof(typgraphics)); gfx->gc=NULL; gfx->pixmap=NULL; return(gfx);}GdkGC * getPen(GdkColor *c){ GdkGC *gc; gc=gdk_gc_new(g->pixmap); gdk_gc_set_foreground(gc,c); return(gc);}GdkColor * newColor(long red,long green,long blue){ GdkColor *c=(GdkColor *)g_malloc(sizeof(GdkColor)); c->red = red; c->green = green; c->blue = blue; gdk_color_alloc(gdk_colormap_get_system(),c); return(c);}GdkGC *getNewPen(GdkColor *c){ GdkGC *gc; gc=gdk_gc_new(g->pixmap); gdk_color_alloc(gdk_colormap_get_system(),c); gdk_gc_set_foreground(gc,c); return(gc);}void changePenColor(GdkGC * gc,GdkColor *c){ gdk_color_alloc(gdk_colormap_get_system(),c); gdk_gc_set_foreground(gc,c);}void changeAllPenColor(void){ changePenColor(penbackground,&background); changePenColor(penfont,&font); changePenColor(penframeline,&layoutline); changePenColor(penlayoutline,&layoutline); changePenColor(penklineup,&klineup); changePenColor(penklinedown,&klinedown); changePenColor(penaline,&aline); changePenColor(penkavgline1,&kavgline1); changePenColor(penkavgline2,&kavgline2); changePenColor(penkavgline3,&kavgline3); changePenColor(penkavgline4,&kavgline4); changePenColor(penkavgline5,&kavgline5); changePenColor(penjszb[0],&jszb1); changePenColor(penjszb[1],&jszb2); changePenColor(penjszb[2],&jszb3); changePenColor(penjszb[3],&jszb4); changePenColor(penjszb[4],&jszb5);}GdkFont *setFont(char *szfont){ GdkFont *tmpfont; tmpfont = gdk_font_load(szfont); return(tmpfont);}void changeAllFont(void){ efont = gdk_font_load (eg);
sifont = gdk_font_load (si);
srfont = gdk_font_load (sr);
}void drawInit(){ if(penbackground == NULL){ penbackground = getNewPen(&background); penfont = getNewPen(&font); penframeline = getNewPen(&layoutline); penlayoutline = getNewPen(&layoutline); penklineup = getNewPen(&klineup); penklinedown = getNewPen(&klinedown); penaline = getNewPen(&aline); penkavgline1 = getNewPen(&kavgline1); penkavgline2 = getNewPen(&kavgline2); penkavgline3 = getNewPen(&kavgline3); penkavgline4 = getNewPen(&kavgline4); penkavgline5 = getNewPen(&kavgline5); penjszb[0] = getNewPen(&jszb1); penjszb[1] = getNewPen(&jszb2); penjszb[2] = getNewPen(&jszb3); penjszb[3] = getNewPen(&jszb4); penjszb[4] = getNewPen(&jszb5); penup = getNewPen(&up); pendown = getNewPen(&down); penequal = getNewPen(&equal); penfsline = getNewPen(&fsline); penfsavgline = getNewPen(&fsavgline); penfscolume = getNewPen(&fscolume); penwhite = getPen(newColor(0xffff,0xffff,0xffff));// printf("%X %X %X\n",up.red,up.green,up.blue); penxcur = getPen(newColor(0xffff,0xffff,0xffff)); gdk_gc_set_function(penxcur,GDK_XOR); pentotal = getPen(newColor(0xffff,0xffff,0xffff)); gdk_gc_set_function(pentotal,GDK_XOR); gdk_gc_set_line_attributes(penlayoutline,1, GDK_LINE_DOUBLE_DASH, GDK_CAP_NOT_LAST, GDK_JOIN_MITER);/* penwhite = getPen(newColor(0xffff,0xffff,0xffff)); penup = getPen(newColor(0xffff,0xffff,0xffff)); pendown = getPen(newColor(0xffff,0xffff,0xffff)); penequal = getPen(newColor(0xffff,0xffff,0xffff)); penfsline = getPen(newColor(0xffff,0xffff,0xffff)); penfsavgline = getPen(newColor(0xffff,0xffff,0xffff)); penfscolume = getPen(newColor(0xffff,0xffff,0xffff));*/ } /* set font*/ if(efont == NULL){ if(eg) efont = setFont(eg); else efont = setFont(eg1); if(si) sifont = setFont(si); else sifont = setFont(si1); if(sr) srfont = setFont(sr); else srfont = setFont(sr1); } if(areastart <= 0) {// printf("areastart < =0"); areastart=1; } candrawflag = 1;}void defineDrawarea(GtkWidget *drawing_area){ drawareawidth=drawing_area->allocation.width; drawareaheight=drawing_area->allocation.height; klineareax=3*CHARWIDTH; klineareay=2*CHARHEIGHT; klineareawidth=drawing_area->allocation.width-klineareax-200; klineareaheight=11*CHARHEIGHT; columeareax=klineareax; columeareay=klineareay+klineareaheight+CHARHEIGHT; columeareawidth=klineareawidth; columeareaheight= (drawing_area->allocation.height-columeareay-CHARHEIGHT*3)*2/5; zbareax=klineareax; zbareay=columeareay+columeareaheight+CHARHEIGHT; zbareawidth=klineareawidth; zbareaheight= drawing_area->allocation.height-zbareay-CHARHEIGHT*2; areaklinenum=klineareawidth/(klinewidth+1); statusbarx=0; statusbary=drawing_area->allocation.height-CHARHEIGHT; statusbarwidth=drawing_area->allocation.width-1; statusbarheight=CHARHEIGHT-2; gpmxareax=klineareax+klineareawidth+1; gpmxareay=30; gpmxareawidth=drawing_area->allocation.width-gpmxareax-1; gpmxareaheight=14*CHARHEIGHT; fspricex=klineareax; fscolumex=fspricex; fszbx=fspricex; fspricewidth=drawing_area->allocation.width-gpmxareawidth -klineareax-3*CHARWIDTH; fscolumewidth=fspricewidth; fszbwidth=fspricewidth; if(!fszbflag){ fspricey=CHARHEIGHT; fspriceheight=(drawing_area->allocation.height-3*CHARHEIGHT)*2/3; fscolumey=fspricey+fspriceheight+1; fscolumeheight=(drawing_area->allocation.height-3*CHARHEIGHT)/3; fszby=fscolumey+fscolumeheight+1; fszbheight=0; } else{ fspricey=CHARHEIGHT; fspriceheight=(drawing_area->allocation.height-3*CHARHEIGHT)/2; fscolumey=fspricey+fspriceheight+1; fscolumeheight=(drawing_area->allocation.height-3*CHARHEIGHT)/4; fszby=fscolumey+fscolumeheight+1; fszbheight=(drawing_area->allocation.height-3*CHARHEIGHT)/4; }// printf("%d %d",klineareawidth,areaklinenum); jsfspricex=(int)(gpmxareax+2.5*CHARWIDTH); jsfscolumex=jsfspricex; jsfspriceheight=5*CHARHEIGHT; jsfscolumeheight=3*CHARHEIGHT-1; jsfspricey=statusbary-8*CHARHEIGHT; jsfscolumey=statusbary-3*CHARHEIGHT+1; jsfspricewidth=drawing_area->allocation.width-jsfspricex; jsfscolumewidth=jsfspricewidth; tracex=gpmxareax;; tracey=gpmxareay+gpmxareaheight; tracewidth=gpmxareawidth;; traceheight=drawing_area->allocation.height- tracey-statusbarheight-2; zsfspricex=klineareax; zsfscolumex=zsfspricex; zsfspriceheight=(drawing_area->allocation.height -3*CHARHEIGHT)*2/3; zsfscolumeheight=(drawing_area->allocation.height -3*CHARHEIGHT)/3; zsfspricey=CHARHEIGHT; zsfscolumey=fspricey+fspriceheight+1; zsfspricewidth=drawing_area->allocation.width -klineareax-3*CHARWIDTH; zsfscolumewidth=zsfspricewidth;}void drawJsScreen(GtkWidget *drawing_area){ char tmp[50]; int i; char jgstr[20]; float jg; long tmp1,tmp2,tmp3; char cjstr[20];
// HandleKeysPressed ();
sprintf(tmp,"股票名称:%s",stockname);// printf("%s\n",tmp);
gdk_draw_string(g->pixmap, srfont,penfont, CHARADD,15,tmp); gdk_draw_line(g->pixmap,penframeline, 0,CHARHEIGHT, klineareax+klineareawidth,CHARHEIGHT); gdk_draw_line(g->pixmap,penframeline,0, CHARHEIGHT*2, klineareax+klineareawidth,CHARHEIGHT*2); gdk_draw_line(g->pixmap,penframeline,0,columeareay-CHARHEIGHT, columeareax+columeareawidth,columeareay-CHARHEIGHT); gdk_draw_line(g->pixmap,penframeline, 0,columeareay, columeareax+columeareawidth,columeareay); gdk_draw_line(g->pixmap,penframeline,0,zbareay-CHARHEIGHT, zbareax+zbareawidth,zbareay-CHARHEIGHT); gdk_draw_line(g->pixmap,penframeline,0,zbareay, zbareax+zbareawidth,zbareay); gdk_draw_line(g->pixmap,penframeline,0,zbareay+zbareaheight, zbareax+zbareawidth,zbareay+zbareaheight); gdk_draw_line(g->pixmap,penframeline,klineareax,CHARWIDTH ,klineareax,zbareay+zbareaheight); gdk_draw_line(g->pixmap,penframeline, klineareax+klineareawidth,CHARHEIGHT, klineareax+klineareawidth,statusbary);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -