📄 draw.c
字号:
{ if(Data->v[j][i]<Para->price[1]) repl =Para->price[1]; else if(Data->v[j][i]>Para->price[0]) repl =Para->price[0]; else repl =Data->v[j][i]; LineTo(hdc,(int)(fwdt*k+fwdk/2),-1*(int)(fhdj*repl)); } } } //画柱线 if(Data->method[j] ==VERT_LINE_METHOD) { for(i=CurRecPrt,k=1; i<CurRecPrt+show; i++,k++) { if(Data->v[j][i]==0) continue; if(Data->v[j][i]>=0) SelectObject(hdc,hDPen[j]); else SelectObject(hdc,hDPen[10+j]); if(Para->price[1]<=0) MoveTo(hdc,(int)(fwdt*k)+fwdk/2,0); else MoveTo(hdc,(int)(fwdt*k)+fwdk/2,-1*(int)(Para->price[1]*fhdj)); LineTo(hdc,(int)(fwdt*k)+fwdk/2,-1*(int)(Data->v[j][i]*fhdj)); } } } SetViewportOrg(hdc, 0, 0); SetTextAlign(hdc, TA_LEFT|TA_TOP); for(i=0,j=0;i<10&&(feature&DW_TOP);i++) { if(strlen(Para->pname[i])==0) continue; if(Para->color[i]==0) continue; if((feature&DW_DELE|feature&DW_SELE)&&GetSerial(feature)==i) SetTextColor(hdc,SELECTED_COLOR); else SetTextColor(hdc,Para->color[i]); if(Data->method[0]==VOULMN_BAR_METHOD) sprintf(tmp,"%.0f",Data->v[i][CurRecPrt+show -1]); else sprintf(tmp,"%.2f",Data->v[i][CurRecPrt+show -1]); TextOut(hdc,Para->xtitle[j],Para->rc.top+2, tmp,strlen(tmp)); j++; } SelectObject(hdc, GetStockObject(BLACK_BRUSH)); DeleteObject(hBBrush); SelectObject(hdc, GetStockObject(BLACK_PEN)); for(j=0;j<20;j++) { if(hDPen[j]!=0) DeleteObject(hDPen[j]); } SetRect(&Para->rc,Para->rc.left -FRAME_WIDTH,Para->rc.top -FRAME_WIDTH, Para->rc.right +FRAME_WIDTH,Para->rc.bottom +FRAME_WIDTH); if(hDc==NULL) ReleaseDC(ghWndFx,hdc); else SetROP2(hDc, R2_COPYPEN); return TRUE;}long GetObjectItem(int x,int y,int CurRecPrt,int Show,PARA *Para,DATA *Data,PAINT_PARA *PaintPara){ int i,j,k; double fhdj, //高密度 fwdt, //宽密度 repl, v; int fwdk, //一个K线的宽 htitle, //顶标注区高 ltitle, //顶标注区长度的一半 wleft, //左标注区宽 wtitle, //顶标注区长度 show; //显示记录数 POINT pt; RECT rc; //初始化变量 fhdj =Para->fhdj; fwdt =Para->fwdt; if(fhdj==0||fwdt==0) return(DW_NULL); fwdk = (int)(fwdt*80/100); htitle =Para->htitle; ltitle =(Para->xtitle[1] -Para->xtitle[0])/2; wleft =Fx->PaintPara.wleft; wtitle = Para->xtitle[1] -Para->xtitle[0]; show =Show; pt.x =x; pt.y =y; //外框 for(i=0;i<5;i++) { if(i==0) SetRect(&rc,Para->rc.left,Para->rc.top,Para->rc.left+2,Para->rc.bottom); if(i==1) SetRect(&rc,Para->rc.left,Para->rc.top,Para->rc.right+2,Para->rc.top+2); if(i==2) SetRect(&rc,Para->rc.right-2,Para->rc.top,Para->rc.right,Para->rc.bottom); if(i==3) SetRect(&rc,Para->rc.left,Para->rc.bottom-2,Para->rc.right,Para->rc.bottom); if(i==4) SetRect(&rc,Para->rc.left+wleft,Para->rc.top,Para->rc.left+wleft+2,Para->rc.bottom); if(PtInRect(&rc,pt)) return(SetSerial((long)i,DW_FRAME)); } //选中标志 SetRect(&rc,Para->rc.left+2,Para->rc.top+1,Para->rc.left+wleft-1, Para->rc.top+htitle+2); if(PtInRect(&rc,pt)) return DW_SELE; SetRect(&Para->rc,Para->rc.left +FRAME_WIDTH,Para->rc.top +FRAME_WIDTH, Para->rc.right -FRAME_WIDTH,Para->rc.bottom -FRAME_WIDTH); //标顶部数据名称 for(i=0,j=0;i<10;i++) { if(strlen(Para->pname[i])==0) continue; SetRect(&rc,Para->xtitle[j]-ltitle,Para->rc.top+2,Para->xtitle[j], Para->rc.top+htitle); if(PtInRect(&rc,pt)) { SetRect(&Para->rc,Para->rc.left -FRAME_WIDTH,Para->rc.top -FRAME_WIDTH, Para->rc.right +FRAME_WIDTH,Para->rc.bottom +FRAME_WIDTH); return(SetSerial((long)(i),DW_NAME)); } j++; } //标左边坐标 SetRect(&rc,5,Para->rc.top+htitle+2,wleft-2,Para->rc.bottom-2); if(PtInRect(&rc,pt)) { SetRect(&Para->rc,Para->rc.left -FRAME_WIDTH,Para->rc.top -FRAME_WIDTH, Para->rc.right +FRAME_WIDTH,Para->rc.bottom +FRAME_WIDTH); return DW_LEFT; } //警告线 pt.x =x-(Para->rc.left+wleft); pt.y =y-((int)(Para->price[0]*fhdj)+Para->rc.top+htitle); if(pt.x>0&&pt.x<Para->rc.right-wleft-FRAME_WIDTH) { for(j=0;j<3;j++) { if(Para->price[2+j]==0) continue; if(pt.y==-1*(int)(fhdj*Para->price[2+j])) { SetRect(&Para->rc,Para->rc.left -FRAME_WIDTH,Para->rc.top -FRAME_WIDTH, Para->rc.right +FRAME_WIDTH,Para->rc.bottom +FRAME_WIDTH); return(SetSerial((long)j,DW_ALERT)); } } } //0轴 if(Para->price[1]<=0&&Para->price[0]>=0) { if(pt.x>0&&pt.x<Para->rc.right-wleft&&pt.y==0) { SetRect(&Para->rc,Para->rc.left -FRAME_WIDTH,Para->rc.top -FRAME_WIDTH, Para->rc.right +FRAME_WIDTH,Para->rc.bottom +FRAME_WIDTH); return DW_X_COOR; } } //pt.x=(int)(fwdt*k+fwdk/2) k=(int)((pt.x-fwdk/2)/fwdt) +1; v =-pt.y/fhdj; i=CurRecPrt +k -1; //分析数据线 for(j=0;j<10&&k<=show&&k>0;j++) { if(Para->color[j]==0) continue; //价K线 if(Data->method[j] ==PRICE_BAR_METHOD&&j<7) { if(Para->color[j+3]!=0) continue; if(Data->v[j][i]<Data->v[j+1][i]) //ks<ss { SetRect(&rc,(int)(fwdt*k),-(int)(Data->v[j+1][i]*fhdj), (int)(fwdt*k)+fwdk,-(int)(Data->v[j][i]*fhdj)); if(PtInRect(&rc,pt)) { SetRect(&Para->rc,Para->rc.left -FRAME_WIDTH,Para->rc.top -FRAME_WIDTH, Para->rc.right +FRAME_WIDTH,Para->rc.bottom +FRAME_WIDTH); return(SetSerial(0L,1L<<j)); } //if(Data->v[j+2][i]>Data->v[j+1][i]) //{ // MoveTo(hdc,(int)((fwdt*k)+fwdk/2),-(int)(Data->v[j+1][i]*fhdj)); // LineTo(hdc,(int)((fwdt*k)+fwdk/2),-(int)(Data->v[j+2][i]*fhdj)); //} //if(Data->v[j+3][i]<Data->v[j][i]) //{ // MoveTo(hdc,(int)((fwdt*k)+fwdk/2),-(int)(Data->v[j][i]*fhdj)); // LineTo(hdc,(int)((fwdt*k)+fwdk/2),-(int)(Data->v[j+3][i]*fhdj)); //} } if(Data->v[j][i]==Data->v[j+1][i]) //ks ==ss { if(pt.y>=-(int)(Data->v[j][i]*fhdj)-1&& pt.y<=-(int)(Data->v[j][i]*fhdj)-1) { SetRect(&Para->rc,Para->rc.left -FRAME_WIDTH,Para->rc.top -FRAME_WIDTH, Para->rc.right +FRAME_WIDTH,Para->rc.bottom +FRAME_WIDTH); return(SetSerial(0L,1L<<j)); } } if(Data->v[j][i]>Data->v[j+1][i]) //ks>ss { SetRect(&rc,(int)(fwdt*k),-(int)(Data->v[j][i]*fhdj), (int)(fwdt*k)+fwdk,-(int)(Data->v[j+1][i]*fhdj)); if(PtInRect(&rc,pt)) { SetRect(&Para->rc,Para->rc.left -FRAME_WIDTH,Para->rc.top -FRAME_WIDTH, Para->rc.right +FRAME_WIDTH,Para->rc.bottom +FRAME_WIDTH); return(SetSerial(1L,1L<<j)); } //if(Data->v[j+2][i]>Data->v[j][i]) //{ // MoveTo(hdc,(int)((fwdt*k)+fwdk/2),-(int)(Data->v[j][i]*fhdj)); // LineTo(hdc,(int)((fwdt*k)+fwdk/2),-(int)(Data->v[j+2][i]*fhdj)); //} //if(Data->v[j+3][i]<Data->v[j+1][i]) //{ // MoveTo(hdc,(int)((fwdt*k)+fwdk/2),-(int)(Data->v[j+1][i]*fhdj)); // LineTo(hdc,(int)((fwdt*k)+fwdk/2),-(int)(Data->v[j+3][i]*fhdj)); //} } } //方形 if(Data->method[j] ==VOULMN_BAR_METHOD) { if(Data->v[j+1][i]<=0) { if(fwdk>0) { SetRect(&rc,(int)(fwdt*k),-(int)(Data->v[j][i]*fhdj), (int)(fwdt*k)+fwdk,-(int)(Para->price[1]*fhdj)); if(PtInRect(&rc,pt)) { SetRect(&Para->rc,Para->rc.left -FRAME_WIDTH,Para->rc.top -FRAME_WIDTH, Para->rc.right +FRAME_WIDTH,Para->rc.bottom +FRAME_WIDTH); return(1L<<j); } } else { if(pt.y<-(int)(Para->price[1]*fhdj)&& pt.y>-(int)(Data->v[j][i]*fhdj)) { SetRect(&Para->rc,Para->rc.left -FRAME_WIDTH,Para->rc.top -FRAME_WIDTH, Para->rc.right +FRAME_WIDTH,Para->rc.bottom +FRAME_WIDTH); return(1L<<j); } } } if(Data->v[j+1][i]>0) { if(fwdk>0) { SetRect(&rc,(int)(fwdt*k),-(int)(Data->v[j][i]*fhdj), (int)(fwdt*k)+fwdk,-(int)(Para->price[1]*fhdj)); if(PtInRect(&rc,pt)) { SetRect(&Para->rc,Para->rc.left -FRAME_WIDTH,Para->rc.top -FRAME_WIDTH, Para->rc.right +FRAME_WIDTH,Para->rc.bottom +FRAME_WIDTH); return(SetSerial(1L,1L<<j)); } } else { if(pt.y<-(int)(Para->price[1]*fhdj)&& pt.y>-(int)(Data->v[j][i]*fhdj)) { SetRect(&Para->rc,Para->rc.left -FRAME_WIDTH,Para->rc.top -FRAME_WIDTH, Para->rc.right +FRAME_WIDTH,Para->rc.bottom +FRAME_WIDTH); return(SetSerial(1L,1L<<j)); } } } } //曲线 if(Data->method[j] ==CURVE_METHOD) { if(Data->v[j][i]<Para->price[1]) repl =Para->price[1]; else if(Data->v[j][i]>Para->price[0]) repl =Para->price[0]; else repl =Data->v[j][i]; if(pt.y>=-1*(int)(fhdj*repl)-1&&pt.y<=-1*(int)(fhdj*repl)+1) { SetRect(&Para->rc,Para->rc.left -FRAME_WIDTH,Para->rc.top -FRAME_WIDTH, Para->rc.right +FRAME_WIDTH,Para->rc.bottom +FRAME_WIDTH); return(1L<<j); } } //画柱线 if(Data->method[j] ==VERT_LINE_METHOD) { if(pt.y<=0&&pt.y>=-1*(int)(Data->v[j][i]*fhdj)) { SetRect(&Para->rc,Para->rc.left -FRAME_WIDTH,Para->rc.top -FRAME_WIDTH, Para->rc.right +FRAME_WIDTH,Para->rc.bottom +FRAME_WIDTH); return(SetSerial(0L,1L<<j)); } if(pt.y>=0&&pt.y<=-1*(int)(Data->v[j][i]*fhdj)) { SetRect(&Para->rc,Para->rc.left -FRAME_WIDTH,Para->rc.top -FRAME_WIDTH, Para->rc.right +FRAME_WIDTH,Para->rc.bottom +FRAME_WIDTH); return(SetSerial(1L,1L<<j)); } } } pt.x=x; pt.y=y; for(i=0,j=0;i<10;i++) { if(strlen(Para->pname[i])==0) continue; SetRect(&rc,Para->xtitle[j],Para->rc.top+2,Para->xtitle[j]+ltitle, Para->rc.top+htitle); if(PtInRect(&rc,pt)) { SetRect(&Para->rc,Para->rc.left -FRAME_WIDTH,Para->rc.top -FRAME_WIDTH, Para->rc.right +FRAME_WIDTH,Para->rc.bottom +FRAME_WIDTH); return(SetSerial((long)(i),DW_TOP)); } j++; } SetRect(&Para->rc,Para->rc.left -FRAME_WIDTH,Para->rc.top -FRAME_WIDTH, Para->rc.right +FRAME_WIDTH,Para->rc.bottom +FRAME_WIDTH); return(DW_NULL);}int SetColor(HWND hwnd){ COLORREF dwCustClrs[16]={RGB(255,255,255),RGB(239,239,239), RGB(223,223,223),RGB(207,207,207), RGB(191,191,191),RGB(175,175,175), RGB(159,159,159),RGB(143,143,143), RGB(127,127,127),RGB(111,111,111), RGB( 95, 95, 95),RGB( 79, 79, 79), RGB( 63, 63, 63),RGB( 47, 47, 47), RGB( 31, 31, 31),RGB( 15, 15, 15)}; memset(&cc,0,sizeof(CHOOSECOLOR)); cc.lStructSize =sizeof(CHOOSECOLOR); cc.hwndOwner =hwnd; cc.hInstance =NULL; cc.rgbResult=0L; cc.lpCustColors = dwCustClrs; cc.Flags = CC_PREVENTFULLOPEN; cc.rgbResult=0L; cc.lpTemplateName =(LPSTR)NULL; if(ChooseColor(&cc)) return 0; //(cc.rgbResult); else return -1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -