如何在VC中使用GDI+

VC2019 使用GDI+ 显示PNG图片 新建一个单文档工程; 添加一个菜单;在视类中处理此菜单; 视类CPP文件添加: #include "gdiplus.h" 视类.h文件添加成员: ULONG_PTR m_gdiplusToken; 视类.h文件头部添加: #pragma comment(lib,"gdiplus.lib") 这是载入GDI+的库; gdiplus.h,在 外部依赖项... 阅读详情

GDI+可应用于二维向量图象,栅格图象及排版,是为C/C++程序员而设计的表现为C++类而存在的接口,能用于一切基于Windows的应用中。作为GDI的后继者,GDI在GDI中增加了新功能,如文本的反锯齿,渐变笔刷,Alpha溶合;也优化了GDI许多已有的功能。此外,GDI+改变了编程模式,使其更灵活及易用。

GDI+并不限于在.Net中存在,实际上它由Windows XP或Windows Server 2003操作系统提供。它被打包在一个名为GdiPlus.dll的文件中。此文件位于C:/Windows/WinSxS下的相应文件夹下。以笔者的XP系统为例,共有2个版本,其相应的文件夹分别是:

x86_Microsoft.Windows.GdiPlus_6595b64144ccf1df_1.0.0.0_x-ww_8d353f13
x86_Microsoft.Windows.GdiPlus_6595b64144ccf1df_1.0.2600.2180_x-ww_522f9f82

在应用程序中,我们不需指定版本号,系统自动选择最新的版本。先假设我们已经在VC6中编好一个GDI+应用,在degbug版本中单击菜单Build->Start Debug->Go启动调试,再终止应用,在VC6的Output区域中可以看到以下信息:
Loaded ''C:/WINDOWS/WinSxS/x86_Microsoft.Windows.GdiPlus_6595b64144ccf1df_1.0.2600.2180_x-ww_522f9f82/GdiPlus.dll''
说明系统自动选择了最新的版本。

如同Windows是用C语言编写,GdiPlus.dll是以C函数实现的,并没有封装为C++类,从而给非C程序员带来不便。又如同MFC所为,微软再次将这些C函数打包为C++类的形式,向C++程序员提供了以GdiPlus.h领头的30个头文件及一个GdiPlus.lib。因此,如果您是C程序员,则只需GdiPlus.dll就行了;C++程序员则还需要找到GdiPlus.h等头文件及GdiPlus.lib文件。

Windows XP或Windows Server 2003应使用系统自带的GdiPlus.dll,以免与系统服务冲突。而对于版本低于Windows XP的Windows,如Windows NT 4.0 SP6, Windows 2000, Windows98及Windows Me,则需要此文件。可到微软的官方地址去下载分发包gdiplus_dnld.exe文件,地址为:
http://www.microsoft.com/downloads/details.aspx?FamilyID=6a63ab9c-df12-4d41-933c-be590feaa05a&DisplayLang=en

该文件是一个自解压的文件,应将其解压到应用程序的目录下,但不要安装在系统目录中。

C++程序员还应去找GdiPlus.h及GdiPlus.lib。以下地址所提供的名为gdiplus.zip的文件就包括了这些文件:
http://www.crazy-bit.com/download/gdiplus.zip

而以下的地址则提供了一站式的所有资源,即包含了GdiPlus.h等头文件, GdiPlus.lib及GdiPlus.dll:
http://www.codersource.net/samples/mfcgdiplus.zip

根据解压的不同方式,有不同的引用方法。

第一种方法是直接引用,需要将gdiplus.h, gdiplus.lib分别拷贝至VC相应的include及lib目录下。这两个目录可通过VC6的Toos->Options->Directories标签页中,在Show directories for下拉列表框中分别选择Include files及Library files查询到。如Include,一般包括3个路径:VC98/INCLUDE, VC98/MFC/INCLUDE及VC98/ATL/INCLUDE,分别对应非MFC应用,MFC应用及ATL应用所用的不同路径。

然后在StdAfx.h中加入如下的语句:

#define ULONG_PTR ULONG
#include <gdiplus.h>
using namespace Gdiplus;
#pragma comment(lib, "gdiplus.lib")

GdiPlusInit.h中使用了ULONG_PTR的数据类型,但此类型在VC6中没有定义。因此必须在#include语句之前先进行定义。#pragma comment(lib, "gdiplus.lib")指示在连接时在应用所在目录或系统LIB目录下查找gdiplus.lib。

第二种方法是将其解压到任意一个文件夹,然后在StdAfx.h中明确指明具体路径。

#define ULONG_PTR ULONG
#include "C:/gdiplus/Include/gdiplus.h"
using namespace Gdiplus;
#pragma comment(lib, "C:/gdiplus/lib/gdiplus.lib")

除了用以上的方法连接gdiplus.lib之外,还可以在Project->Settings->Link->Object/library modules中输入gdiplus.lib(若有多个库,可用空格隔开,但GDI+只有一个库)。这种方法,可不用在StdAfx.h中输入#pragma comment。

在使用GDI+之前,您必须通过GdiplusStartup()启动GDI+,而在使用完毕后,调用GdiplusShutdown()来清理现场。 根据MFC的特点,应相应地放在XXXApp类的InitInstance()及ExitInstance()中。

先为XXXApp类添加两私有成员变量:
private:
 GdiplusStartupInput gdiplusStartupInput;
 ULONG_PTR gdiplusToken;

然后在InitInstance()中,在调用m_pMainWnd->ShowWindow()及m_pMainWnd->UpdateWindow()之前调用GdiplusStartup():

 GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

 // The one and only window has been initialized, so show and update it.
 m_pMainWnd->ShowWindow(SW_SHOW);
 m_pMainWnd->UpdateWindow();
 return TRUE;

注意,如果GdiplusStartup()放在ShowWindow()及UpdateWindow()之后,则当窗口第一次显示时,由于GDI+还未启动,GDI+所画的图形不会显示出来,直到第二个WM_PAINT的消息传到。

而在ExitInstance()中,如下编写代码:

 GdiplusShutdown(gdiplusToken);
 return CWinApp::ExitInstance();

现在,GDI+已经准备完毕,可以使用了。

在XXXView类的OnDraw()方法中:

 Graphics graphics(pDC->m_hDC);
 
 Pen pen(Color(50, 255, 0, 255), 15);
 pen.SetDashStyle(DashStyleDash);
 pen.SetStartCap(LineCapRoundAnchor);
 pen.SetEndCap(LineCapArrowAnchor);
 
 graphics.DrawLine(&pen, 20, 20, 300, 100);
 graphics.DrawLine(&pen, 300, 100, 600, 100);

先使用OnDraw()方法的参数pDC的成员变量m_hDC在堆上构造一个Graphics的实例graphics,创建一个Pen并进行设置,然后通过graphics的DrawLine()方法画出直线来。

与GDI相比较,GDI+不必将Pen, Brush等对象选进DC再画图,而是通过使用DC的句柄来创建一个Graphics实例,之后,直接使用此实例来进行画图。这种风格,确实大大方便了编程人员。

至此,我们可以在VC6 MFC中使用GDI+描绘美好的未来了。:)

GDIGDI+.rar MFC中使用GDI与GDI+ 立即下载

相关推荐

Microsoft GDI+ 库

完整的GDI+库,VC6可以正常使用! 关于配置看 http://blog.csdn.net/bllqbz/archive/2010/05/08/5569637.aspx

GDI+ for VC6 MFC

五年前,笔者曾在C#中使用GDI+开发程序,对其颇有好感。这一段时间,在使用VC6作图时,深切感会到使用GDI的种种不便,不比GDI+好用。沉迷于VC6的高效与轻便,不想只为了一个GDI+而被迫安装沉甸甸的.Net,便产生了一个疑问,难道GDI+只能用于.Net中吗?访问微软的MSDN网站后,随即解开了此谜。于是便有了此文 – 如何在VC6 MFC中使用GDI+。GDI+可应用于二维向量图

Sarkuya的编程园地 6457

IGDIPlus(Delphi GDI+库).zip

IGDIPlus(Delphi GDI+库).zip\完整的库文件,欢迎下载

GDI+入门(总结)

大部分是参照其它资料,然后加以自己的理解,那是什么,总结。算不得什么教程。。。。。。。汗,自己看着就行了。。如果别人能看那就更好了。 首先下载GDI+文件包,一个动态链接库,使用GDI+就是调用那个动态链接库里的函数。类似画图什么的,了解这个主要是想把bmp图片转换成jpg的,然后做个简单屏幕监控,几个月前尝试做了一下,差不多是半分钟才传过来一张图片。知识有限,没办法,那时候,也没怎么上心,

JackWoo的专栏 3万+

GdiPlus_1.1.zip

GDIPlus1.1 for Delphi

01 底盘制动产品之轮速传感器

轮速传感器是用来测量汽车车轮转速的传感器。对于现代汽车而言,轮速信息是必不可少的,汽车动态控制系统(VDC)、汽车电子稳定程序(ESP)、防抱死制动系统(ABS)、自动变速器的控制系统等都需要轮速信息。

汽车软件工程师 | 好奇博主 | 处女座 4659

如何在VC中使用GDI+。

GDI+可应用于二维向量图象,栅格图象及排版,是为C/C++程序员而设计的表现为C++类而存在的接口,能用于一切基于Windows的应用中。作为GDI的后继者,GDI+在GDI中增加了新功能,如文本的反锯齿,渐变笔刷,Alpha溶合;也优化了GDI许多已有的功能。此外,GDI+改变了编程模式,使其更灵活及易用。GDI+并不限于在.Net中存在,实际上它由Windows XP或Windows S

刘胜的专栏 2万+

ZYNQ:【1】深入理解PS端的TTC定时器(Part1:原理+官方案例讲解)

基于UG585详细讲解其中TTC的原理和使用案例。

Alex的技术博客 7888

在VC6 0中使用GDI+的两种办法

在VC6 0中使用GDI+的两种办法

gdruhv的博客 726

Java:使用Java调用打印机进行打印(JPG、PDF和Word三种文件格式)

目录 一、Java的打印简介 二、Java打印实现 2.1 JPG图片文件格式打印实现 2.2 PDF文件格式打印实现 2.3 Word文件格式打印实现 2.3.1 Word文件采用jacob插件进行打印实现。 2.3.2 先将word转化为pdf文件,然后打印pdf(lz使用) 三、总结 一、Java的打印简介 在我们的实际工作中,经常需要实现打印功能。但由于历史原因,Jav...

vatxiongxiaohui的专栏 8万+

app逆向分析案例-95分

先把justtrusmeplus打开设置好95分,开始抓包,得到结果为: https://www.95fenapp.com/api_goods/list/v3.0?is_all=1&keywords=%E7%A7%91%E6%AF%94& page=1&page_size=20 &publish_timestamp=0 &scene=2&scene_type=95fen_android_search_personal&sn=SearchList

weixin_41763171的博客 2742

vc里使用GDI+

GDI+是什么?GDI+ 是面向 C/C++ 程序员的基于类的应用程序编程接口 (API)。它使应用程序可以将图形和格式化文本同时用于视频显示和打印机。GDI+ 代表应用程序与设备驱动程序进行交互。GDI+ 还支持 64 位 Windows 操作系统。vc6中如何安装?一种方式是

Augusdi的专栏 1872

ANPC三电平拓扑:两种调制方式解析

ANPC结构是基于“I”型NPC结构(下面讲NPC如不特殊说明,均指的是“I”型结构NPC)发展出来的一种改进型。我们在讲NPC结构的时候会谈到他的一个缺点就是损耗分布不均匀,会导致温升不均衡,进而限制模块的功率输出能力。而ANPC结构由于多了两个开关管以及相应的两个中性点换流回路(如下图),可以更加灵活任意的配置开关管可以使损耗没有那么的不均衡,从而能一定程度上提高模块的输出功率。ANPC拓扑结构图以及增加的环流回路。

IOTBOT的博客 9487

VC6中如何使用GDI+

GDI+是什么? GDI+ 是面向 C/C++ 程序员的基于类的应用程序编程接口 (API)。它使应用程序可以将图形和格式化文本同时用于视频显示和打印机。GDI+ 代表应用程序与设备驱动程序进行交互。GDI+ 还支持 64 位 Windows 操作系统。 vc6中如何安装?一种方式是安装.net platform sdk,里面就会包含GDI+的相关库文件和头文件若是不想为了GDI+就安装.NE...

weixin_30446613的博客 99

AutoGenTestCase - AI大模型生成测试用例

AI技术助力高效软件测试:AutoGenTestCase工具介绍 传统手工测试存在效率低、覆盖不全等痛点。AutoGenTestCase工具集成DeepSeek、通义千问等AI大模型,能快速解析需求并自动生成标准化测试用例,将数小时工作缩短至分钟级。该工具部署简单,仅需配置APIKey即可运行,支持多种测试用例类型比例设置,并输出Markdown和Excel格式的测试用例。通过GitHub或网盘下载后,用户可按照教程完成APIKey配置、需求文档上传和用例生成等操作,显著提升测试效率与覆盖完整性。

YIqifeibaQI的博客 349

海思MPP平台千兆以太网驱动集成与测试指南

千兆以太网(GE)是嵌入式视觉系统中音视频流传输与边缘控制的核心物理接口,其底层驱动需兼顾DMA高效调度、中断实时响应与PHY链路稳定性。在Linux嵌入式环境中,GE驱动通常基于net_device框架实现,并深度耦合于SoC专用媒体处理平台(如海思MPP),通过硬件抽象层(HAL)屏蔽寄存器操作,提供零拷贝、RGMII时序适配、描述符环管理等关键能力。技术价值体现在降低CPU负载、保障1080p@30fps实时推流、支持ONVIF/RTSP协议交互及固件远程升级。典型应用场景包括网络摄像机(IPC)、A

weixin_42599908的博客 90

VC中使用GDI+显示图片

1.在你将要使用GDI+的工程中,完成初始化工作,将以下代码加入StdAfx.h头文件中: //加入的头文件 #include //初始化一下com口 #ifndef ULONG_PTR #define ULONG_PTR unsigned long* #include "GdiPlus.h" using namespace Gdiplus; #endif #pragma comment(lib,"gdiplus.lib") 2.在程序初始化部分加入 //gdi

Joe_wang的专栏 6485

基于FPGA的多级CIC滤波器实现四倍插值

基于FPGA的多级CIC滤波器实现四倍插值 原文链接:基于FPGA的多级CIC滤波器实现四倍插值 在《基于FPGA的多级CIC滤波器实现四倍抽取一》和《基于FPGA的多级CIC滤波器实现四倍抽取二》中我们先来了解滑动平均滤波器、微分器、积分器以及梳状滤波器原理以及它们的幅频响应。此篇我们将用verilog实现基于FPGA的多级CIC滤波器实现四倍插值。 1 CIC滤波器的基本概述 CIC(积分梳状...

baidu_34971492的博客 3142

在VC 中使用GDI+[转]

请问怎样在VC6中使用GDI+,很急!! 请说明要用到什么库文件,头文件,谢谢!在 头文件 stdafx.h 添加如下的代码#define ULONG_PTR unsigned long#include using namespace Gdiplus;在 CWinApp 派生出来的 你自己的 C×App 的头文件 添加ULONG_PTRgdi

Gary's Blog --- A C++ programmer 1630

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

在VC6.0中使用GDI+的两种办法

                                                                                      朱金灿       GDI+是GDI的升级版本。在VC6.0中并没有配备GDI+的相关文件。那么如何在VC6.0使用GDI+呢?我从网上搜索了一些资料,并结合自己的使用,总结出一下两种方法。下面我各建一个MFC工程介

clever101的专栏 9343

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

在VC6.0中使用GDI+

在VC6.0中使用GDI+        GDI+在原来GDI的基础上进行了许多的升级和优化,比如线条平滑、颜色透明度、图形变换(平移、缩放、旋转),更多图片格式支持等技术都进行了很大的改善,使用GDI+可以很方便的实现对各种图形的绘制和优化。GDI+属于.NET组合,不过VC6.0的朋友也可以很方面地使用它,在VC6.0和工程中使用GDI+的流程如下:       1.安装GDI+组件。对于

jia_xiaoxin的专栏 895

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

如何在VC6及其以上版本中使用GDI+

今天兴致比较高昂,虽然已经是23点了,所以还是决定再写一篇,供各位技术同仁参考。最近由于学习C#,对于里面的GDI+绘图的强大功能不得不刮目相看,当然就想将其用在我最熟悉的VC++语言中来。但是VC6却并不包含GDI+包,所以还得必须自己去微软网站上下载开发包。对于VC2005来说,就不必了,因为已经包含。下面首先谈谈如何在VC6中使用GDI+,步骤总结如下: 1、将开发包中的in

Benkong2008的专栏 833

VC中使用Gdi+合并jpg图片

VC中使用Gdi+合并jpg图片合并两张jpg图片为一张jpg图片,思路是先把两张图片jpg图片都转化成bmp图片,然后把两张bmp图片合并成一张bmp图片,然后是把这张bmp图片转化为jpg图片。一。jpg,bmp互相转化/*********************************format:bmp转为jpg, format为image/jpeg,jpg转为bmp,format为ima

2421

VC6使用GDI+

GDI+图形函数,一个组在.net环境下提供的以取代GDI图形函数的类,将来会逐渐取代GDI图形函数. 如果在vc6.0中使用gdi+图形函数,那么请按以下步骤操作: 1.下载GDIPlus.rar(下载地址:http://download.csdn.net/detail/whatday/4296203)将其中的Includes和Lib中的文件拷到vc目录下的Includes和Lib文

whatday的专栏 4057

如何在vc的开发中使用GDI+?

这篇文章介绍VC6下如何使用GDI+开发。1. 下载GDI+开发包,微软的网站可以下载到。大家找不到的话,可以在http://alantop.5166.info下载。或者找我索取均可。2. 在VC中的include files 和 library files设置,并保证程序工作目录下有gdiplus.dll3. 在stdafx.h中包含文件的最下面键入如下代码#ifndef ULONG...

cpongo5 201
上一篇: 开源界面库
下一篇: CDialogBar(对话条)和CReBar(伸缩条)的编程
sun51sun
博客等级 码龄18年 2粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值