GdiPlusTypes.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:16k
源码类别:

模拟服务器

开发平台:

C/C++

  1. /**************************************************************************
  2. *
  3. * Copyright (c) 1998-2001, Microsoft Corp.  All Rights Reserved.
  4. *
  5. * Module Name:
  6. *
  7. *   GdiplusTypes.h
  8. *
  9. * Abstract:
  10. *
  11. *   GDI+ Types
  12. *
  13. **************************************************************************/
  14. #ifndef _GDIPLUSTYPES_H
  15. #define _GDIPLUSTYPES_H
  16. //--------------------------------------------------------------------------
  17. // Callback functions
  18. //--------------------------------------------------------------------------
  19. extern "C" {
  20. typedef BOOL (CALLBACK * ImageAbort)(VOID *);
  21. typedef ImageAbort DrawImageAbort;
  22. typedef ImageAbort GetThumbnailImageAbort;
  23. }
  24. // Callback for EnumerateMetafile methods.  The parameters are:
  25. //      recordType      WMF, EMF, or EMF+ record type
  26. //      flags           (always 0 for WMF/EMF records)
  27. //      dataSize        size of the record data (in bytes), or 0 if no data
  28. //      data            pointer to the record data, or NULL if no data
  29. //      callbackData    pointer to callbackData, if any
  30. // This method can then call Metafile::PlayRecord to play the
  31. // record that was just enumerated.  If this method  returns
  32. // FALSE, the enumeration process is aborted.  Otherwise, it continues.
  33. extern "C" {
  34. typedef BOOL (CALLBACK * EnumerateMetafileProc)(EmfPlusRecordType,UINT,UINT,const BYTE*,VOID*);
  35. }
  36. //--------------------------------------------------------------------------
  37. // Primitive data types
  38. //
  39. // NOTE:
  40. //  Types already defined in standard header files:
  41. //      INT8
  42. //      UINT8
  43. //      INT16
  44. //      UINT16
  45. //      INT32
  46. //      UINT32
  47. //      INT64
  48. //      UINT64
  49. //
  50. //  Avoid using the following types:
  51. //      LONG - use INT
  52. //      ULONG - use UINT
  53. //      DWORD - use UINT32
  54. //--------------------------------------------------------------------------
  55. typedef float REAL;
  56. #define REAL_MAX            FLT_MAX
  57. #define REAL_MIN            FLT_MIN
  58. #define REAL_TOLERANCE     (FLT_MIN * 100)
  59. #define REAL_EPSILON        1.192092896e-07F        /* FLT_EPSILON */
  60. //--------------------------------------------------------------------------
  61. // Forward declarations of common classes
  62. //--------------------------------------------------------------------------
  63. class Size;
  64. class SizeF;
  65. class Point;
  66. class PointF;
  67. class Rect;
  68. class RectF;
  69. class CharacterRange;
  70. //--------------------------------------------------------------------------
  71. // Status return values from GDI+ methods
  72. //--------------------------------------------------------------------------
  73. enum Status
  74. {
  75.     Ok = 0,
  76.     GenericError = 1,
  77.     InvalidParameter = 2,
  78.     OutOfMemory = 3,
  79.     ObjectBusy = 4,
  80.     InsufficientBuffer = 5,
  81.     NotImplemented = 6,
  82.     Win32Error = 7,
  83.     WrongState = 8,
  84.     Aborted = 9,
  85.     FileNotFound = 10,
  86.     ValueOverflow = 11,
  87.     AccessDenied = 12,
  88.     UnknownImageFormat = 13,
  89.     FontFamilyNotFound = 14,
  90.     FontStyleNotFound = 15,
  91.     NotTrueTypeFont = 16,
  92.     UnsupportedGdiplusVersion = 17,
  93.     GdiplusNotInitialized = 18,
  94.     PropertyNotFound = 19,
  95.     PropertyNotSupported = 20
  96. };
  97. //--------------------------------------------------------------------------
  98. // Represents a dimension in a 2D coordinate system (floating-point coordinates)
  99. //--------------------------------------------------------------------------
  100. class SizeF
  101. {
  102. public:
  103.     SizeF()
  104.     {
  105.         Width = Height = 0.0f;
  106.     }
  107.     SizeF(IN const SizeF& size)
  108.     {
  109.         Width = size.Width;
  110.         Height = size.Height;
  111.     }
  112.     SizeF(IN REAL width,
  113.           IN REAL height)
  114.     {
  115.         Width = width;
  116.         Height = height;
  117.     }
  118.     SizeF operator+(IN const SizeF& sz) const
  119.     {
  120.         return SizeF(Width + sz.Width,
  121.                      Height + sz.Height);
  122.     }
  123.     SizeF operator-(IN const SizeF& sz) const
  124.     {
  125.         return SizeF(Width - sz.Width,
  126.                      Height - sz.Height);
  127.     }
  128.     BOOL Equals(IN const SizeF& sz) const
  129.     {
  130.         return (Width == sz.Width) && (Height == sz.Height);
  131.     }
  132.     BOOL Empty() const
  133.     {
  134.         return (Width == 0.0f && Height == 0.0f);
  135.     }
  136. public:
  137.     REAL Width;
  138.     REAL Height;
  139. };
  140. //--------------------------------------------------------------------------
  141. // Represents a dimension in a 2D coordinate system (integer coordinates)
  142. //--------------------------------------------------------------------------
  143. class Size
  144. {
  145. public:
  146.     Size()
  147.     {
  148.         Width = Height = 0;
  149.     }
  150.     Size(IN const Size& size)
  151.     {
  152.         Width = size.Width;
  153.         Height = size.Height;
  154.     }
  155.     Size(IN INT width,
  156.          IN INT height)
  157.     {
  158.         Width = width;
  159.         Height = height;
  160.     }
  161.     Size operator+(IN const Size& sz) const
  162.     {
  163.         return Size(Width + sz.Width,
  164.                     Height + sz.Height);
  165.     }
  166.     Size operator-(IN const Size& sz) const
  167.     {
  168.         return Size(Width - sz.Width,
  169.                     Height - sz.Height);
  170.     }
  171.     BOOL Equals(IN const Size& sz) const
  172.     {
  173.         return (Width == sz.Width) && (Height == sz.Height);
  174.     }
  175.     BOOL Empty() const
  176.     {
  177.         return (Width == 0 && Height == 0);
  178.     }
  179. public:
  180.     INT Width;
  181.     INT Height;
  182. };
  183. //--------------------------------------------------------------------------
  184. // Represents a location in a 2D coordinate system (floating-point coordinates)
  185. //--------------------------------------------------------------------------
  186. class PointF
  187. {
  188. public:
  189.    PointF()
  190.    {
  191.        X = Y = 0.0f;
  192.    }
  193.    PointF(IN const PointF &point)
  194.    {
  195.        X = point.X;
  196.        Y = point.Y;
  197.    }
  198.    PointF(IN const SizeF &size)
  199.    {
  200.        X = size.Width;
  201.        Y = size.Height;
  202.    }
  203.    PointF(IN REAL x,
  204.           IN REAL y)
  205.    {
  206.        X = x;
  207.        Y = y;
  208.    }
  209.    PointF operator+(IN const PointF& point) const
  210.    {
  211.        return PointF(X + point.X,
  212.                      Y + point.Y);
  213.    }
  214.    PointF operator-(IN const PointF& point) const
  215.    {
  216.        return PointF(X - point.X,
  217.                      Y - point.Y);
  218.    }
  219.    BOOL Equals(IN const PointF& point)
  220.    {
  221.        return (X == point.X) && (Y == point.Y);
  222.    }
  223. public:
  224.     REAL X;
  225.     REAL Y;
  226. };
  227. //--------------------------------------------------------------------------
  228. // Represents a location in a 2D coordinate system (integer coordinates)
  229. //--------------------------------------------------------------------------
  230. class Point
  231. {
  232. public:
  233.    Point()
  234.    {
  235.        X = Y = 0;
  236.    }
  237.    Point(IN const Point &point)
  238.    {
  239.        X = point.X;
  240.        Y = point.Y;
  241.    }
  242.    Point(IN const Size &size)
  243.    {
  244.        X = size.Width;
  245.        Y = size.Height;
  246.    }
  247.    Point(IN INT x,
  248.          IN INT y)
  249.    {
  250.        X = x;
  251.        Y = y;
  252.    }
  253.    Point operator+(IN const Point& point) const
  254.    {
  255.        return Point(X + point.X,
  256.                     Y + point.Y);
  257.    }
  258.    Point operator-(IN const Point& point) const
  259.    {
  260.        return Point(X - point.X,
  261.                     Y - point.Y);
  262.    }
  263.    BOOL Equals(IN const Point& point)
  264.    {
  265.        return (X == point.X) && (Y == point.Y);
  266.    }
  267. public:
  268.     INT X;
  269.     INT Y;
  270. };
  271. //--------------------------------------------------------------------------
  272. // Represents a rectangle in a 2D coordinate system (floating-point coordinates)
  273. //--------------------------------------------------------------------------
  274. class RectF
  275. {
  276. public:
  277.     RectF()
  278.     {
  279.         X = Y = Width = Height = 0.0f;
  280.     }
  281.     RectF(IN REAL x,
  282.           IN REAL y,
  283.           IN REAL width,
  284.           IN REAL height)
  285.     {
  286.         X = x;
  287.         Y = y;
  288.         Width = width;
  289.         Height = height;
  290.     }
  291.     RectF(IN const PointF& location,
  292.           IN const SizeF& size)
  293.     {
  294.         X = location.X;
  295.         Y = location.Y;
  296.         Width = size.Width;
  297.         Height = size.Height;
  298.     }
  299.     RectF* Clone() const
  300.     {
  301.         return new RectF(X, Y, Width, Height);
  302.     }
  303.     VOID GetLocation(OUT PointF* point) const
  304.     {
  305.         point->X = X;
  306.         point->Y = Y;
  307.     }
  308.     VOID GetSize(OUT SizeF* size) const
  309.     {
  310.         size->Width = Width;
  311.         size->Height = Height;
  312.     }
  313.     VOID GetBounds(OUT RectF* rect) const
  314.     {
  315.         rect->X = X;
  316.         rect->Y = Y;
  317.         rect->Width = Width;
  318.         rect->Height = Height;
  319.     }
  320.     REAL GetLeft() const
  321.     {
  322.         return X;
  323.     }
  324.     REAL GetTop() const
  325.     {
  326.         return Y;
  327.     }
  328.     REAL GetRight() const
  329.     {
  330.         return X+Width;
  331.     }
  332.     REAL GetBottom() const
  333.     {
  334.         return Y+Height;
  335.     }
  336.     BOOL IsEmptyArea() const
  337.     {
  338.         return (Width <= REAL_EPSILON) || (Height <= REAL_EPSILON);
  339.     }
  340.     BOOL Equals(IN const RectF & rect) const
  341.     {
  342.         return X == rect.X &&
  343.                Y == rect.Y &&
  344.                Width == rect.Width &&
  345.                Height == rect.Height;
  346.     }
  347.     BOOL Contains(IN REAL x,
  348.                   IN REAL y) const
  349.     {
  350.         return x >= X && x < X+Width &&
  351.                y >= Y && y < Y+Height;
  352.     }
  353.     BOOL Contains(IN const PointF& pt) const
  354.     {
  355.         return Contains(pt.X, pt.Y);
  356.     }
  357.     BOOL Contains(IN const RectF& rect) const
  358.     {
  359.         return (X <= rect.X) && (rect.GetRight() <= GetRight()) &&
  360.                (Y <= rect.Y) && (rect.GetBottom() <= GetBottom());
  361.     }
  362.     VOID Inflate(IN REAL dx,
  363.                  IN REAL dy)
  364.     {
  365.         X -= dx;
  366.         Y -= dy;
  367.         Width += 2*dx;
  368.         Height += 2*dy;
  369.     }
  370.     VOID Inflate(IN const PointF& point)
  371.     {
  372.         Inflate(point.X, point.Y);
  373.     }
  374.     BOOL Intersect(IN const RectF& rect)
  375.     {
  376.         return Intersect(*this, *this, rect);
  377.     }
  378.     static BOOL Intersect(OUT RectF& c,
  379.                           IN const RectF& a,
  380.                           IN const RectF& b)
  381.     {
  382.         REAL right = min(a.GetRight(), b.GetRight());
  383.         REAL bottom = min(a.GetBottom(), b.GetBottom());
  384.         REAL left = max(a.GetLeft(), b.GetLeft());
  385.         REAL top = max(a.GetTop(), b.GetTop());
  386.         c.X = left;
  387.         c.Y = top;
  388.         c.Width = right - left;
  389.         c.Height = bottom - top;
  390.         return !c.IsEmptyArea();
  391.     }
  392.     BOOL IntersectsWith(IN const RectF& rect) const
  393.     {
  394.         return (GetLeft() < rect.GetRight() &&
  395.                 GetTop() < rect.GetBottom() &&
  396.                 GetRight() > rect.GetLeft() &&
  397.                 GetBottom() > rect.GetTop());
  398.     }
  399.     static BOOL Union(OUT RectF& c,
  400.                       IN const RectF& a,
  401.                       IN const RectF& b)
  402.     {
  403.         REAL right = max(a.GetRight(), b.GetRight());
  404.         REAL bottom = max(a.GetBottom(), b.GetBottom());
  405.         REAL left = min(a.GetLeft(), b.GetLeft());
  406.         REAL top = min(a.GetTop(), b.GetTop());
  407.         c.X = left;
  408.         c.Y = top;
  409.         c.Width = right - left;
  410.         c.Height = bottom - top;
  411.         return !c.IsEmptyArea();
  412.     }
  413.     VOID Offset(IN const PointF& point)
  414.     {
  415.         Offset(point.X, point.Y);
  416.     }
  417.     VOID Offset(IN REAL dx,
  418.                 IN REAL dy)
  419.     {
  420.         X += dx;
  421.         Y += dy;
  422.     }
  423. public:
  424.     REAL X;
  425.     REAL Y;
  426.     REAL Width;
  427.     REAL Height;
  428. };
  429. //--------------------------------------------------------------------------
  430. // Represents a rectangle in a 2D coordinate system (integer coordinates)
  431. //--------------------------------------------------------------------------
  432. class Rect
  433. {
  434. public:
  435.     Rect()
  436.     {
  437.         X = Y = Width = Height = 0;
  438.     }
  439.     Rect(IN INT x,
  440.          IN INT y,
  441.          IN INT width,
  442.          IN INT height)
  443.     {
  444.         X = x;
  445.         Y = y;
  446.         Width = width;
  447.         Height = height;
  448.     }
  449.     Rect(IN const Point& location,
  450.          IN const Size& size)
  451.     {
  452.         X = location.X;
  453.         Y = location.Y;
  454.         Width = size.Width;
  455.         Height = size.Height;
  456.     }
  457.     Rect* Clone() const
  458.     {
  459.         return new Rect(X, Y, Width, Height);
  460.     }
  461.     VOID GetLocation(OUT Point* point) const
  462.     {
  463.         point->X = X;
  464.         point->Y = Y;
  465.     }
  466.     VOID GetSize(OUT Size* size) const
  467.     {
  468.         size->Width = Width;
  469.         size->Height = Height;
  470.     }
  471.     VOID GetBounds(OUT Rect* rect) const
  472.     {
  473.         rect->X = X;
  474.         rect->Y = Y;
  475.         rect->Width = Width;
  476.         rect->Height = Height;
  477.     }
  478.     INT GetLeft() const
  479.     {
  480.         return X;
  481.     }
  482.     INT GetTop() const
  483.     {
  484.         return Y;
  485.     }
  486.     INT GetRight() const
  487.     {
  488.         return X+Width;
  489.     }
  490.     INT GetBottom() const
  491.     {
  492.         return Y+Height;
  493.     }
  494.     BOOL IsEmptyArea() const
  495.     {
  496.         return (Width <= 0) || (Height <= 0);
  497.     }
  498.     BOOL Equals(IN const Rect & rect) const
  499.     {
  500.         return X == rect.X &&
  501.                Y == rect.Y &&
  502.                Width == rect.Width &&
  503.                Height == rect.Height;
  504.     }
  505.     BOOL Contains(IN INT x,
  506.                   IN INT y) const
  507.     {
  508.         return x >= X && x < X+Width &&
  509.                y >= Y && y < Y+Height;
  510.     }
  511.     BOOL Contains(IN const Point& pt) const
  512.     {
  513.         return Contains(pt.X, pt.Y);
  514.     }
  515.     BOOL Contains(IN Rect& rect) const
  516.     {
  517.         return (X <= rect.X) && (rect.GetRight() <= GetRight()) &&
  518.                (Y <= rect.Y) && (rect.GetBottom() <= GetBottom());
  519.     }
  520.     VOID Inflate(IN INT dx,
  521.                  IN INT dy)
  522.     {
  523.         X -= dx;
  524.         Y -= dy;
  525.         Width += 2*dx;
  526.         Height += 2*dy;
  527.     }
  528.     VOID Inflate(IN const Point& point)
  529.     {
  530.         Inflate(point.X, point.Y);
  531.     }
  532.     BOOL Intersect(IN const Rect& rect)
  533.     {
  534.         return Intersect(*this, *this, rect);
  535.     }
  536.     static BOOL Intersect(OUT Rect& c,
  537.                           IN const Rect& a,
  538.                           IN const Rect& b)
  539.     {
  540.         INT right = min(a.GetRight(), b.GetRight());
  541.         INT bottom = min(a.GetBottom(), b.GetBottom());
  542.         INT left = max(a.GetLeft(), b.GetLeft());
  543.         INT top = max(a.GetTop(), b.GetTop());
  544.         c.X = left;
  545.         c.Y = top;
  546.         c.Width = right - left;
  547.         c.Height = bottom - top;
  548.         return !c.IsEmptyArea();
  549.     }
  550.     BOOL IntersectsWith(IN const Rect& rect) const
  551.     {
  552.         return (GetLeft() < rect.GetRight() &&
  553.                 GetTop() < rect.GetBottom() &&
  554.                 GetRight() > rect.GetLeft() &&
  555.                 GetBottom() > rect.GetTop());
  556.     }
  557.     static BOOL Union(OUT Rect& c,
  558.                       IN const Rect& a,
  559.                       IN const Rect& b)
  560.     {
  561.         INT right = max(a.GetRight(), b.GetRight());
  562.         INT bottom = max(a.GetBottom(), b.GetBottom());
  563.         INT left = min(a.GetLeft(), b.GetLeft());
  564.         INT top = min(a.GetTop(), b.GetTop());
  565.         c.X = left;
  566.         c.Y = top;
  567.         c.Width = right - left;
  568.         c.Height = bottom - top;
  569.         return !c.IsEmptyArea();
  570.     }
  571.     VOID Offset(IN const Point& point)
  572.     {
  573.         Offset(point.X, point.Y);
  574.     }
  575.     VOID Offset(IN INT dx,
  576.                 IN INT dy)
  577.     {
  578.         X += dx;
  579.         Y += dy;
  580.     }
  581. public:
  582.     INT X;
  583.     INT Y;
  584.     INT Width;
  585.     INT Height;
  586. };
  587. class PathData
  588. {
  589. public:
  590.     PathData()
  591.     {
  592.         Count = 0;
  593.         Points = NULL;
  594.         Types = NULL;
  595.     }
  596.     ~PathData()
  597.     {
  598.         if (Points != NULL)
  599.         {
  600.             delete Points;
  601.         }
  602.         if (Types != NULL)
  603.         {
  604.             delete Types;
  605.         }
  606.     }
  607. private:
  608.     PathData(const PathData &);
  609.     PathData& operator=(const PathData &);
  610. public:
  611.     INT Count;
  612.     PointF* Points;
  613.     BYTE* Types;
  614. };
  615. class CharacterRange
  616. {
  617. public:
  618.     CharacterRange(
  619.         INT first,
  620.         INT length
  621.     ) :
  622.         First   (first),
  623.         Length  (length)
  624.     {}
  625.     CharacterRange() : First(0), Length(0)
  626.     {}
  627.     CharacterRange & operator = (const CharacterRange &rhs)
  628.     {
  629.         First  = rhs.First;
  630.         Length = rhs.Length;
  631.         return *this;
  632.     }
  633.     INT First;
  634.     INT Length;
  635. };
  636. #endif // !_GDIPLUSTYPES_HPP