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

📄 draw.c

📁 站长96年写的一个Internet上用的股票行情、分析、交易、资讯程序源码
💻 C
📖 第 1 页 / 共 2 页
字号:
				{    					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 + -