你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 跟高手学编程
VC++.NET图形编程--绘K线图和条形图(二)
 
绘图

遵循面向对象的普遍编程方法,处理图形包括两个步骤:

创建 Graphics 对象。

使用 Graphics 对象绘制线条、形状、文本或显示与操作图像。

本讲主要是绘制K线图和条形图,而这两种图形是由线条、矩形和文本组成的。下面着重讲解线条、空心矩形、实心矩形和文本的绘制方法。

1)绘制线条

绘制线条调用Graphics 对象的DrawLine方法,顺序传入5 个参数:画笔(Pen)、线条左上角横坐标、纵坐标、右下角横坐标和纵坐标。

例如要从点(00)到(50100)画一条线段,代码如下:

System::Drawing::Pen^ myPen =

    gcnew System::Drawing::Pen(System::Drawing::Color::Red);

System::Drawing::Graphics^ formGraphics;

formGraphics = this->CreateGraphics();

formGraphics->DrawLine(myPen, 0, 0, 50, 100);

delete myPen;

delete formGraphics;

2)绘制空心矩形

绘制空心矩形调用Graphics 对象的DrawRectangle方法,顺序传入两个参数:画笔和Rectangle结构。

Rectangle结构是GDI+ 提供的用于组织矩形数据的一种数据结构。它存储一组整数,共四个,表示一个矩形的位置和大小。Rectangle结构要求4int类型数据,依次表示:矩形左上角横坐标、纵坐标、矩形的宽度和高度。

例如要画一个左上角顶点为(1020),宽度为200,高度300的空心矩形,代码如下:

private:

    void DrawRectangle()

    {

        System::Drawing::Pen^ myPen =

            gcnew System::Drawing::Pen(System::Drawing::Color::Red);

        System::Drawing::Graphics^ formGraphics;

        formGraphics = this->CreateGraphics();

        formGraphics->DrawRectangle(myPen, Rectangle(10, 20, 200, 300));

        delete myPen;

        delete formGraphics;

    }

3)绘制实心矩形

绘制实心矩形调用Graphics 对象的FillRectangle方法,顺序传入两个参数:实心画笔(SolidBrush)和Rectangle结构。

例如要画一个左上角顶点为(1020),宽度为200,高度300的实心矩形,代码如下:

System::Drawing::SolidBrush^ myBrush =

    gcnew System::Drawing::SolidBrush(System::Drawing::Color::Red);

System::Drawing::Graphics^ formGraphics;

formGraphics = this->CreateGraphics();

formGraphics->FillRectangle(myBrush, Rectangle(10, 20, 200, 300));

delete myBrush;

delete formGraphics;

4)绘制文本

可以调用Graphics 对象的DrawString方法在窗体上绘制文本。

DrawString方法提供了一组重载,选用其中一种Graphics.DrawString (String, Font, Brush, Single, Single)。它在指定位置并且用指定的 Brush Font 对象绘制指定的文本字符串,参数说明如下:

第一个参数是要绘制的文本字符串。

第二参数定义字符串的文本字体。

第三参数确定所绘制文本的画笔(颜色和纹理)。

第四参数确定所绘制文本的左上角的 x 坐标。

第五参数确定所绘制文本的左上角的 y 坐标。

例如绘制文本“样板文本”、字体Arial16pt)、使用实心黑色画笔、文本左上角的 x 坐标为150y 坐标为 50的代码如下:

public:

    void DrawString()

    {

        System::Drawing::Graphics^ formGraphics = this->CreateGraphics();

        String^ drawString = "样板文本";

        System::Drawing::Font^ drawFont =

            gcnew System::Drawing::Font("Arial", 16);

        System::Drawing::SolidBrush^ drawBrush = gcnew

            System::Drawing::SolidBrush(System::Drawing::Color::Black);

        float x = 150.0F;

        float y = 50.0F;

        System::Drawing::StringFormat^ drawFormat =

            gcnew System::Drawing::StringFormat();

        formGraphics->DrawString(drawString, drawFont, drawBrush, x, y);

        delete drawFont;

        delete drawBrush;

        delete formGraphics;

    }

要注意:不能在 Load 事件处理程序中调用以上绘制图形或文本的方法。同时,如果已调整该窗体的大小或者其他窗体遮蔽了该窗体,也不会重绘所绘制的内容。这是因为当窗体加载或者窗体(控件)重绘时,Graphics对象就被清空了。若要自动重绘内容,应该重写 Paint 事件处理程序。

 

三、绘图

本节结合实例详细讲解图形编程方法。绘图数据取自数据库数据表StockList,其中开盘价、收盘价、最高价和最低价用于绘K线图,成交量用于绘条形图,日期用于确定两者的横坐标。

准备

在绘图之前,需要作两方面准备工作:一是准备界面——在实例程序中添加用来承载图形的窗体或控件;二是准备数据——在窗体中添加一个方法用于从数据库取出绘图所需的数据。

准备界面

前面提到过,不能在 Load 事件处理程序中调用画线条或实心矩形的方法。但是,我们希望在承载图形的窗体加载时就将图形显示出来。

可以在实例程序中添加一个窗体,再在窗体上添加一个PictureBox控件。在PictureBox控件的Paint事件处理程序中,用 PaintEventArgse创建一个Graphics对象并用这个对象画图。然后,将PictureBox控件的Paint事件连接到事件的处理器方法,并将PictureBox控件附加到窗体。这样,在窗体加载时图形也显示出来,实现了自动重绘。

为窗体或PictureBox控件设置以下属性:

1)窗体的名称为“DrawingForm”。

2)窗体的Text属性为“绘图”。

3)保持PictureBox控件的Name属性的默认值“pictureBox1不变。

4)设置PictureBox 控件的Dock属性为“Fill”、BackColor属性为“White”。

5)适当调整窗体的大小。

  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089