⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 draw.c

📁 用GTK+做用户界面 股票每日分时行情用数据库管理——MYSQL 软件应用方式客户端/服务器模式 基于TCP/IP的C/S通信模式 实现STOCK
💻 C
📖 第 1 页 / 共 5 页
字号:
           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 + -