`

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  
代码格式不规范,没有合理的缩进,看着有点累!

相关推荐

    VC-(VS2013)绘制正弦波sin函数图像

    在本文中,我们将深入探讨如何使用Visual Studio 2013(VS2013)和C++编程语言,结合MFC(Microsoft Foundation Classes)框架来绘制正弦波sin函数的图像。MFC是一个用于构建Windows应用程序的C++类库,它提供了许多...

    一个vc做的流程图绘制代码

    通过以上分析,我们可以看出这个VC项目是一个功能完善的流程图绘制工具,涵盖了图形用户界面、图形绘制、用户交互等多个方面。学习这个项目可以帮助我们理解VC中图形界面应用程序的开发,特别是涉及流程图和图形编辑...

    VC6.0 虚线绘制

    本教程将详细解释如何使用VC6.0来实现虚线的绘制,以及如何通过修改相关函数来绘制其他类型的符号。 首先,VC6.0是Microsoft Visual C++ 6.0的简称,它是一款经典的集成开发环境,主要用于编写Windows平台上的C++...

    vc/mfc函数图形绘制器

    "vc/mfc函数图形绘制器"是一个基于Visual C++和MFC(Microsoft Foundation Classes)库的应用程序,专门设计用于绘制数学函数图形。该工具允许用户输入包含基本数学运算符和常见数学函数的解析式,然后可视化这些...

    vc简单图形的绘制与保持

    "vc简单图形的绘制与保持"这个主题就涵盖了如何在MFC(Microsoft Foundation Classes)框架下实现这一功能。下面我们将深入探讨相关的知识点。 1. **设备上下文(Device Context, DC)** 设备上下文是Windows图形...

    vc6中使用gdi+绘制2维图形的例子源码

    在VC6中使用GDI+绘制2维图形是一项常见的任务,尤其对于开发Windows桌面应用程序的程序员来说。GDI+(Graphics Device Interface Plus)是微软推出的一个图形处理库,它扩展了传统的GDI功能,提供了更丰富的图形绘制...

    VC流程图绘制系统

    "VC流程图绘制系统"是一个基于Visual C++(简称VC)开发的用于创建流程图的应用程序。这个系统设计了一个全面的操作界面,用户可以方便地进行流程图的绘制和编辑,体现了良好的交互性和简洁的视觉风格。其源代码结构...

    用vc6做的鼠标点击图形填充

    在计算机图形学中,"用vc6做的鼠标点击图形填充"是一个常见的编程实践,它涉及到图形用户界面(GUI)的开发以及图形绘制技术。VC6,全称Microsoft Visual C++ 6.0,是微软发布的一款集成开发环境,广泛用于C++编程。...

    vc常用绘图函数实例

    6. **绘制多边形**:`Polygon`函数类似于`Polyline`,但会自动闭合路径,`pDC-&gt;Polygon(polygon,3);`画出一个三角形。 在使用GDI对象时,一般遵循以下步骤: 1. **创建GDI对象**:比如使用`CPen`和`CBrush`来创建...

    VC电力界面矢量图绘制源代码

    【VC电力界面矢量图绘制源代码】是一个适用于VC6开发环境的项目,它提供了电力系统界面的矢量图绘制功能。源代码是学习和理解电力系统图形界面设计的重要资源,尤其是对于那些想要深入理解电力控制模拟的开发者来说...

    VC 波形图绘制 曲线绘制类演示程序.rar

    一个VC 波形图绘制 曲线绘制类演示程序,包括了多媒体定时器通用类 CTimeSet代码,还有一个scope绘制类。使用:  假如你要调用该类CTimeSet的类是 CYourApp  1. 在CYourApp中定义CTimeSet的实例 CTimeSet m_time...

    VC绘制3D饼状图(绘制在对话框或其他指定位置)

    本文在参考《VC6绘制3D饼状图 - 完美版》(http://www.vckbase.com/document/viewdoc/?id=1820)一文的基础上将绘制饼状图的过程封装成一个独立的类以便调用,调用时只需给出指定矩形区域以及相关参数,即可画出所...

    VC基本函数一览

    VC 基本函数一览 VC 基本函数一览是 MFC 框架中的一些基本函数的集合,这些函数都是在视图控件(View)中的重要成员变量和成员函数。它们主要用于处理各种窗口操作、菜单操作、字符串操作、图形输出、设备上下文...

    VC 计算器 + GDI函数绘图

    本篇将深入探讨一个基于VC的计算器项目,特别关注其如何利用GDI(Graphics Device Interface)函数进行图形绘制。 首先,我们来理解什么是GDI。GDI是Windows操作系统内核的一部分,它为应用程序提供了一种标准接口...

    读取串口数据并画实时曲线.zip_VC 串口_VC 曲线绘制_vc 实时曲线_串口通信_读取串口数据

    在本文中,我们将深入探讨如何使用Visual C++(VC6.0)开发一个应用程序,该程序能够通过串口通信读取数据,并在图形用户界面(GUI)上绘制实时曲线。这个项目结合了串口通信技术、图形绘制以及事件驱动编程等关键...

    VC 画图几何图形绘制源代码.rar

    一款国外VC 画图实例源码,功能包括有字体渲染、几何图形绘制,主要是矩形、长方形、正方形绘制等功能,拖动鼠标即可画出矩形,通过本源码简单了解画图的基本实现方法,对掌握VC 中众多的图形绘制函数的使用有参考...

    VC画图程序实现绘图并保存

    在本文中,我们将深入探讨如何使用Visual C++(简称VC)来实现一个基本的画图程序,该程序能够绘制直线、曲线、矩形和椭圆,并具有保存图像的功能。这是一次很好的实践,可以帮助初学者了解图形用户界面(GUI)编程...

    VC6简单图形演示(UILocal)

    总的来说,"VC6简单图形演示(UILocal)"项目是一个很好的实践平台,可以让学习者熟悉VC6.0下的图形界面编程,理解MFC的使用,以及掌握图形的绘制与操作技术。通过这个项目,开发者可以锻炼到C++编程、Windows编程以及...

    vc 绘制简单的图形 Draw

    在VC++编程环境中,"vc 绘制简单的图形 Draw" 主要涉及到Windows应用程序开发中的GDI(Graphics Device Interface)技术。GDI是Windows API提供的一种用于控制设备图形的接口,它允许程序员创建和操作图形对象,如...

    VC开发的3D图绘制

    3D 绘制

Global site tag (gtag.js) - Google Analytics