PixelToInkSpace Method

PixelToInkSpace Method

Converts a location in pixel space coordinates to be a location in ink space coordinates.

Declaration

[C++]

HRESULT PixelToInkSpace (
    [in] long hdcDisplay,
    [in,out] long* x,
    [in,out] long* y
);

[Microsoft® Visual Basic® 6.0]

Public Sub PixelToInkSpace( _
    hdcDisplay As Long, _
    x As Long, _
    y As Long _
)

Parameters

hdcDisplay

[in] The handle of the device context for the containing control or form.

x

[in, out] The x coordinate of the point to convert into an ink location.

y

[in, out] The y coordinate of the point to convert into an ink location.

Return Value

HRESULT valueDescription
S_OKSuccess.
E_POINTERA parameter contained an invalid pointer.
E_INVALIDARGInvalid display handle.
E_INK_EXCEPTIONAn exception occurred inside the method.

Remarks

PixelToInkSpace converts from pixel to ink space (1 ink unit = .01mm), applies the inverse of the view transform, and then applies the object transform.

Example

[Visual Basic 6.0]

This Visual Basic 6.0 example function DeleteStrokesOnLeft deletes all of the strokes in the InkCollector object passed in that are to the left of the left parameter in pixel space and returns a count of the deleted strokes.

Option Explicit
Dim theInkCollector As InkCollector

Private Sub Command1_Click()
    Dim countOfDeletedStrokes As Long
    countOfDeletedStrokes = DeleteStrokesOnLeft(200, theInkCollector, Form1.hDC)
    Text1.Text = "Deleted " & countOfDeletedStrokes & " strokes"
    Form1.Refresh
End Sub

Private Sub Form_Load()
    Set theInkCollector = New InkCollector
    theInkCollector.hWnd = Me.hWnd
    theInkCollector.Enabled = True
End Sub

Public Function DeleteStrokesOnLeft( _
ByVal left As Long, _
ByRef theInkCollector As InkCollector, _
ByVal hDC As Long) _
As Long
    Dim i As Integer
    Dim leftTest As Long
    Dim theStroke As IInkStrokeDisp
    Dim theStrokesToDelete As InkStrokes
    ' convert the left parameter from pixels to ink space
    theInkCollector.Renderer.PixelToInkSpace hDC, left, 0
    Set theStrokesToDelete = theInkCollector.Ink.CreateStrokes()
    For Each theStroke In theInkCollector.Ink.Strokes
        Dim ptStrokePoints As Variant
        ptStrokePoints = theStroke.GetPoints()
        For i = 0 To UBound(ptStrokePoints) Step 2
            leftTest = ptStrokePoints(i)
            'If the stroke has a point left of the cutoff,
            If leftTest < left Then
                ' add it to the deletion list
                theStrokesToDelete.Add theStroke
                Exit For 'and stop processing points
            End If
        Next
    Next
    If 0 < theStrokesToDelete.Count Then
        theInkCollector.Ink.DeleteStrokes theStrokesToDelete
    End If
    DeleteStrokesOnLeft = theStrokesToDelete.Count
End Function

Applies To

Related Topics

Show: