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

📄 graph.c

📁 站长96年写的一个Internet上用的股票行情、分析、交易、资讯程序源码
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <windows.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#include "hq.h"#include "hq_cl.h"#include "msg.h"                     //10,20,30GRAPH_PARA def_para ={30, 40, 30};LPGRAPH_PARA gra_para[] ={&GraphData.xlt, &GraphData.jlt, NULL};LPSTR gra_items[] ={"XLT", "JLT", NULL};extern BOOL GetInitString(LPSTR, LPSTR, LPSTR);extern BOOL PutInitString(LPSTR, LPSTR, LPSTR);extern ErrMsg(HWND, LPSTR);extern HWND ghWndMain, ghWndXlt, ghWndJlt;extern BOOL IsZsRec(int, int);HBITMAP hBmp =NULL;//this macro return respond x coor accroding to time value#define	COOR(tim) 	(tim>=HqTime[GraphData.jys].pm_min_start?HqTime[GraphData.jys].am_min_count+(tim-HqTime[GraphData.jys].pm_min_start):tim -HqTime[GraphData.jys].am_min_start)//this macro return respond time value accroding to set serial#define	TIME(x)		(x>=HqTime[GraphData.jys].am_min_count?HqTime[GraphData.jys].pm_min_start+x-HqTime[GraphData.jys].am_min_count:HqTime[GraphData.jys].am_min_start+x)#define	R_DOTS		0	//预留空间                                 BOOL GraphInit(){	int i;	char tmp[100];	LPSTR tok;	int r, g, b;	LOGFONT lf;			i =0;	while(gra_items[i])	{		if(!GetInitString("GRAPH", gra_items[i], tmp))		{				memcpy(gra_para[i], &def_para, sizeof(GRAPH_PARA));			sprintf(tmp, "%i,%i,%i", def_para.ma[0], def_para.ma[1], def_para.ma[2]);			PutInitString("GRAPH", gra_items[i], tmp);		}		else		{			if(!(tok =strtok(tmp, ",")))			{				memcpy(gra_para[i], &def_para, sizeof(GRAPH_PARA));				i++;				continue;			}			while(*tok ==' ') tok++;			gra_para[i]->ma[0] =atoi(tok);						if(!(tok =strtok(NULL, ",")))			{				memcpy(gra_para[i], &def_para, sizeof(GRAPH_PARA));				i++;				continue;			}			while(*tok ==' ') tok++;			gra_para[i]->ma[1] =atoi(tok);						if(!(tok =strtok(NULL, ",")))			{				memcpy(gra_para[i], &def_para, sizeof(GRAPH_PARA));				i++;				continue;			}			while(*tok ==' ') tok++;			gra_para[i]->gap =atoi(tok);		}		i++;	}	if(!GetInitString("GRAPH", "COLOR1", tmp))	{		strcpy(tmp, "180,180,0");		PutInitString("GRAPH", "COLOR1", tmp);	}	r =255;	if(tok =strtok(tmp, ","))		r =atoi(tok)%256;	g =0;	if(tok)		if(tok =strtok(NULL, ","))			g =atoi(tok)%256;	b =255;	if(tok)		if(tok =strtok(NULL, ","))			b =atoi(tok)%256;	GraphData.color[0] =RGB(r, g, b);		if(!GetInitString("GRAPH", "COLOR2", tmp))	{		strcpy(tmp, "0,255,255");		PutInitString("GRAPH", "COLOR2", tmp);	}	r =0;	if(tok =strtok(tmp, ","))		r =atoi(tok)%256;	g =255;	if(tok)		if(tok =strtok(NULL, ","))			g =atoi(tok)%256;	b =255;	if(tok)		if(tok =strtok(NULL, ","))			b =atoi(tok)%256;	GraphData.color[1] =RGB(r, g, b);		memset(&lf, 0, sizeof(lf));	lf.lfHeight =13;	lf.lfWeight =FW_NORMAL;	strcpy(lf.lfFaceName, "Termianl");	GraphData.hFont =CreateFontIndirect(&lf);        if(GraphData.hFont ==NULL)    {    	ErrMsg(ghWndMain, "Create font failed!");    }	return TRUE;}void GraphExit(void){	if(GraphData.hFont) DeleteObject(GraphData.hFont);	if(hBmp) DeleteObject(hBmp);}int vLineTo(HDC hDC, int x1, int y1){    int x0,y0,i;    DWORD dw;        dw =GetCurrentPosition(hDC);    x0 =LOWORD(dw);    y0 =HIWORD(dw);    if(y1>y0)    {    	for(i=y0;i<=y1;i++)    	{        	if(i-(int)(i/4)*4==0)            			SetPixel(hDC,x0,i,RGB(80,80,80));    	    	}    }    if(y1<y0)    {    	for(i=y0;i>=y1;i--)    	{        	if(i-(int)(i/4)*4==0)            			SetPixel(hDC,x0,i,RGB(80,80,80));    	    	}        }	return 0;}int hLineTo(HDC hDC, int x1, int y1){    int x0,y0,i;    DWORD dw;        dw =GetCurrentPosition(hDC);    x0 =LOWORD(dw);    y0 =HIWORD(dw);    if(x1>x0)    {    	for(i=x0;i<=x1;i++)    	{        	if(i-(int)(i/4)*4==0)            			SetPixel(hDC,i,y0,RGB(100,100,100));    	    	}    }    if(x1<x0)    {    	for(i=x0;i>=x1;i--)    	{        	if(i-(int)(i/4)*4==0)            			SetPixel(hDC,i,y0,RGB(100,100,100));    	    	}        }	return 0;}int DrawXlt(HDC hDC, LPRECT rc){	int i, k,j;	int ma;	double fplus;	float zjjg;	double fhdj, fwdt, f ,zgjg;	HPEN hPen, hPenRed, hPenGreen;	int tim;	char tmp[20];	//画Y坐标		hPen =CreatePen(PS_SOLID, 2, RGB(255, 255, 255));	SelectObject(hDC, hPen);	MoveTo(hDC,rc->left,rc->bottom);	LineTo(hDC,rc->left,rc->top+2);	LineTo(hDC,rc->right-1,rc->top+2);	SelectObject(hDC,GetStockObject(WHITE_PEN));	DeleteObject(hPen);	if(GraphData.minEnd <=0 || GraphData.minCount <=0) return -1;	SelectObject(hDC, GetStockObject(WHITE_PEN));		fwdt =(double)(rc->right-rc->left)/(HqTime[HqPaintData.jys].am_min_count						+HqTime[HqPaintData.jys].pm_min_count+R_DOTS);	if(GraphData.GraHead.zgjg==0)		zgjg = 100.00;	else	    zgjg =GraphData.GraHead.zgjg;	    	fhdj =(double)(rc->bottom-rc->top)/(zgjg*2);	SetViewportOrg(hDC, rc->left, rc->bottom-(rc->bottom-rc->top)/2);		SetTextColor(hDC, RGB(255, 255, 0));	SelectObject(hDC, GraphData.hFont);		//画X坐标		hPen =CreatePen(PS_SOLID, 1, RGB(80, 80, 80));	SelectObject(hDC, hPen);	for(f =-GraphData.GraHead.zgjg; f<=zgjg+0.001;f+=zgjg/5)	{		MoveTo(hDC, rc->right-rc->left-2, (int)(f*fhdj));		LineTo(hDC, 0, (int)(f*fhdj));		sprintf(tmp, "%.2f", f+GraphData.GraHead.zrsp);		if((int)(f*100) >0)			SetTextColor(hDC, RGB(255, 0, 0));		else if((int)(f*100) <0)			SetTextColor(hDC, RGB(0, 255, 0));		else SetTextColor(hDC, RGB(255, 255, 255));		SetTextAlign(hDC, TA_RIGHT|TA_BASELINE);		TextOut(hDC, -4, -(int)(f*fhdj), tmp, strlen(tmp));		sprintf(tmp, "%.1f%c", f*100/GraphData.GraHead.zrsp,'%');		SetTextAlign(hDC, TA_LEFT|TA_BASELINE);		TextOut(hDC, rc->right-rc->left+2, -(int)(f*fhdj), tmp, strlen(tmp));	}		SelectObject(hDC, GetStockObject(WHITE_PEN));	DeleteObject(hPen);	hPen =CreatePen(PS_SOLID, 2, RGB(255, 255, 255));	SelectObject(hDC, hPen);	MoveTo(hDC, 0, 0);	LineTo(hDC, rc->right-rc->left-2, 0);	SelectObject(hDC, GetStockObject(WHITE_PEN));	DeleteObject(hPen);	tim =GraphData.lpGraData[0].tim;	hPenRed =CreatePen(PS_SOLID, 1, RGB(200, 0, 200));	hPenGreen =CreatePen(PS_SOLID, 1, RGB(0, 255, 0));	zjjg =GraphData.lpGraData[0].zjjg;	MoveTo(hDC, (int)(fwdt*COOR(tim)), -(int)(fhdj*zjjg));	for(i =1; i<GraphData.minCount; i++)	{		tim =GraphData.lpGraData[GraphData.lpMinPos[i]].tim;		if(tim>HqTime[GraphData.jys].pm_min_start+HqTime[GraphData.jys].pm_min_count)			break;		if(tim==0)	continue;		zjjg =GraphData.lpGraData[GraphData.lpMinPos[i]].zjjg;		SelectObject(hDC, hPenRed);				LineTo(hDC, (int)(fwdt*COOR(tim)), -(int)(fhdj*zjjg));	}		SelectObject(hDC, GetStockObject(WHITE_PEN));	DeleteObject(hPenRed);	DeleteObject(hPenGreen);		for(k =0; k<1; k++)	{		ma =GraphData.xlt.ma[k];		if(GraphData.minCount<ma) continue;		hPen =CreatePen(PS_SOLID, 0, RGB(255,255,0));//GraphData.color[k]);		SelectObject(hDC, hPen);		//SetROP2(hDC, R2_XORPEN);		        ///////////////////////////////////////////////////////////                //以下为分时平均		//fplus =(float)0.0;		//for(i =0; i<ma; i++)		//	fplus +=GraphData.lpGraData[GraphData.lpMinPos[i]].zjjg;		//tim =GraphData.lpGraData[GraphData.lpMinPos[i-1]].tim;		//MoveTo(hDC, (int)(fwdt*COOR(tim)), -(int)(fhdj*fplus/ma));		//		//for(; i<GraphData.minCount; i++)		//{		//	zjjg =GraphData.lpGraData[GraphData.lpMinPos[i-ma]].zjjg;		//	fplus-=zjjg;		//	zjjg =GraphData.lpGraData[GraphData.lpMinPos[i]].zjjg;		//	fplus +=zjjg;		//	tim =GraphData.lpGraData[GraphData.lpMinPos[i]].tim;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -