📄 gdipluspath.h
字号:
/**************************************************************************\
*
* Copyright (c) 1998-2001, Microsoft Corp. All Rights Reserved.
*
* Module Name:
*
* GdiplusPath.h
*
* Abstract:
*
* GDI+ Graphics Path class
*
\**************************************************************************/
#ifndef _GDIPLUSPATH_H
#define _GDIPLUSPATH_H
class GraphicsPath : public GdiplusBase
{
public:
friend class Graphics;
friend class Region;
friend class PathGradientBrush;
friend class GraphicsPathIterator;
friend class CustomLineCap;
GraphicsPath(IN FillMode fillMode = FillModeAlternate)
{
nativePath = NULL;
lastResult = DllExports::GdipCreatePath(fillMode, &nativePath);
}
GraphicsPath(IN const PointF* points,
IN const BYTE* types,
IN INT count,
IN FillMode fillMode = FillModeAlternate)
{
nativePath = NULL;
lastResult = DllExports::GdipCreatePath2(points,
types,
count,
fillMode,
&nativePath);
}
GraphicsPath(IN const Point* points,
IN const BYTE* types,
IN INT count,
IN FillMode fillMode = FillModeAlternate)
{
nativePath = NULL;
lastResult = DllExports::GdipCreatePath2I(points,
types,
count,
fillMode,
&nativePath);
}
~GraphicsPath()
{
DllExports::GdipDeletePath(nativePath);
}
GraphicsPath* Clone() const
{
GpPath *clonepath = NULL;
SetStatus(DllExports::GdipClonePath(nativePath, &clonepath));
return new GraphicsPath(clonepath);
}
// Reset the path object to empty (and fill mode to FillModeAlternate)
Status Reset()
{
return SetStatus(DllExports::GdipResetPath(nativePath));
}
FillMode GetFillMode() const
{
FillMode fillmode = FillModeAlternate;
SetStatus(DllExports::GdipGetPathFillMode(nativePath, &fillmode));
return fillmode;
}
Status SetFillMode(IN FillMode fillmode)
{
return SetStatus(DllExports::GdipSetPathFillMode(nativePath,
fillmode));
}
Status GetPathData(OUT PathData* pathData) const
{
if (pathData == NULL)
{
return SetStatus(InvalidParameter);
}
INT count = GetPointCount();
if ((count <= 0) || (pathData->Count>0 && pathData->Count<count))
{
pathData->Count = 0;
if (pathData->Points)
{
delete pathData->Points;
pathData->Points = NULL;
}
if (pathData->Types)
{
delete pathData->Types;
pathData->Types = NULL;
}
if (count <= 0)
{
return lastResult;
}
}
if (pathData->Count == 0)
{
pathData->Points = new PointF[count];
if (pathData->Points == NULL)
{
return SetStatus(OutOfMemory);
}
pathData->Types = new byte[count];
if (pathData->Types == NULL)
{
delete pathData->Points;
pathData->Points = NULL;
return SetStatus(OutOfMemory);
}
pathData->Count = count;
}
return SetStatus(DllExports::GdipGetPathData(nativePath, pathData));
}
Status StartFigure()
{
return SetStatus(DllExports::GdipStartPathFigure(nativePath));
}
Status CloseFigure()
{
return SetStatus(DllExports::GdipClosePathFigure(nativePath));
}
Status CloseAllFigures()
{
return SetStatus(DllExports::GdipClosePathFigures(nativePath));
}
Status SetMarker()
{
return SetStatus(DllExports::GdipSetPathMarker(nativePath));
}
Status ClearMarkers()
{
return SetStatus(DllExports::GdipClearPathMarkers(nativePath));
}
Status Reverse()
{
return SetStatus(DllExports::GdipReversePath(nativePath));
}
Status GetLastPoint(OUT PointF* lastPoint) const
{
return SetStatus(DllExports::GdipGetPathLastPoint(nativePath,
lastPoint));
}
Status AddLine(IN const PointF& pt1,
IN const PointF& pt2)
{
return AddLine(pt1.X, pt1.Y, pt2.X, pt2.Y);
}
Status AddLine(IN REAL x1,
IN REAL y1,
IN REAL x2,
IN REAL y2)
{
return SetStatus(DllExports::GdipAddPathLine(nativePath, x1, y1,
x2, y2));
}
Status AddLines(IN const PointF* points,
IN INT count)
{
return SetStatus(DllExports::GdipAddPathLine2(nativePath, points,
count));
}
Status AddLine(IN const Point& pt1,
IN const Point& pt2)
{
return AddLine(pt1.X,
pt1.Y,
pt2.X,
pt2.Y);
}
Status AddLine(IN INT x1,
IN INT y1,
IN INT x2,
IN INT y2)
{
return SetStatus(DllExports::GdipAddPathLineI(nativePath,
x1,
y1,
x2,
y2));
}
Status AddLines(IN const Point* points,
IN INT count)
{
return SetStatus(DllExports::GdipAddPathLine2I(nativePath,
points,
count));
}
Status AddArc(IN const RectF& rect,
IN REAL startAngle,
IN REAL sweepAngle)
{
return AddArc(rect.X, rect.Y, rect.Width, rect.Height,
startAngle, sweepAngle);
}
Status AddArc(IN REAL x,
IN REAL y,
IN REAL width,
IN REAL height,
IN REAL startAngle,
IN REAL sweepAngle)
{
return SetStatus(DllExports::GdipAddPathArc(nativePath, x, y, width,
height, startAngle,
sweepAngle));
}
Status AddArc(IN const Rect& rect,
IN REAL startAngle,
IN REAL sweepAngle)
{
return AddArc(rect.X, rect.Y, rect.Width, rect.Height,
startAngle, sweepAngle);
}
Status AddArc(IN INT x,
IN INT y,
IN INT width,
IN INT height,
IN REAL startAngle,
IN REAL sweepAngle)
{
return SetStatus(DllExports::GdipAddPathArcI(nativePath,
x,
y,
width,
height,
startAngle,
sweepAngle));
}
Status AddBezier(IN const PointF& pt1,
IN const PointF& pt2,
IN const PointF& pt3,
IN const PointF& pt4)
{
return AddBezier(pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X, pt3.Y, pt4.X,
pt4.Y);
}
Status AddBezier(IN REAL x1,
IN REAL y1,
IN REAL x2,
IN REAL y2,
IN REAL x3,
IN REAL y3,
IN REAL x4,
IN REAL y4)
{
return SetStatus(DllExports::GdipAddPathBezier(nativePath, x1, y1, x2,
y2, x3, y3, x4, y4));
}
Status AddBeziers(IN const PointF* points,
IN INT count)
{
return SetStatus(DllExports::GdipAddPathBeziers(nativePath, points,
count));
}
Status AddBezier(IN const Point& pt1,
IN const Point& pt2,
IN const Point& pt3,
IN const Point& pt4)
{
return AddBezier(pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X, pt3.Y, pt4.X,
pt4.Y);
}
Status AddBezier(IN INT x1,
IN INT y1,
IN INT x2,
IN INT y2,
IN INT x3,
IN INT y3,
IN INT x4,
IN INT y4)
{
return SetStatus(DllExports::GdipAddPathBezierI(nativePath,
x1,
y1,
x2,
y2,
x3,
y3,
x4,
y4));
}
Status AddBeziers(IN const Point* points,
IN INT count)
{
return SetStatus(DllExports::GdipAddPathBeziersI(nativePath,
points,
count));
}
Status AddCurve(IN const PointF* points,
IN INT count)
{
return SetStatus(DllExports::GdipAddPathCurve(nativePath,
points,
count));
}
Status AddCurve(IN const PointF* points,
IN INT count,
IN REAL tension)
{
return SetStatus(DllExports::GdipAddPathCurve2(nativePath,
points,
count,
tension));
}
Status AddCurve(IN const PointF* points,
IN INT count,
IN INT offset,
IN INT numberOfSegments,
IN REAL tension)
{
return SetStatus(DllExports::GdipAddPathCurve3(nativePath,
points,
count,
offset,
numberOfSegments,
tension));
}
Status AddCurve(IN const Point* points,
IN INT count)
{
return SetStatus(DllExports::GdipAddPathCurveI(nativePath,
points,
count));
}
Status AddCurve(IN const Point* points,
IN INT count,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -