GdiplusStartup函数

原创 2012年03月29日 14:37:14

GdiplusStartup function

3 out of 4 rated this helpful Rate this topic

Applies to: desktop apps only

The GdiplusStartup function initializes Windows GDI+. Call GdiplusStartup before making any other GDI+ calls, and call GdiplusShutdown when you have finished using GDI+.

函数用来初始化windows gdi+。在调用任何gdi+的函数之前,要先调用GdiplusStartup 

在用完之后,需要调用GdiplusShutdown 。

Syntax

Status GdiplusStartup(
  __out  ULONG_PTR token *token,
  __in   const GdiplusStartupInput *input,
  __out  GdiplusStartupOutput *output
);

Parameters

token [out]

Type: ULONG_PTR token*

Pointer to a ULONG_PTR that receives a token. Pass the token to GdiplusShutdown when you have finished using GDI+.

input [in]

Type: const GdiplusStartupInput*

Pointer to a GdiplusStartupInput structure that contains the GDI+ version, a pointer to a debug callback function, a Boolean value that specifies whether to suppress the background thread, and a Boolean value that specifies whether to suppress external image codecs.

output [out]

Type: GdiplusStartupOutput*

Pointer to a GdiplusStartupOutput structure that receives a pointer to a notification hook function and a pointer to a notification unhook function. If the SuppressBackgroundThread data member of the inputparameter is FALSE, then this parameter can be NULL.

Return value

Type:

Type: Status

If the function succeeds, it returns Ok, which is an element of the Status enumeration.

If the function fails, it returns one of the other elements of the Status enumeration.

Remarks

You must call GdiplusStartup before you create any GDI+ objects, and you must delete all of your GDI+ objects (or have them go out of scope) before you call GdiplusShutdown.

在调用gdiplusshutdown之前,一定要销毁gdi+的对象。这里的先后顺序很重要!! 这点是比较容易犯错误的。

很多时候我们在析构函数里销毁对象,对于全局的对象,析构函数的调用时间是在程序退出点,如果你在这之前就调用了gdiplusshutdown,那么你的程序

很容易在析构函数退出的时候报内存错误。

原因是应为gdi+的对象的内存是由他自己的堆来管理的。gdi对象的new和delete操作符都被重载过。


解决方法:

You can call GdiplusStartup on one thread and call GdiplusShutdown on another thread as long as you delete all of your GDI+ objects (or have them go out of scope) before you call GdiplusShutdown.

Do not call GdiplusStartup or GdiplusShutdown in DllMain or in any function that is called by DllMain. If you want to create a DLL that uses GDI+, you should use one of the following techniques to initialize GDI+:

  • Require your clients to call GdiplusStartup before they call the functions in your DLL and to callGdiplusShutdown when they have finished using your DLL.
  • Export your own startup function that calls GdiplusStartup and your own shutdown function that callsGdiplusShutdown. Require your clients to call your startup function before they call other functions in your DLL and to call your shutdown function when they have finished using your DLL.
  • Call GdiplusStartup and GdiplusShutdown in each of your functions that make GDI+ calls.

Warning  For info about how to use dynamic data exchange (DDE) with GDI+, see Special CWinApp Services.


Examples

For an example of calling GdiplusStartup and GdiplusShutdown in a Windows application, see Getting Started.

The following console application uses a GDI+Image object to retrieve the width and height of a JPEG image. The code calls GdiplusStartup before creating the Image object and calls GdiplusShutdown before terminating. Note that the Image object is deleted before the call to GdiplusShutdown.

In the following code, the variable gdiplusStartupInput is initialized by the default constructor of theGdiplusStartupInput structure. The default constructor sets the data members of the structure to the following values:

  • GdiplusVersion = 1
  • DebugEventCallback = NULL
  • SuppressBackgroundThread = FALSE
  • SuppressExternalCodecs = FALSE
#include <windows.h>
#include <gdiplus.h>
#include <stdio.h>
using namespace Gdiplus;

INT main()
{
   GdiplusStartupInput gdiplusStartupInput;
   ULONG_PTR gdiplusToken;
   GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

   Image* image = new Image(L"FakePhoto.jpg");
   printf("The width of the image is %u.\n", image->GetWidth());
   printf("The height of the image is %u.\n", image->GetHeight()); 

   delete image;
   GdiplusShutdown(gdiplusToken);
   return 0;
}

GdiplusStartup API函数的介绍

GdiplusStartup(token, input, output) The GdiplusStartup 作用是初始化GDI+函数库. CallGdiplusStartup before ma...
  • chenyujing1234
  • chenyujing1234
  • 2012年05月12日 22:38
  • 7821

GdiPlus使用方法

GDI是Graphics Device Interface的缩写,含义是图形设备接口,它的主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出。 在Windows操作系统下...
  • bingdianlanxin
  • bingdianlanxin
  • 2015年08月13日 14:20
  • 5921

GdiplusStartupInput 结构

GdiplusStartupInput 结构该结构持有GdiplusStartup函数所需要使用的一组参数.Syntaxstruct GdiplusStartupInput{ UINT32 Gd...
  • thanklife
  • thanklife
  • 2010年06月30日 10:44
  • 2322

VC++ GDI开发包

  • 2010年12月02日 16:10
  • 913KB
  • 下载

关于Gdi+和GdiplusStartup

GDI+实际上是一组类的定义,封装了gdi+的几乎所有API,当然使用方法就要从这些“例子”里边寻找了:)本文正是尝试用GDI+写一个纯SDK的程序,语言自然是我最喜欢的语言WIN32ASM.这个程序...
  • ccx_john
  • ccx_john
  • 2013年09月29日 10:24
  • 710

error LNK2019: 无法解析的外部符号 _GdiplusStartup@12

转自VC错误:http://www.vcerror.com/?p=1903 问题描述: error LNK2019: 无法解析的外部符号 _GdiplusStartup@12,该符号在函数 "...
  • swanabin
  • swanabin
  • 2015年07月25日 16:54
  • 1302

GdiplusStartupInput

The GdiplusStartupInput structure holds a block of arguments that are required by the GdiplusStartup...
  • slx0932
  • slx0932
  • 2009年12月18日 10:52
  • 430

error C3861: “GdiplusStartup”: 找不到标识符

转自VC错误:http://www.vcerror.com/?p=1901 问题描述: error C2146: 语法错误 : 缺少“;”(在标识符“m_gdiplusStartupInput...
  • swanabin
  • swanabin
  • 2015年07月25日 16:49
  • 1335

GDIplus的初次接触--加载并显示常用格式图片

在没有接触Gdiplus之前,在vc中绘制图片,通常加载一张位图,然后进行贴图。对于现在多种多样的图片格式,之前的GDI并不支持(应该是这样的,呵呵)。而使用Gdiplus则可以选择多种图片格式,比如...
  • s634772208
  • s634772208
  • 2015年06月01日 09:56
  • 5761

GdiPlus使用方法

GDI是Graphics Device Interface的缩写,含义是图形设备接口,它的主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出。 在Windows操作系统下...
  • bingdianlanxin
  • bingdianlanxin
  • 2015年08月13日 14:20
  • 5921
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:GdiplusStartup函数
举报原因:
原因补充:

(最多只允许输入30个字)