如何在BCB中配置和使用GDI+技术?(附动画实例)
2003-11-01 22:53
1191 查看
主页:www.maxss.net
Email: maxss.net@163.com
GDI+是微软公司推出的新一代图形设备接口,功能强大。不再像传统的GDI那样让人的心志严重地受挫,GDI+具有很多新特性(如支持Alpha、渐变色填充、反锯齿等),并具有面向对象特性,这使得开发人员可以更方便、更形象地进行GDI+开发。有关GDI+更详细的介绍大家可以查阅MSDN中的专栏。
但目前在BCB环境中使用GDI+进行开发则还需要进行一定的设置和步骤才能成功编译和链接。以下我就以BCB6为例进行简单的说明:
1、建立编译链接环境:
GDI+主要是通过gdiplus.dll进行调用,而BCB没有直接提供与gdiplus.dll对应的静态链接库,所以需要我们自己建立。如果在自己的计算机没有找到文件gdiplus.dll,可以到微软的官方网站进行下载。然后复制一份到自己的工程目录中,然后使用BCB提供的工具implib生成对应的静态链接库:
implib gdiplus.lib gdiplus.dll
完成后切记要把gdiplus.lib添加到工程中(使用BCB的"Project->Add to project..."命令)。
(注意:这两个文章都需要保存在工程目录中)
2、修改编译选项:
打开BCB菜单"Project->Options",点击"Directories/Conditionals"页,在"Conditionals defines:"中添加“STRICT”编译选项,如果有多项则需要用分号";"进行分隔。
3、在.cpp文件中的语句“#pragma hdrstop”后加入以下内容:
#include <algorithm>
using std::min;
using std::max;
4、在.cpp文件中的语句块“#pragma package(smart_init)...”后加入以下内容:
using namespace Gdiplus;
(可以参阅后面的源码例子)
5、最后注意要在.h文件中引入GDI+的头文件:
#include <Gdiplus.h>
6、现在就可以进行基于GDI+的开发了,下面是我为大家编写的一个产生旋转的正方形的简单动画效果的例子:
(注意:需要添加一个Timer控件,并设置其Interval属性为50)
Unit1.h:
Unit1.cpp:
Email: maxss.net@163.com
GDI+是微软公司推出的新一代图形设备接口,功能强大。不再像传统的GDI那样让人的心志严重地受挫,GDI+具有很多新特性(如支持Alpha、渐变色填充、反锯齿等),并具有面向对象特性,这使得开发人员可以更方便、更形象地进行GDI+开发。有关GDI+更详细的介绍大家可以查阅MSDN中的专栏。
但目前在BCB环境中使用GDI+进行开发则还需要进行一定的设置和步骤才能成功编译和链接。以下我就以BCB6为例进行简单的说明:
1、建立编译链接环境:
GDI+主要是通过gdiplus.dll进行调用,而BCB没有直接提供与gdiplus.dll对应的静态链接库,所以需要我们自己建立。如果在自己的计算机没有找到文件gdiplus.dll,可以到微软的官方网站进行下载。然后复制一份到自己的工程目录中,然后使用BCB提供的工具implib生成对应的静态链接库:
implib gdiplus.lib gdiplus.dll
完成后切记要把gdiplus.lib添加到工程中(使用BCB的"Project->Add to project..."命令)。
(注意:这两个文章都需要保存在工程目录中)
2、修改编译选项:
打开BCB菜单"Project->Options",点击"Directories/Conditionals"页,在"Conditionals defines:"中添加“STRICT”编译选项,如果有多项则需要用分号";"进行分隔。
3、在.cpp文件中的语句“#pragma hdrstop”后加入以下内容:
#include <algorithm>
using std::min;
using std::max;
4、在.cpp文件中的语句块“#pragma package(smart_init)...”后加入以下内容:
using namespace Gdiplus;
(可以参阅后面的源码例子)
5、最后注意要在.h文件中引入GDI+的头文件:
#include <Gdiplus.h>
6、现在就可以进行基于GDI+的开发了,下面是我为大家编写的一个产生旋转的正方形的简单动画效果的例子:
(注意:需要添加一个Timer控件,并设置其Interval属性为50)
Unit1.h:
//--------------------------------------------------------------------------- #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include <ExtCtrls.hpp> #include <Gdiplus.h> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TTimer *Timer1; void __fastcall Timer1Timer(TObject *Sender); private: // User declarations Gdiplus::GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken; public: // User declarations __fastcall TForm1(TComponent* Owner); __fastcall ~TForm1(void); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif |
//--------------------------------------------------------------------------- #include <vcl.h> #include <math.h> #pragma hdrstop #include <algorithm> using std::min; using std::max; #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; using namespace Gdiplus; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { DoubleBuffered = true; // 初始化GDI+ GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); } //--------------------------------------------------------------------------- __fastcall TForm1::~TForm1() { // 闭关GDI+ GdiplusShutdown(gdiplusToken); } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender) { const static int OX = 200, OY = 200; const static REAL C = 140; const static REAL PI = 3.14; static REAL offset = 0; POINT p[4]; REAL k[4]; // 生成正文形四角的新坐标值 for (int i=0; i < 4; i++) { k[i] = offset + (PI / 2) * i; p[i].x = (int)OX + C * sin(k[i]); p[i].y = (int)OY + C * cos(k[i]); } Gdiplus::Graphics g(Canvas->Handle); g.SetSmoothingMode(SmoothingModeHighQuality); //高画质、低速 // 重新填充背景 SolidBrush brush(Color::Color(0,0,0)); Pen pen(Color::Color(255, 255, 0), 3); g.FillRectangle(&brush, 0, 0, ClientWidth, ClientHeight); Gdiplus::Point point1(p[0].x, p[0].y); Gdiplus::Point point2(p[1].x, p[1].y); Gdiplus::Point point3(p[2].x, p[2].y); Gdiplus::Point point4(p[3].x, p[3].y); Gdiplus::Point point5(p[0].x, p[0].y); // 在新坐标绘画正方形 Gdiplus::Point points[] = {point1, point2, point3, point4, point5}; g.DrawLines(&pen, points, 5); offset += 0.1; } //--------------------------------------------------------------------------- |
相关文章推荐
- [Mugeda HTML5技术教程之18]如何在Android应用中使用Mugeda动画内容
- 使用、扩展、改进与推广,用实例讲述如何在工作中提高自己的技术水平
- 使用、扩展、改进与推广,用实例讲述如何在工作中提高自己的技术水平
- 使用反射创建Bean、Spring中是如何根据类名配置创建Bean实例、Java提供了Class类获取类别的字段和方法,包括构造方法
- [Mugeda HTML5技术教程之18]如何在Android应用中使用Mugeda动画内容
- 一起谈.NET技术,Qt简介以及如何配置Qt使用VS2010进行开发
- 使用反射创建Bean、Spring中是如何根据类名配置创建Bean实例
- BCB配置和使用GDI+
- 实例介绍如何配置使用 VMControl 多网络支持功能
- 如何在MFC中使用GDI+技术
- 如何在filter中使用bean实例,web服务启动配置加载顺序
- 使用反射创建Bean、Spring中是如何根据类名配置创建Bean实例、Java提供了Class类获取类别的字段和方法,包括构造方法
- 使用 MyEclipse 插件创建 Hibernate + Struts 实例(动画)
- 如何使用.NET配置文件(二)
- 如何使用XCodeFactory自动生成XML配置文件和对应的解析类?
- 如何使用.NET配置文件(一)
- 如何在lucene中使用中文自动分词技术- -
- 使用J2ME技术实现简单的动画(附代码实现)
- 如何使用.NET配置文件(二)
- 如何配置和使用WebServices集群