📄 fx.c
字号:
if(area_start<=pm_end) { memset(&HistData,0,sizeof(DAY_DATA)); HistData.day =(long)GraHead.dateNum*1000 +area_start; HistData.kpjg =GraData.zjjg +GraHead.zrsp; HistData.zgjg =HistData.zdjg =GraData.zjjg+GraHead.zrsp; _lseek(hf1,sizeof(GRA_HEAD),SEEK_SET); for(i=0;i<GraHead.minTotal;i++) { if(_lread(hf1,&GraData,sizeof(GRA_DATA))!=sizeof(GRA_DATA)) break; if(GraData.tim ==0) continue; if(GraData.tim<area_end&&GraData.tim>=area_start) { HistData.spjg =GraData.zjjg+GraHead.zrsp; if(HistData.zgjg<GraData.zjjg+GraHead.zrsp) HistData.zgjg=GraData.zjjg+GraHead.zrsp; if(HistData.zdjg>GraData.zjjg+GraHead.zrsp) HistData.zdjg=GraData.zjjg+GraHead.zrsp; HistData.cjss +=GraData.lc; } else { //HistData.day =(long)GraHead.dateNum*1000 +area_end; _lwrite(hf2,&HistData,sizeof(DAY_DATA)); area_start =area_end; area_end =area_start+5<=am_end?area_start+5: area_start>pm_start?area_start+5:area_start+5+pm_start-am_end; for(;;) { if(GraData.tim>area_end) { area_start =area_end; area_end =area_start+5<=am_end?area_start+5: area_start>pm_start?area_start+5:area_start+5+pm_start-am_end; } else break; if(area_start>pm_end) break; } memset(&HistData,0,sizeof(DAY_DATA)); HistData.spjg =GraData.zjjg+GraHead.zrsp; HistData.kpjg =GraData.zjjg +GraHead.zrsp; HistData.zgjg =HistData.zdjg =GraData.zjjg+GraHead.zrsp; HistData.cjss +=GraData.lc; HistData.day =(long)GraHead.dateNum*1000 +area_start; } } if(HistData.day!=0) _lwrite(hf2,&HistData,sizeof(DAY_DATA)); } _lclose(hf1); } if(range!=MIN_5) { sprintf(f1,"%s\\%s.%d",szDataPath,gpdm,range); hf1 =OpenFile(f1,&os,OF_WRITE|OF_SHARE_DENY_NONE|OF_CREATE); if(hf1==HFILE_ERROR) return FALSE; memset(&HistData,0,sizeof(DAY_DATA)); if(filelength(hf2)/sizeof(DAY_DATA)>MAXSHOWDOT) _lseek(hf2,-1L*sizeof(DAY_DATA)*MAXSHOWDOT,SEEK_END); else _lseek(hf2,0L,SEEK_SET); for(;;) { if(_lread(hf2,&buff,sizeof(DAY_DATA))!=sizeof(DAY_DATA)) break; if(HistData.day!=0&&buff.day%1000>=HistData.day%1000+atoi(RANGE_NAME[range])) { _lwrite(hf1,&HistData,sizeof(DAY_DATA)); memset(&HistData,0,sizeof(DAY_DATA)); } if(HistData.day ==0) HistData.kpjg =buff.kpjg; HistData.spjg =buff.spjg; if(HistData.day ==0) { HistData.zgjg =buff.zgjg; HistData.zdjg =buff.zdjg; } else { if(HistData.zgjg<buff.zgjg) HistData.zgjg=buff.zgjg; if(HistData.zdjg>buff.zdjg) HistData.zdjg=buff.zdjg; } HistData.cjss +=buff.cjss; if(HistData.day ==0) HistData.day =buff.day; } if(HistData.day !=0) _lwrite(hf1,&HistData,sizeof(DAY_DATA)); _lclose(hf1); } _lclose(hf2); return TRUE;} HBITMAP getImage(HDC hDC, LPRECT rc){ HBITMAP hBmp, hOldBmp; HDC hdc =CreateCompatibleDC(hDC); hBmp =CreateCompatibleBitmap(hDC, rc->right-rc->left, rc->bottom-rc->top); hOldBmp =SelectObject(hdc, hBmp); BitBlt(hdc, 0, 0, rc->right-rc->left, rc->bottom-rc->top, hDC, rc->left, rc->top, SRCCOPY); SelectObject(hdc, hOldBmp); DeleteObject(hdc); return hBmp;}int putImage(HDC hDC, HBITMAP hBmp, LPRECT rc){ HDC hdc =CreateCompatibleDC(hDC); SelectObject(hdc, hBmp); BitBlt(hDC, rc->left, rc->top, rc->right-rc->left, rc->bottom-rc->top, hdc, 0, 0, SRCCOPY); DeleteObject(hdc); return hBmp;}int DrawScroll(LPFX Fx,int orient){ HDC hDc; static int pos,recnum; char tmp[100]; int i,j,htitle,wleft,repl,num,gap,tune,ltitle; DATA *lpData; PARA *lpPara; if(Fx->KxData.v==NULL) return TRUE; if(Fx->PaintPara.IsPainting) return TRUE; if(!Fx->PaintPara.IsScroll&&orient==SCROLL_CANCEL) return TRUE; lpData =&Fx->KxData; lpPara =&Fx->KxPara; hDc =GetDC(ghWndFx); SetBkColor(hDc,RGB(0,0,0)); SelectObject(hDc,Fx->PaintPara.hFont); SetROP2(hDc, R2_NOT); tune =FRAME_WIDTH; do { if(lpPara->rc.bottom==0) { lpData =lpData->next; lpPara =lpPara->next; continue; } repl =pos; num =recnum; htitle =lpPara->htitle+tune; gap =(int)((lpPara->fwdt*80/100)/2)+tune; wleft =Fx->PaintPara.wleft+gap; if(!Fx->PaintPara.IsScroll) { if(orient==SCROLL_LEFT||orient==SCROLL_END) { repl=Fx->ShowDot; //pos:1->show num=Fx->CurRecPrt+Fx->ShowDot-1; //num:prt ->prt +show -1 } if(orient==SCROLL_RIGHT||orient==SCROLL_HOME) { repl=1; num=Fx->CurRecPrt; } MoveTo(hDc,(int)(repl*lpPara->fwdt)+wleft,lpPara->rc.top+htitle+1); LineTo(hDc,(int)(repl*lpPara->fwdt)+wleft,lpPara->rc.bottom-1); } else { if(orient==SCROLL_RIGHT) { //右移 if(++repl>Fx->ShowDot) { if(Fx->CurRecPrt<Fx->RecCount-1-Fx->ShowDot) { //右换页 SetTimer(ghWndFx, 1, 500, NULL); Fx->PaintPara.IsPainting=TRUE; Fx->CurRecPrt=Fx->CurRecPrt+Fx->ShowDot*2<Fx->RecCount-1 ? Fx->CurRecPrt+Fx->ShowDot:Fx->RecCount-Fx->ShowDot; Fx->PaintPara.IsScroll=FALSE; if(Fx->PaintPara.IsUpDown) UpDown(Fx,0); InvalidateRect(ghWndFx, NULL, FALSE); Fx->PaintPara.IsScroll=FALSE; ReleaseDC(ghWndFx, hDc); return 0; } else { repl=Fx->ShowDot; //换页到顶 num =Fx->CurRecPrt+Fx->ShowDot-1; } } else { repl--; //移线 MoveTo(hDc,(int)(repl*lpPara->fwdt) +wleft,lpPara->rc.top+htitle+1); LineTo(hDc,(int)(repl*lpPara->fwdt) +wleft,lpPara->rc.bottom-1); if(++num>Fx->RecCount) num=Fx->RecCount; repl++; MoveTo(hDc,(int)(repl*lpPara->fwdt) +wleft,lpPara->rc.top+htitle+1); LineTo(hDc,(int)(repl*lpPara->fwdt) +wleft,lpPara->rc.bottom-1); } } if(orient==SCROLL_LEFT) { //左移 repl--; if(repl<1) { if(Fx->CurRecPrt>0) { //左换页 SetTimer(ghWndFx, 1, 500, NULL); Fx->PaintPara.IsPainting=TRUE; Fx->CurRecPrt=Fx->CurRecPrt-Fx->ShowDot>=0 ? Fx->CurRecPrt-=Fx->ShowDot:0; Fx->PaintPara.IsScroll=FALSE; if(Fx->PaintPara.IsUpDown) UpDown(Fx,0); InvalidateRect(ghWndFx, NULL, FALSE); Fx->PaintPara.IsScroll=FALSE; ReleaseDC(ghWndFx, hDc); return 0; } else { repl=1; //换页到底 num =0; } } else { repl++; //移线 MoveTo(hDc,(int)(repl*lpPara->fwdt) +wleft,lpPara->rc.top+htitle+1); LineTo(hDc,(int)(repl*lpPara->fwdt) +wleft,lpPara->rc.bottom-1); repl--; num--; if(recnum<0) num=0; MoveTo(hDc,(int)(repl*lpPara->fwdt) +wleft,lpPara->rc.top+htitle+1); LineTo(hDc,(int)(repl*lpPara->fwdt) +wleft,lpPara->rc.bottom-1); } } //按[END]键 if(orient==SCROLL_END) { MoveTo(hDc,(int)(repl*lpPara->fwdt) +wleft,lpPara->rc.top+htitle+1); LineTo(hDc,(int)(repl*lpPara->fwdt) +wleft,lpPara->rc.bottom-1); repl=Fx->ShowDot; num=Fx->CurRecPrt+Fx->ShowDot-1; MoveTo(hDc,(int)(repl*lpPara->fwdt) +wleft,lpPara->rc.top+htitle+1); LineTo(hDc,(int)(repl*lpPara->fwdt) +wleft,lpPara->rc.bottom-1); } //按[HOME]键 if(orient==SCROLL_HOME) { MoveTo(hDc,(int)(repl*lpPara->fwdt) +wleft,lpPara->rc.top+htitle+1); LineTo(hDc,(int)(repl*lpPara->fwdt) +wleft,lpPara->rc.bottom-1); repl=1; num=Fx->CurRecPrt; MoveTo(hDc,(int)(repl*lpPara->fwdt) +wleft,lpPara->rc.top+htitle+1); LineTo(hDc,(int)(repl*lpPara->fwdt) +wleft,lpPara->rc.bottom-1); } //结束SCROLL if(orient==SCROLL_CANCEL) { MoveTo(hDc,(int)(repl*lpPara->fwdt) +wleft,lpPara->rc.top+htitle+1); LineTo(hDc,(int)(repl*lpPara->fwdt) +wleft,lpPara->rc.bottom-1); } } lpData =lpData->next; lpPara =lpPara->next; }while(lpData!=NULL&&lpPara!=NULL); pos =repl; recnum =num; SetTextColor(hDc,RGB(0,255,255)); SetROP2(hDc, R2_COPYPEN); SetTextAlign(hDc, TA_LEFT|TA_TOP); if(orient==SCROLL_CANCEL) { Fx->PaintPara.IsScroll=FALSE; Msg("",MSG_HIDE); ReleaseDC(ghWndFx, hDc); return 0; } else { i=(int)(Fx->PaintPara.rc.right/2)+5; Fx->MainData[recnum].date[8] =0; sprintf(tmp, "开:%5.2f收:%5.2f成交:%6ld", Fx->MainData[recnum].ks, Fx->MainData[recnum].ss, Fx->MainData[recnum].cj); sprintf(tmp, "%s高:%5.2f低:%5.2f日期:%8s",tmp, Fx->MainData[recnum].zg, Fx->MainData[recnum].zd, Fx->MainData[recnum].date); Msg(tmp,MSG_VERT|MSG_TIME); } Fx->PaintPara.IsScroll=TRUE; SetBkColor(hDc,RGB(0,0,0)); SetTextAlign(hDc, TA_LEFT|TA_TOP); lpData =&Fx->KxData; lpPara =&Fx->KxPara; do { ltitle =(lpPara->xtitle[1]-lpPara->xtitle[0])/2; htitle =lpPara->htitle; for(i=0,j=0;i<10&&lpPara->rc.bottom>0;i++) { if(lpPara->color[i]==0) continue; if(strlen(lpPara->pname[i])==0) continue; if(lpData->method[0]==VOULMN_BAR_METHOD) sprintf(tmp,"%.0f",lpData->v[i][recnum]); else sprintf(tmp,"%.2f",lpData->v[i][recnum]); SelectObject(hDc,GetStockObject(BLACK_BRUSH)); SetBkMode(hDc, OPAQUE); Rectangle(hDc,lpPara->xtitle[j],lpPara->rc.top+4, lpPara->xtitle[j]+ltitle,lpPara->rc.top+htitle); //SetBkMode(hDc, TRANSPARENT); SetTextColor(hDc,lpPara->color[i]); TextOut(hDc,lpPara->xtitle[j],lpPara->rc.top+4,tmp,strlen(tmp)); j++; } lpData =lpData->next; lpPara =lpPara->next; }while(lpData!=NULL&&lpPara!=NULL); ReleaseDC(ghWndFx, hDc); return TRUE;}int UpDown(LPFX Fx,int orient){ HDC hDc; static int pos; static double start,step; HPEN hPen; char temp[10]; int chars,wleft,htitle; static HBITMAP hBmp =NULL; static RECT rc; DATA *lpData; PARA *lpPara; if(orient==0&&!Fx->PaintPara.IsUpDown) return TRUE; lpData =FindOpData(); lpPara =FindOpPara(); if(lpData==NULL||lpPara==NULL) { lpData =&Fx->KxData; lpPara =&Fx->KxPara; } hDc =GetDC(ghWndFx); SelectObject(hDc,Fx->PaintPara.hFont); SetROP2(hDc, R2_NOT); SetTextAlign(hDc, TA_RIGHT|TA_TOP); SetBkColor(hDc,RGB(255,255,255)); SetTextColor(hDc,RGB(255,0,0)); hPen=CreatePen(PS_SOLID,1,RGB(200,0,0)); SelectObject(hDc,hPen); SetRect(&lpPara->rc,lpPara->rc.left,lpPara->rc.top+FRAME_WIDTH, lpPara->rc.right,lpPara->rc.bottom-FRAME_WIDTH); htitle =lpPara->htitle; wleft =Fx->PaintPara.wleft; SetViewportOrg(hDc, lpPara->rc.left+wleft, (int)(lpPara->price[0]*lpPara->fhdj)+lpPara->rc.top+htitle); if(!Fx->PaintPara.IsUpDown) { Fx->PaintPara.IsUpDown=TRUE; start=lpPara->price[1]; step=(lpPara->price[0]-lpPara->price[1])/60; pos=-(int)(start*lpPara->fhdj); MoveTo(hDc,lpPara->rc.left,pos); LineTo(hDc,lpPara->rc.right,pos); sprintf(temp,"%7.2f",start); chars=LOWORD(GetTextExtent(hDc,temp,strlen(temp))); rc.left =lpPara->rc.left-chars; rc.top =pos; rc.right =rc.left +60; rc.bottom =rc.top +13; hBmp =getImage(hDc, &rc); TextOut(hDc, rc.left+chars, rc.top, temp, strlen(temp)); } else { if(orient!=0) { putImage(hDc, hBmp, &rc); DeleteObject(hBmp); MoveTo(hDc,lpPara->rc.left,pos); LineTo(hDc,lpPara->rc.right,pos); if(lpData->method[0]==VOULMN_BAR_METHOD) sprintf(temp,"%7.0f",start); else sprintf(temp,"%7.2f",start); start+=orient*step; if(start>=lpPara->price[0]||start<lpPara->price[1]) start-=orient*step; pos=-(int)(start*lpPara->fhdj); MoveTo(hDc,lpPara->rc.left,pos); LineTo(hDc,lpPara->rc.right,pos); if(lpData->method[0]==VOULMN_BAR_METHOD) sprintf(temp,"%7.0f",start); else sprintf(temp,"%7.2f",start); chars=LOWORD(GetTextExtent(hDc,temp,strlen(temp))); rc.left =lpPara->rc.left-chars; rc.top =pos; rc.right =rc.left +60; rc.bottom =rc.top +13; hBmp =getImage(hDc, &rc); TextOut(hDc, rc.left+chars, rc.top, temp, strlen(temp)); } else { putImage(hDc, hBmp, &rc); DeleteObject(hBmp); Fx->PaintPara.IsUpDown=FALSE; MoveTo(hDc,lpPara->rc.left,pos); LineTo(hDc,lpPara->rc.right,pos); if(lpData->method[0]==VOULMN_BAR_METHOD) sprintf(temp,"%7.0f",start); else sprintf(temp,"%7.2f",start); pos=-(int)(lpPara->price[1]*lpPara->fhdj); } } SelectObject(hDc, GetStockObject(WHITE_PEN)); DeleteObject(hPen); ReleaseDC(ghWndFx, hDc); SetRect(&lpPara->rc,lpPara->rc.left,lpPara->rc.top-FRAME_WIDTH, lpPara->rc.right,lpPara->rc.bottom+FRAME_WIDTH); return TRUE;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -