`
emowuyi
  • 浏览: 1478036 次
文章分类
社区版块
存档分类
最新评论

在C语言Windows应用程序中使用GDI+

 
阅读更多

GDI+是C++中常用的一种图形图像工具,VB、Delphi等语言也移植了GDI+,.net的诸多语言甚至完全采用GDI+作为绘制其界面。
在Winsows系统下,几乎所有的API都是直接针对C语言的,除C/C++可直接使用这些API外,其它各种语言都必须移植这些API方法,而唯独GDI+,微软提供的Gdiplus头文件,从类型定义到方法接口,都是针对C++写的,这就使得C语言没法使用这些面向对象的方法,即使是GDI+提供的原始API,如果不重新定义其参数中众多的数据类型,C语言也是没法使用的。
也许是因为C语言不适合编写Windows界面应用程序,所以至今没有发现GDI+的C版本(可能有,但我没发现)。因为我是一个业余编程爱好者,平时喜欢摆弄下C/C++、Delphi等,所以用了一些时间,在GDI+的C++版本基础上进行改编了一个C语言的GDI+版本,在改写的过程中,我才知道没发现GDI+的C版本的一个可能的原因是:C++版本中的众多的重载函数,缺省参数,用C来写却是头都大了,不知道用什么函数名才好(考虑GDI+使用了这些年,新的函数名不应与原函数名偏离太远)。
对于改写的GDI+ C版本,作如下说明:
一、函数命名,采用下面的几个原则来进行:
1、尽量按C++版本的GDI+类名作为各种GDI+对象函数名的前缀。如C++原先的Graphics类的函数,前缀都冠以Graphics;对那些原本类名很长的类适当进行了一些简化,如StringFormat函数的前缀简化为StrFormat、ImageAttributes函数的前缀为ImageAttr、LinearGradientBrush函数的前缀为LineBrush、PathGradientBrush函数的前缀为PathBrush等等。
2、C++版本各个类的构造函数和析构函数命名为xxxxCreate和xxxxDelete,其中的xxxx为前缀,如原ImageAttributes类的构造、析构函数名称分别为ImageAttrCreate和ImageAttrDelete等;对于多个构造函数的类,以一个常用的函数命名为xxxxCreate,其余的命名为xxxxFrom****。
3、对原先的重载函数,以最常用的保留原函数名,其余的冠以一些简单的后缀语义区分;对某些以浮点类型和整数类型作为参数类型的取整数类型为准,浮点类型函数后面加F后缀进行区分。
4、GDI+ C版本和C++版本一样,直接在头文件中写成FORCEINLINE类型的函数,我测试过VS2005和BCB6及以上版本,VS对FORCEINLINE宏支持为inline函数,而BCB则临时编译为C函数。总之,不需要预先编译静态库。
二、使用GDI+的C++版本一样,C版本使用前必须使用GdiplusStartup进行初始化,使用完毕也应用GdiplusShutdown进行释放,因为C++的GdiplusStartup的input参数是个类类型,默认构造函数已经进行了参数的初始化,而C版本必须调用MakeGdiplusStartupInput函数进行input参数的初始化,为了减少麻烦,我另写了2个没有参数的函数Gdiplus_Startup和Gdiplus_Shutdown替代。
三、同GDI+的C++版本一样,使用C版本的应用程序也必须包含Gdiplus的静态连接库Gdiplus.lib。注意:不同的C编译器,其Gdiplus.lib是不同的,如VS就不能使用BCB提供的(或者制作的)静态库,反过来也一样。
四、GDI+ C版本写成后,使用VS2005和BCB6和BCB2010作了一些主要的应用测试,这些测试代码我会放到我的BLOG上,可作为参考,请随时注意我的BLOG文章,我的BLOG地址为http://blog.csdn.net/maozefa

下面是一个简单的C语言Windows程序框架代码,以后写的GDI+测试代码都使用这个框架:

下面是用GDI+函数显示图像的简单例子:

下面是BCB2010运行效果图:

运行效果图
五、使用过程中,如有错误,或者你有好的建议,请发送邮件到我的信箱:mao.maozefa@gmail.commaozefa@hotmail.com

GDI+ C语言版本同时GDI+ for VCL版本2010.7.10修改版下载地址:http://download.csdn.net/source/2737743

分享到:
评论

相关推荐

    3天掌握Windows GDI+图形编程

    出于兼容性考虑,Windows XP仍然支持以前版本的GDI,但是在开发新应用程序的时候,开发人员为了满足图形输出需要应该使用GDI+,因为GDI+对以前的Windows版本中GDI进行了优化,并添加了许多新功能: 支持渐变的画刷、...

    C语言控制台应用程序GDI绘制正弦曲线

    出于本科教学的目的,需要使用C语言在Visual Studio下控制台应用程序中动态绘制曲线,在此查阅了一些资料,制作了一个绘制动态正弦曲线的Demo,大家可根据这个例子查阅GDI、GDI+手册,根据需求丰富自己的绘图程序。...

    windows 程序设计

    Windows 3.0在保护模式下,允许Windows应用程序存取高达16MB的扩展内存。Windows NT和Windows 98通过成熟的32位操作系统及平坦寻址空间,摆脱了这些旧的限制。 Windows上执行的程序可共享在称为「动态链接库」的...

    windows 程序设计中文版

    10.1.1 向程序添加图标 10.1.2 获得图标的句柄 10.1.3 在应用程序中使用图标 10.1.4 使用自定义鼠标指针 10.1.5 字符串资源 10.1.6 自定义资源 10.2 菜单 10.2.1 和菜单有关的概念 10.2.2 菜单结构 10.2.3 定义菜单 ...

    windows编程入门教程

    第3章 Windows应用程序 第4章 Windows的GDI及Windows绘图(1)(2) 第5章 文本的输出方法与字体的设置 第6章 Windows应用程序对键盘与鼠标的响应 第8章 MFC基础知识 第9章 标准控件在可视化编程中的应用(1) 第9章...

    《windows程序设计(C语言版)》第5章

    图形设备接口(GDI:Graphics Device Interface)是Windows的子系统,...不只您为Windows编写的应用系统在显示视觉信息时使用GDI,就连Windows本身也使用GDI来显示使用者接口对象,诸如菜单、滚动条、图标和鼠标光标。

    77G 22套C语言 C++ 数据结构 程序设计视频课程合集 C丨C++相关学习视频全套视频教程

    在窗口中显示按钮.mp4 085.MFC_InnoSetup.mp4 C语言高级教程 - 指针和结构体 01.PonC_指针-1.mp4 02.PonC_指针-2.mp4 03.PonC_指针实例.mp4 04.PonC_指针运算.mp4 05.PonC_指针和函数.mp4 06.dk2j_cpp_...

    车牌识别程序

    应用程序生成--》打开--》CDipView的OnFileOpen 函数--》 调用CDipDoc的FileOpen 函数--》并使用myDoc->UpdateAllViews(NULL); 刷新 自动调用CDipView的OnPaint函数--》调用CDipView的OnDraw函数----一个像素点一...

    C语言大作业界面编程-2D动画演示.doc

    本次大作业是在高级编程技术中的Windows界面编程的SDK编程框架下的软件开发编程。 主要是应用了GDI图形编程,通过将图像按帧输入,利用人眼的视觉暂留作用来输出动画,并利用动画做出一个2D游戏的Demo,并且编写了...

    计算机应用模型机研制技术

    6.4 如何在程序中使用各资源 6.4.1 使用菜单与加速键 6.4.2 使用图标和光标 6.4.3 位图及对话框 6.4.4 子窗口控件字符串资源 6.5 图形设备接口( GDI) 6.5.1 什么是图形设备接口( GDI) 6.5.2 刷新客户区 6.5.3 设备...

    wxPython 是一个用于 wxWidgets (用C ++编写)的Python包装器,这是一个流行的跨平台GUI工具包

    控制模块包含GUI应用程序开发中使用的所有小部件。例如,wx.Button,wx.StaticText(类似于标签),wx.TextCtrl(可编辑文本控件)等。wxPython API具有GDI(图形设备接口)模块。它是一组用于绘制小部件的类。像...

    Visual C++ 6.0编程实例详解.part2

    3.2 创建简单的Windows应用程序 3.3 AppWizard——生成结果 3.3.1 分类 3.3.2 传递和接收 3.3.3 处理 3.4 实例 第4章 对话框及控件 4.1 对话框 4.1.1 组成与分类 4.1.2 CDiaiog类 4.1.3 ...

    Visual C++ 6.0编程实例详解.part1

    3.2 创建简单的Windows应用程序 3.3 AppWizard——生成结果 3.3.1 分类 3.3.2 传递和接收 3.3.3 处理 3.4 实例 第4章 对话框及控件 4.1 对话框 4.1.1 组成与分类 4.1.2 CDiaiog类 4.1.3 ...

    皮肤控件研究文档,破解后的库文件,皮肤设计工具使用教程

    界面控件类产品对应用程序的影响应该越小越好,要易于在现有应用程序中整合。这要求API简洁,同时也要求界面库易扩 展,兼容性强。 开发人员能否及时掌握并使用。 3.2 产品稳定性 界面库产品当前的稳定性当然是...

Global site tag (gtag.js) - Google Analytics