www.pudn.com > inet_stock.zip > FXSS.CPP
#include#include #include "fx.h" FX_DATAS FxDatas; extern HINSTANCE ghInstance; int DrawFx(HWND hWnd, HDC hDC, LPFX lpFx) { FARPROC lpFxDraw; switch(lpFx->type) { case FX_TYPE_MACD: lpFxDraw =MakeProcInstance(DrawMacd, ghInstance); break; case FX_TYPE_RSI: //lpFxDraw =&DrawRsi; break; case FX_TYPE_DMI: //lpFxDraw =&DrawDmi; break; case FX_TYPE_PSY: //lpFxDraw =&DrawPsy; break; case FX_TYPE_VR: //lpFxDraw =&DrawVr; break; case FX_TYPE_JLT: break; case FX_TYPE_K: break; case FX_TYPE_KD: break; } if(lpFxDraw ==NULL) return -1; (*lpFxDraw)(hWnd, hDC, lpFx); FreeProcInstance(lpFxDraw); return 0; } FAR PASCAL DrawMacd(HWND hWnd, HDC hDC, LPFX lpFx) { int i,k,nrec; float maxdif,mindif; int ma1, ma2; float fce, xs[2]; HLOCAL hfp1,hfp2,hema1,hema2,hdif,hmacd; float *fp1,*fp2,*ema1,*ema2,*dif,*macd; float fplus1,fplus2; int j,np1,np2; char cb[20]; RECT rc; int et; HPEN hPen[2]; GetClientRect(hWnd, &rc); nrec =FxDatas.recCount; if(nrec <2*(lpFx->sets.ma[0]+1)+lpFx->sets.ma[1]) return 0; ma1 =lpFx->sets.ma[0]; ma2 =lpFx->sets.ma[1]; xs[0]=2/(ma1+1); xs[1]=2/(ma2+1); hema1=LocalAlloc(LHND,(nrec-ma2+1)*sizeof(float)); hema2=LocalAlloc(LHND,(nrec-ma2+1)*sizeof(float)); hfp1=LocalAlloc(LHND,ma1*sizeof(float)); hfp2=LocalAlloc(LHND,ma2*sizeof(float)); ema1=(float*)LocalLock(hema1); ema2=(float*)LocalLock(hema2); fp1=(float*)LocalLock(hfp1); fp2=(float*)LocalLock(hfp2); for(i=0;i =ma2-ma1) fp1[i-(ma2-ma1)]=FxDatas.lpData[i].spjg; fp2[i]=FxDatas.lpData[i].spjg; } fplus1=fplus2=0; for(i=0;i sets.ma[1]+1)*sizeof(float)); dif=(float*)LocalLock(hdif); macd=(float*)LocalLock(hmacd); for(i=0;i sets.ma[1];i++) fplus1+=dif[i]; macd[0]=fplus1/lpFx->sets.ma[1]; k=1; for(;i sets.ma[1]]; fplus1+=dif[i]; macd[k++]=fplus1/lpFx->sets.ma[1]; } maxdif =mindif =dif[0]; for(i=1;i maxdif)?dif[i]:maxdif; mindif =(dif[i] sets.ma[1]); TextOut(hDC,et,32767,cb,strlen(cb)); SetTextColor(hDC,RGB(255, 255, 0)); TextOut(hDC,et,32767,cb,4); SetTextColor(hDC,RGB(0, 255, 255)); TextOut(hDC,et,32767,cb,2); SetWindowOrg(hDC,-4,0); hPen[0]=CreatePen(PS_SOLID,1,RGB(0, 255, 255)); hPen[1]=CreatePen(PS_DOT,1,RGB(255, 255, 0)); SelectObject(hDC,hPen[0]); MoveTo(hDC,ma2,(int)((dif[0]-mindif)*fce)); for(i=1;i sets.ma[1];i++) LineTo(hDC,i+ma2,(int)((dif[i]-mindif)*fce)); for(;i sets.ma[1]-1, (int)((macd[i-lpFx->sets.ma[1]-1]-mindif)*fce)); LineTo(hDC,i+ma2+lpFx->sets.ma[1], (int)((macd[i-lpFx->sets.ma[1]]-mindif)*fce)); } SelectObject(hDC,GetStockObject(WHITE_PEN)); for(i=0;i sets.ma[1];i++) { MoveTo(hDC,i+ma2+lpFx->sets.ma[1],-(int)(mindif*fce)); LineTo(hDC,i+ma2+lpFx->sets.ma[1], (int)((dif[i+lpFx->sets.ma[1]]-mindif)*fce)); } SetBkMode(hDC,TRANSPARENT); SetTextAlign(hDC,TA_RIGHT|TA_TOP); SetTextColor(hDC,RGB(255, 255, 255)); SetWindowOrg(hDC,0,0); MoveTo(hDC,0,-(int)(mindif*fce)); LineTo(hDC,et,-(int)(mindif*fce)); TextOut(hDC,0,-(int)(mindif*fce),"0",1); for(i=0;i<2;i++) if(hPen[i]!=NULL) DeleteObject(hPen[i]); LocalUnlock(hdif); LocalFree(hdif); LocalUnlock(hmacd); LocalFree(hmacd); return 1; }