2009-02-06 3 views
3

J'utilise la classe GDI + Bitmap pour convertir un IStream en HBITMAP. J'ai inclus le fichier gliplus lib dans les entrées du Linker et ai aussi la DLL dans le chemin de compilation. Mais en utilisant l'instructionUtilisation de GDI + Bitmap

Bitmap bm(lpStream,FALSE); 

me donne une erreur C2065: 'Bitmap': identificateur non déclaré

Quelqu'un peut-il s'il vous plaît me dire ce que je fais mal ici.

Merci.

Modifier
J'ai déjà inclus les en-têtes appropriés dans ma mise en œuvre (Gdiplus.h) Et je peux voir la définition de Bitmap en sélectionnant l'option « Aller à la définition » dans le menu contextuel.

Répondre

2

Vous devez également inclure le fichier d'en-tête correspondant. En supposant, il aurait probablement un nom comme "Bitmap.h" ou "gdi + .h". Il existe d'autres détails sur le Bitmap class here. Le fichier d'en-tête correct est "gdiplus.h". En bref:

#include "gdiplus.h" 

Constructor Information 
Stock Implementation gdiplus.dll 
Header Declared in Gdiplusheaders.h, include gdiplus.h 
Import library gdiplus.lib 
Minimum availability GDI+ 1.0 
Minimum operating systems Windows 98/Me, Windows XP, Windows 2000, 

Windows NT 4.0 SP6

Dans le tableau de MSDN, où il est dit "En-tête", cela vous indique le nom du fichier d'en-tête que vous devez comprendre. La "bibliothèque d'importation" que vous avez déjà couverte. Si vous l'aviez manqué, vous auriez eu une erreur de lien.

EDIT: In this article on getting started with GDI+, il semble qu'il existe un espace de noms "Gdiplus" que vous devez spécifier. Utilisez "using namespace Gdiplus" ou spécifiez explicitement l'espace de noms.

#include <windows.h> 
#include <gdiplus.h> 
using namespace Gdiplus; 

VOID OnPaint(HDC hdc) 
{ 
    Graphics graphics(hdc); 
    Pen  pen(Color(255, 0, 0, 255)); 
    graphics.DrawLine(&pen, 0, 0, 200, 100); 
} 
+0

Salut. J'ai déjà inclus gdiplus.h dans la classe. Visual Studio ouvre également la définition de la classe, donc je sais que les en-têtes sont reconnus. Mais il ne compile toujours pas. – lostInTransit

+0

L'avez-vous inclus dans votre fichier source ou dans le fichier d'en-tête précompilé (stdafx.h)? Si ce dernier, vous devrez reconstruire l'en-tête précompilé. –

+0

J'ai fait les deux pour être du côté plus sûr. et j'ai fait une construction propre – lostInTransit

3

En plus de la question de l'espace de noms, en utilisant Gdiplus exige également que la bibliothèque est initialisé avant qu'il ne soit utilisé:

ULONG_PTR gdiplusToken; 
GdiplusStartupInput startupInput; 
GdiplusStartup(&gdiplusToken, &startupInput, 0); 

Vous devrez tenir le jeton jusqu'à ce que vous avez fini d'utiliser Gdiplus , puis relâchez-le:

GdiplusShutdown(gdiplusToken); 

Si la bibliothèque n'est pas initialisé, les opérations GDIplus échouera avec l'erreur GdiplusNotInitialized.

Questions connexes