# PathGradientBrush::MultiplyTransform method (gdipluspath.h)

The **PathGradientBrush::MultiplyTransform** method updates the brush's transformation matrix with the product of itself and another matrix.

## Syntax

```
Status MultiplyTransform(
[in] const Matrix *matrix,
[in] MatrixOrder order
);
```

## Parameters

`[in] matrix`

Type: **Matrix***

Pointer to the matrix that will be multiplied by the brush's current transformation matrix.

`[in] order`

Type: **MatrixOrder**

Optional. Element of the MatrixOrder enumeration that specifies the order of the multiplication. MatrixOrderPrepend specifies that the passed matrix is on the left, and MatrixOrderAppend specifies that the passed matrix is on the right. The default value is MatrixOrderPrepend.

## Return value

Type: **Status**

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

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

## Remarks

A single 3 ×3 matrix can store any sequence of affine transformations. If you have several 3 ×3 matrices, each of which represents an affine transformation, the product of those matrices is a single 3 ×3 matrix that represents the entire sequence of transformations. The transformation represented by that product is called a composite transformation. For example, suppose matrix R represents a rotation and matrix T represents a translation. If matrix M is the product RT, then matrix M represents a composite transformation: first rotate, then translate.

The order of matrix multiplication is important. In general, the matrix product RT is not the same as the matrix product TR. In the example given in the previous paragraph, the composite transformation represented by RT (first rotate, then translate) is not the same as the composite transformation represented by TR (first translate, then rotate).

#### Examples

The following example creates a
PathGradientBrush object based on a triangular path. The code calls the PathGradientBrush::ScaleTransform method of the
**PathGradientBrush** object to fill the brush's transformation matrix with the elements that represent a horizontal scaling by a factor of 3. Then the code calls the **PathGradientBrush::MultiplyTransform** method of that same
**PathGradientBrush** object to multiply the brush's existing transformation matrix by a matrix that represents a translation (10 right, 30 down). The MatrixOrderAppend argument indicates that the multiplication is performed with the translation matrix on the right.

After the multiplication, the brush's transformation matrix represents a composite transformation: first scale, then translate. That composite transformation is applied to the brush's boundary path during the call to FillRectangle, so it is the area inside the transformed path that gets painted.

```
VOID Example_MultiplyTransform(HDC hdc)
{
Graphics graphics(hdc);
Point pts[] = {Point(0, 0), Point(50, 0), Point(50, 50)};
// Translate 10 right, 30 down.
Matrix matrix(1.0f, 0.0f, 0.0f, 1.0f, 10.0f, 30.0f);
PathGradientBrush pthGrBrush(pts, 3);
pthGrBrush.ScaleTransform(3.0f, 1.0f);
pthGrBrush.MultiplyTransform(&matrix, MatrixOrderAppend);
graphics.FillRectangle(&pthGrBrush, 0, 0, 200, 200);
}
```

## Requirements

Minimum supported client |
Windows XP, Windows 2000 Professional [desktop apps only] |

Minimum supported server |
Windows 2000 Server [desktop apps only] |

Target Platform |
Windows |

Header |
gdipluspath.h (include Gdiplus.h) |

Library |
Gdiplus.lib |

DLL |
Gdiplus.dll |

## See also

Filling a Shape with a Color Gradient

Matrix Representation of Transformations

PathGradientBrush::GetTransform

PathGradientBrush::ResetTransform

PathGradientBrush::RotateTransform

PathGradientBrush::ScaleTransform

PathGradientBrush::SetTransform