Compartilhar via


MeasureStroke Method (Automation Only)

MeasureStroke Method (Automation Only)

Calculates the rectangle on the device context that would contain a stroke if it were drawn with the InkRenderer object using the DrawStroke method.

Declaration

[C++]

HRESULT MeasureStroke (
    [in] IInkStrokeDisp* stroke,
    [in, optional, defaultvalue(0)] IInkDrawingAttributes *drawingAttributes,
    [out, retval] IInkRectangle **Rectangle
);

[Microsoft® Visual Basic® 6.0]

Public Function MeasureStroke( _
    stroke As IInkStrokeDisp, _
    [drawingAttributes As InkDrawingAttributes] _
) As InkRectangle

Parameters

stroke

[in] The stroke to measure.

drawingAttributes

[in, optional] The InkDrawingAttributes to use when calculating the rectangle, which override the drawing attributes on the stroke. The default value is NULL (Nothing in Visual Basic 6.0), which means the stroke is measured by using its own drawing attributes.

Note: In Visual Basic 6.0, this parameter cannot be omitted if late binding is used. Instead, the default value of Nothing must be explicitly specified.

Rectangle

[out] Returns the rectangle on the device context that would contain the stroke if the stroke were drawn with the DrawStroke method of the InkRenderer object. The stroke must contain x- and y-coordinates to calculate the rectangle. Otherwise, the method returns an empty rectangle.

Return Value

HRESULT value Description
S_OK Success.
REGDB_E_CLASSNOTREG The InkRectangle object is not registered on the system.
E_INK_INCOMPATIBLE_OBJECT IInkStrokeDisp does not point to a compatible InkDisp object, or InkDrawingAttributes is an invalid input parameter.
E_INK_EXCEPTION An exception occurred inside the method.
E_POINTER A parameter contained an invalid pointer.
E_INVALIDARG Invalid display handle.
E_UNEXPECTED Unexpected parameter or property type.

Remarks

This is accurate only if you pass the same arguments to both MeasureStroke and DrawStroke.

Since the bounding box is affected by the pen width, this width is scaled appropriately for the InkRenderer's view transform. To do this, the pen width is multiplied by the square root of the determinant of the view transform. The height and width of the bounding box are expanded by half this amount in each direction, and the right and bottom sides are incremented by one.

For example, consider that the pen width is originally 53, the square root of the determinant of the view transform is 50, and the bounding box is (0, 0, 1000, 1000). The pen width adjustment to the bounding box in each direction is calculated as (53 * 50) / 2, and the right and bottom sides are incremented by one. This results in a rendered bounding box of (-1325, -1325, 2326, 2326).

Example

[Visual Basic 6.0]

This Visual Basic 6.0 example gets the bounding rectangle for the first stroke in the InkCollector, theInkCollector.

Dim theMeasure As InkRectangle
Set theMeasure = theInkCollector.Renderer.MeasureStroke(theInkCollector.Ink.Strokes(0))

Applies To