`

VC6制作的走势图绘制功能函数

阅读更多
对于某些网络股票软件
比如各大门户网上都有的股票查看功能
其中的价格走势图和成交量图的实时绘制是一大亮点
我在VC里实践了下,绘走势图的函数如下
(由于程序里只是读取链表,计算处理结点数据然后绘点连线,耗费CPU时间较少,所以没有用双缓冲方法
如果是绘制位图,一般都要采用双缓冲方法防止刷新时闪屏)


void CDrawRealLine::DrawRealLine()
{
/*----------------------------
*计算画图所需点
*Point[180]--存放所要画的点的数组
*struct bargaininfo_head---价格链表结构体,存放表长度
*struct bargaininfo---价格链表结点
*m_socket---全局通信socket
*-----------------------------*/
idBuffer = m_QueID;//m_QueID查询文本框关联的成员变量
for(int i = 0; i < 180; i++)//Point[180]数组初始化
{
Point[i].num = 0;
Point[i].totalPrice = 0;
Point[i].totalQuality = 0;
} 

//接收单个商品价格链表
struct bargaininfo_head *bargaininfo_head = NULL;
bargaininfo_head = getbargainhead(m_socket);
for(i=0;inum;i++)//价格链表头结点保存链表长度信息
{
struct bargaininfo *pInfo = NULL;
pInfo = getbargainnode(m_socket);

strtok(pInfo->time," ");//解析时间,这里""中间是空格
char *tempHour = strtok(NULL,":");
int hour = atoi(tempHour);
char *tempMin = strtok(NULL, ":");
int min = atoi(tempMin);

/*-------------------------------
*有点偷懒了,这里我把时间轴给固定下来,从9:30到15:30,中间均匀分割
*-------------------------------*/
int index = (hour - 9)*30 +min/2-15;//记录点位置
if(index >= 0 && index < 180)
{ 
Point[index].num++;
Point[index].totalPrice += pInfo->price;
Point[index].totalQuality += pInfo->quality;
} 
theApp.index=index;//保存所画点个数
delete(pInfo);
}

//开始画图
CDC *pDC = GetDC();
pDC->SetBkColor(RGB(0,0,5));
CPen yellowpen(PS_SOLID,1,RGB(240,240,0));
pDC->SelectObject(&yellowpen);

//画成交量图
int j;//i用来控制绘图x坐标位置,j用来表示绘图的点脚标
j = 1;
CRect rect;
GetClientRect(&rect);
CPoint client;
client.x=rect.right-240;
client.y=rect.bottom;
i = 40;
for(j = 0; j < 180; j++)
{
pDC->MoveTo(i,client.y-80);
if(Point[j].totalPrice != 0)
{
int temp = client.y-80-(client.y-120)*Point[j].totalQuality/3/60000;
pDC->LineTo(i,temp); 
}
i = i + (client.x-80)/180;
}

CPen lightyellow(PS_SOLID,1,RGB(175,175,10));
pDC->SelectObject(&lightyellow);

//画均线图
//先画出第一条
float p1= Point[0].totalPrice/Point[0].num;
if(p1>=theApp.chartstartprice)
{
int m = (p1-theApp.chartstartprice)/theApp.chartstartprice/0.12*(client.y- 120)/3;//点必须是整型
pDC->MoveTo(40,client.y/3);//client.y/3是均线图中间坐标
pDC->LineTo(40+(client.x-80)/180,client.y/3-m);
}
else
{
int n = (p1-theApp.chartstartprice)/theApp.chartstartprice/0.12*(client.y-120)/3;
pDC->MoveTo(40,client.y/3);
pDC->LineTo(40+(client.x-80)/180,client.y/3-n);
}

//再画接下来的线,直接lineto
i=40+(client.x-80)/180;
for(j = 1;j < 180; j++)
{
float p = Point[j].totalPrice/Point[j].num;//要画的平均价格
if(Point[j].totalPrice != 0)
{
if(p>=theApp.chartstartprice)
{
int m = (p-theApp.chartstartprice)
/theApp.chartstartprice/0.12*(client.y-120)/3;
pDC->LineTo(i+(client.x-80)/180,client.y/3-m);
}
else
{
int n = (p-theApp.chartstartprice)
/theApp.chartstartprice/0.12*(client.y-120)/3;
pDC->LineTo(i+(client.x-80)/180,client.y/3-n);
}
}
i+=(client.x-80)/180; 
}

pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(0,0,5));
pDC->TextOut(300,5,"正在查询,请稍候...");//坐标300,5处原来有一个红字的提示,上边画完图后直接用背景色盖
掉提示。
}

数据库用的是 MSSQL2000(经不起折腾的数据库),数据库出问题了,没法抓图咯,有兴趣的朋友可以自己去试下。哦,对了,平台是VC6。不过.net下也可编译通过吧(不负责任的一句话)
0
0
分享到:
评论
1 楼 ph4nut 2009-12-18  
代码格式不规范,没有合理的缩进,看着有点累!

相关推荐

    gdi柱状图饼状图等各种常用图形绘制

    本主题聚焦于如何利用GDI在C++环境中绘制柱状图和饼状图,以及其他常见图形,以便展示各种模型数据,如股票、房地产的走势。下面将详细介绍GDI在绘制这些图形时的关键技术和步骤。 1. **GDI基础**: GDI是Windows ...

    股票外汇等图表VC实现示例

    2. 图表组件:在VC中创建图表通常涉及创建窗口,然后在窗口上绘制线条或折线图。可以使用CWnd派生类来创建自定义的图表控件,并重写OnPaint()函数进行绘图。GDI+提供了一系列的绘图对象,如Pen、Brush和Graphics,...

    Teechart5控件

    例如,在金融分析中,它可以用于绘制股票走势、经济指标等;在工程领域,可以用来展示项目进度、设备状态等;在科学研究中,能帮助研究人员清晰地展示实验结果和趋势。无论是在桌面应用程序,还是Web应用或移动应用...

    Kline_Original.rar

    在金融数据分析和交易领域,K线图是一种常用且重要的工具,它能够直观地展示价格走势和市场情绪。本篇文章将深入探讨一个基于VC6.0开发的K线显示源代码,帮助读者理解其工作原理,并提供可能的扩展思路。 一、VC6.0...

    文华公式期货最好用的指标公式文华财经指标公式仓位量能庄家仓位.doc

    6. **棒状图(Stickline)**: 在图表上绘制不同颜色和透明度的棒状图,以直观展示K线动能的大小和方向。当K线动能为正时,使用黄色系列,动能越大,棒状图越密集;当K线动能为负时,使用绿色系列,同样根据动能的...

    通达信指标公式源码 低吸高抛主图 源码.doc

    - STICKLINE 函数用于绘制柱状图,例如在A1X上穿0时画出不同颜色的柱子,以直观展示信号变化。 总的来说,这个指标公式结合了多个技术指标和自定义逻辑,为投资者提供了丰富的买卖信号。然而,任何技术指标都有其...

    具有增强的用户界面的MFC图表控件

    在本文中,我们将深入探讨如何使用“具有增强的用户界面的MFC图表控件”,这是一种在Visual C++环境中,特别是VC10.0版本中,用于创建美观且功能丰富的线性图表的工具。MFC(Microsoft Foundation Classes)是微软...

Global site tag (gtag.js) - Google Analytics