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

    本文依绘上证指数K线图、条形图为例,讲解Windows图形系统的结构体系、使用GDI+进行VC++.NET图形编程的基本方法及实现过程。

关键词  VC++.NET;图形编程;GDI+;自动重绘;K线图;条形图

 

图形编程简单地说,就是从应用程序中将图形画到图形设备上。图形设备诸如显示器、打印机和绘图仪。

本讲将紧接第一讲采用的应用程序实例,通过绘制上证指数K线图和成交量条形图讲解VC++.NET图形编程的基本方法及实现过程。

一、Windows图形系统结构体系

众所周知,不仅图形设备千差万别,每一种图形设备的型号也名目繁多。过去,在DOS下应用程序要为图形界面付出许多代价,包括编写大量不同的代码以适应不同图形设备、不同设备的不同型号。最令人无法忍受的是,在DOS程序之间无法共享这些代码,每编写一次就意味着大量的重复劳动。

Windows是支持图形用户界面(GUI)的操作系统。其应用程序具有类似的界面、类似的操作,它以图形代替DOS下的字符命令,使用户容易操作、触类旁通。

为了简化编程,微软在于应用程序与图形设备之间增加了一个统一的接口——图形设备接口(Graphics Device InterfaceGDI),如图1所示。GDI屏蔽了图形设备的差异,将应用程序与不同输出设备特性相隔离,使Windows应用程序能够毫无障碍地在Windows支持的任何图形输出设备上运行。

程序员在编写图形程序时,可以不必考虑图形设备的特性,而只专注于与GDI打交道。程序编好以后,即使图形输出设备变换了,程序编码也无需改变。例如,能在Epson点式打印机上工作的程序,在不改变程序的前提下,也能在激光打印机上工作。

图形设备接口(GDI

设备驱动程序

物理硬件

 

 


 



                图1  Windows图形系统结构体系

不仅如此,Windows图形系统结构体系提供的GDI接口,适用于所有Windows应用程序,是Windows应用程序图形编程的统一接口。

二、GDI+速览

GDI.NET版本叫做GDI+GDI+GDI进行了很好的改进,并且易用性更好。

VC++.NET中编写图形程序时,直接与应用程序打交道的接洽者就是GDI+

GDI+

GDI+ API 通过一组部署为托管代码并向程序员公开的类。托管类接口由以下命名空间组成:

System.Drawing

System.Drawing.Drawing2D

System.Drawing.Imaging

System.Drawing.Text

System.Drawing.Printing

GDI+包含大约 60 个类、50 个枚举和 8 个结构。Graphics 类是 GDI+ 的核心功能,它是实际绘制直线、曲线、图形、图像和文本的类。

许多类与 Graphics 类一起使用。例如:

(1)Pen   用于绘制线条、勾勒形状轮廓或绘制其他几何形式。

(2)Brush   用于填充图形区域,如实心形状、图像或文本。

(3)Font   在绘制文本时要使用的形状。

(4)Color 结构  表示要显示的不同颜色。

⒉确定图形的位置

GDI+图形的位置是通过坐标系来确定的。默认坐标系统的原点是在左上角,并且 x 轴指向右边,y 轴指向下边,如图2所示,默认坐标系统的度量单位是像素。

 


2  默认坐标系统

 

创建图形对象

所有图形都是通过GDI+图形对象Graphics的有关方法来绘制的。Graphics 对象表示 GDI+ 绘图表面,是用于创建图形图像的对象。要绘制图形,需要先创建 Graphics 对象。

可以用各种方法创建Graphics对象。

Paint 事件中的 PaintEventArgs 引用 Graphics 对象

在窗体或控件的 Paint 事件中,接收对图形对象(作为PaintEventArgs 的一部分)的引用:

1) 声明 Graphics 对象。

2) 分配变量来引用作为 PaintEventArgs 的一部分传递的 Graphics 对象。

3) 编写代码在窗体或控件上绘图。

下面的示例演示了如何从 Paint 事件中的 PaintEventArgs 引用 Graphics 对象。

private:

   void Form1_Paint(System::Object ^ sender,

      System::Windows::Forms::PaintEventArgs ^ pe)

   {

      // 声明一个 Graphics 对象g,并且引用作为 PaintEventArgs

// 的一部分传递的 Graphics 对象。

      Graphics ^ g = pe->Graphics;

      // 在这里插入绘图代码。

   }

在为控件编写绘图代码时,通常会使用此方法来获取对图形对象的引用。

CreateGraphics 方法获取对 Graphics 对象的引用

调用某控件或窗体的 CreateGraphics 方法以获取对 Graphics 对象的引用,该对象表示该控件或窗体的绘图图面。

CreateGraphics 方法创建 Graphics 对象的示例代码:

Graphics ^ g;

// g 获取对 Graphics 对象的引用,

// 该对象表示该控件或窗体的绘图图面。

g = this->CreateGraphics();

如果想在已存在的窗体或控件上绘图,使用此方法。

Image 对象创建Graphics 对象

可以从 Image 类派生的任何对象创建Graphics对象。

调用 System.Drawing.Graphics.FromImage(System.Drawing.Image) 方法,提供要从其创建 Graphics 对象的 Image 变量的名称。

下面的示例演示如何使用 Bitmap 对象:

Bitmap ^ myBitmap = gcnew

   Bitmap("D:\\Documents and Settings\\Joe\\Pics\\myPic.bmp");

Graphics ^ g = Graphics::FromImage(myBitmap);

此方法在需要更改已存在的图像时十分有用。

  推荐精品文章

·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