API plate GDI+
Windows GDI+ expose une API plate qui se compose d’environ 600 fonctions, qui sont implémentées dans Gdiplus.dll et déclarées dans Gdiplusflat. h. les fonctions de l’API plate GDI+ sont encapsulées par une collection d’environ 40 classes C++. Il est recommandé de ne pas appeler directement les fonctions dans l’API plate. chaque fois que vous effectuez des appels à GDI+, vous devez le faire en appelant les méthodes et les fonctions fournies par les wrappers C++. Les services de support technique Microsoft ne fournissent pas de prise en charge du code qui appelle l’API plate directement.
comme alternative aux wrappers C++, Microsoft .NET Framework fournit un ensemble de classes wrapper de code managé pour GDI+. les wrappers de code managé pour GDI+ appartiennent aux espaces de noms suivants.
Les deux jeux de wrappers (C++ et code managé) utilisent une approche orientée objet. il existe donc des différences entre la façon dont les paramètres sont passés aux méthodes Wrapper et la façon dont les paramètres sont passés aux fonctions dans l’API plate. Par exemple, l’un des wrappers C++ est la classe Matrix . Chaque objet Matrix a un champ, nativeMatrix, qui pointe vers une variable interne de type GpMatrix. lorsque vous transmettez des paramètres à une méthode d’un objet Matrix , cette méthode passe ces paramètres (ou un ensemble de paramètres connexes) à l’une des fonctions de l’API plate GDI+. Toutefois, cette méthode transmet également le champ nativeMatrix (en tant que paramètre d’entrée) à la fonction d’API plate. Le code suivant montre comment la méthode Matrix :: Shear appelle la fonction GdipShearMatrix (GPMATRIX * Matrix, Real shearX, Real cisaillement, GpMatrixOrder Order) .
Status Shear(
IN REAL shearX,
IN REAL shearY,
IN MatrixOrder order = MatrixOrderPrepend)
{
...
GdipShearMatrix(nativeMatrix, shearX, shearY, order);
...
}
Les constructeurs de matrice passent l’adresse d’une variable de pointeur GpMatrix (en tant que paramètre de sortie) à la fonction GdipCreateMatrix (GpMatrix * * Matrix) . GdipCreateMatrix crée et Initialise une variable GpMatrix interne, puis assigne l’adresse du GpMatrix à la variable pointeur. Le constructeur copie ensuite la valeur du pointeur dans le champ nativeMatrix .
Matrix()
{
GpMatrix *matrix = NULL;
lastResult = DllExports::GdipCreateMatrix(&matrix);
SetNativeMatrix(matrix);
}
VOID SetNativeMatrix(GpMatrix *nativeMatrix)
{
this->nativeMatrix = nativeMatrix;
}
les méthodes de clonage des classes wrapper ne reçoivent pas de paramètres, mais transmettent souvent deux paramètres à la fonction sous-jacente dans l’API plate GDI+. Par exemple, la méthode Matrix :: Clone passe nativeMatrix (comme paramètre d’entrée) et l’adresse d’une variable de pointeur GpMatrix (en tant que paramètre de sortie) à la fonction GdipCloneMatrix . Le code suivant montre comment la méthode Matrix :: Clone appelle la fonction GdipCloneMatrix (GpMatrix * Matrix, GpMatrix * * cloneMatrix) .
Matrix *Clone() const
{
GpMatrix *cloneMatrix = NULL;
...
GdipCloneMatrix(nativeMatrix, &cloneMatrix));
...
return new Matrix(cloneMatrix);
}
Les fonctions de l’API plate retournent une valeur de type GpStatus. L’énumération GpStatus est identique à l’énumération d' État utilisée par les méthodes wrapper. Dans GdiplusGpStubs. h, GpStatus est défini comme suit :
typedef Status GpStatus;
La plupart des méthodes des classes wrapper retournent une valeur d’État qui indique si la méthode a réussi. Toutefois, certaines des méthodes de wrapper retournent des valeurs d’État. quand vous appelez une méthode wrapper qui retourne une valeur d’état, la méthode wrapper passe les paramètres appropriés à la fonction sous-jacente dans l’API plate GDI+. Par exemple, la classe Matrix a une méthode Matrix :: IsInvertible qui transmet le champ nativeMatrix et l’adresse d’une variable bool (en tant que paramètre de sortie) à la fonction GdipIsMatrixInvertible . Le code suivant montre comment la méthode Matrix :: IsInvertible appelle la fonction GdipIsMatrixInvertible (GDIPCONST GPMATRIX * Matrix, bool * result) .
BOOL IsInvertible() const
{
BOOL result = FALSE;
...
GdipIsMatrixInvertible(nativeMatrix, &result);
return result;
}
Un autre des wrappers est la classe Color . Un objet Color contient un champ unique de type ARGB, qui est défini en tant que valeur DWORD. quand vous transmettez un objet Color à l’une des méthodes wrapper, cette méthode passe le champ ARGB à la fonction sous-jacente dans la GDI+ API plate. Le code suivant montre comment la méthode Pen :: setColor appelle la fonction GdipSetPenColor (GPPEN * Pen, ARGB ARVB) . La méthode Color :: GetValue retourne la valeur du champ ARGB .
Status SetColor(IN const Color& color)
{
...
GdipSetPenColor(nativePen, color.GetValue());
}
les rubriques suivantes montrent la relation entre l’API plate GDI+ et les méthodes wrapper C++.
- AdjustableArrowCap, fonctions
- Fonctions bitmap
- Fonctions de pinceau
- CachedBitmap, fonctions
- CustomLineCap, fonctions
- Fonctions de police
- FontFamilyFunctions
- Fonctions Graphics
- GraphicsPath, fonctions
- Fonctions HatchBrush
- Fonctions image
- ImageAttributes, fonctions
- LinearGradientBrush, fonctions
- Fonctions de matrice
- Fonctions de mémoire
- Fonctions de notification
- PathGradientBrush, fonctions
- PathIterator, fonctions
- Fonctions de stylet
- Fonctions de région
- Fonctions SolidBrush
- Fonctions de format de chaîne
- Fonctions de texte
- Fonctions de pinceau de texture