Win32 API 日本語リファレンス
ホームUI.TabletPC › IInkRenderer

IInkRenderer

COMIDispatch (デュアル)
IDispatch を実装(デュアルインターフェース)。HSP では comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。
IIDe6257a9c-b511-4f4c-a8b0-a7dbc9506b83継承元IDispatch呼び出し名前(IDispatch) または vtbl自前メソッド開始 vtbl7

公式ドキュメント

。 (IInkRenderer)

解説(Remarks)

印刷も InkRenderer オブジェクトを介して行われます。

このオブジェクトは、C++ では CoCreateInstance メソッドを呼び出すことでインスタンス化できます。

メソッド 15

vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。

vtbl 7 HRESULT GetViewTransform(IInkTransform* ViewTransform)

インク(手書き)の描画に使用されるビュー変換を表す InkTransform オブジェクトを取得します。

ViewTransformIInkTransform*inoptionalインク空間内のストローク座標を変換するために使用する幾何変換 (回転、拡大縮小、せん断、反転) の値を表す行列です。この変換はポイントとペン幅の両方に適用されます。ビュー変換はオブジェクト変換の後に行われます。

戻り値

このメソッドは、次のいずれかの値を返します。

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_INK_EXCEPTION
メソッド内部で例外が発生しました。

解説(Remarks)

この変換に適用する平行移動は、インク空間の単位 (1 単位 = .01mm) で指定してください。

ビュー変換の調整は、インク描画のズーム倍率を調整することに相当します。

ビュー変換はオブジェクト変換の後に行われます。

vtbl 8 HRESULT SetViewTransform(IInkTransform* ViewTransform)

インク(手書き)の描画に使用されるビュー変換を表す InkTransform オブジェクトを設定します。

ViewTransformIInkTransform*inoptional

インク空間内のストローク座標を変換するために使用する幾何変換 (回転、拡大縮小、せん断、反転) の値を表す InkTransform オブジェクトです。

viewTransform パラメーターに NULL を指定した場合は、恒等変換を指定したことになります。

戻り値

このメソッドは、次のいずれかの値を返します。

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_INVALIDARG
viewTransform が互換性のある InkTransform オブジェクトを指していません。
E_INK_EXCEPTION
メソッド内部で例外が発生しました。

解説(Remarks)

この変換はポイントとペン幅の両方に適用されます。

ビュー変換はオブジェクト変換の後に行われます。

ペン幅は、指定されたペン幅 (未指定の場合は既定値の 53) にビュー変換の行列式の平方根を乗算して算出されます。

SENT メッセージへの応答としてこのメソッドを呼び出すと問題が生じます。InSendMesssageEx を呼び出して SENT メッセージを処理中かどうかを判定し、 SENT メッセージであった場合は自分自身にメッセージを POST してください。

vtbl 9 HRESULT GetObjectTransform(IInkTransform* ObjectTransform)

インク(手書き)の描画に使用されたオブジェクト変換を表す InkTransform オブジェクトを取得します。

ObjectTransformIInkTransform*inoptionalインク空間内のストローク座標を変換するために使用する幾何変換 (回転、拡大縮小、せん断、反転) の値を表す InkTransform オブジェクトです。

戻り値

このメソッドは、次のいずれかの値を返します。

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_INK_EXCEPTION
メソッド内部で例外が発生しました。

解説(Remarks)

この変換に適用する平行移動は、インク空間の単位 (1 単位 = .01mm) で指定してください。

vtbl 10 HRESULT SetObjectTransform(IInkTransform* ObjectTransform)

インク(手書き)の描画に使用されるオブジェクト変換を表す InkTransform オブジェクトを設定します。

ObjectTransformIInkTransform*inoptional

インク空間内のストローク座標を変換するために使用する幾何変換 (回転、拡大縮小、せん断、反転) の値を表す InkTransform オブジェクトです。

objectTransform パラメーターに NULL を指定した場合は、恒等変換を指定したことになります。

戻り値

このメソッドは、次のいずれかの値を返します。

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_INVALIDARG
objectTransform が互換性のある InkTransform オブジェクトを指していません。
E_INK_EXCEPTION
メソッド内部で例外が発生しました。

解説(Remarks)

この変換はポイントに適用されますが、ペン幅には適用されません。

オブジェクト変換はビュー変換の前に行われます。

SENT メッセージへの応答としてこのメソッドを呼び出すと問題が生じます。InSendMesssageEx を呼び出して SENT メッセージを処理中かどうかを判定し、 SENT メッセージであった場合は自分自身にメッセージを POST してください。

vtbl 11 HRESULT Draw(INT_PTR hDC, IInkStrokes* Strokes)

既知のデバイスコンテキストを使用してインクストロークを描画します。

hDCINT_PTRin描画先のデバイスコンテキストの hWnd を指定します。
StrokesIInkStrokes*inoptional描画するストロークを指定します。

戻り値

このメソッドは、次のいずれかの値を返します。

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_INK_MISMATCHED_INK_OBJECT
strokes パラメーターが別の InkDisp オブジェクトに関連付けられています。
E_INVALIDARG
引数が無効です。
E_INK_INCOMPATIBLE_OBJECT
hdc または strokes パラメーターが有効なオブジェクトを指していません。
E_INK_EXCEPTION
メソッド内部で例外が発生しました。
E_UNEXPECTED
予期しないパラメーターまたはプロパティの型です。

解説(Remarks)

ペン幅には、ビュー変換の行列式の平方根が乗算 (スケーリング) されます。

メモ ペン幅を明示的に設定していない場合、既定値は 53 です。正しい境界ボックスを求めるには、ペン幅に行列式の平方根を乗算する必要があります。境界ボックスの高さと幅は、各方向にこの値の半分だけ拡張されます。
たとえば、ペン幅が 53、行列式の平方根が 50、境界ボックスが (0,0,1000,1000) である場合を考えます。境界ボックスに対する各方向のペン幅の調整量は (53*50)/2 として算出され、右辺と下辺はさらに 1 加算されます。その結果、描画される境界ボックスは (-1325,-1325,2326,2326) になります。
メモ 単一のストロークを描画するには、DrawStroke メソッドを使用してください。
InkRenderer は、ビューポートとウィンドウの原点を強制的に 0, 0 にします。既存の設定は保存および復元されますが、InkRenderer では使用されません。スクロールを行うには、InkRenderer オブジェクトのビュー変換およびオブジェクト変換のメソッドを使用してください。
vtbl 12 HRESULT DrawStroke(INT_PTR hDC, IInkStrokeDisp* Stroke, IInkDrawingAttributes* DrawingAttributes)

既知のデバイスコンテキストを使用して IInkStrokeDisp オブジェクトを描画します。必要に応じて、既知の InkDrawingAttributes オブジェクトを使用して IInkStrokeDisp オブジェクトを描画します。

hDCINT_PTRin描画先のデバイスコンテキストの hWnd です。
StrokeIInkStrokeDisp*inoptional描画するストロークです。
DrawingAttributesIInkDrawingAttributes*inoptional省略可能です。描画に使用する InkDrawingAttributes を指定します。既定値は NULL です。InkDrawingAttributes を指定した場合は、IInkStrokeDispDrawingAttributes よりも優先されます。

戻り値

このメソッドは、次のいずれかの値を返します。

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_INK_MISMATCHED_INK_OBJECT
strokes パラメーターが別の InkDisp オブジェクトに関連付けられています。
E_INVALIDARG
ディスプレイハンドルが無効です。
E_INK_INCOMPATIBLE_OBJECT
stroke または drawingAttributes パラメーターが有効なオブジェクトを指していません。
E_INK_EXCEPTION
メソッド内部で例外が発生しました。
E_UNEXPECTED
予期しないパラメーターまたはプロパティの型です。

解説(Remarks)

ペン幅には、ビュー変換の行列式の平方根が乗算 (スケーリング) されます。

メモ ペン幅を明示的に設定していない場合、既定値は 53 です。正しい境界ボックスを求めるには、ペン幅に行列式の平方根を乗算する必要があります。境界ボックスの高さと幅は、各方向にこの値の半分だけ拡張されます。
たとえば、ペン幅が 53、行列式の平方根が 50、境界ボックスが (0,0,1000,1000) である場合を考えます。境界ボックスに対する各方向のペン幅の調整量は (53*50)/2 として算出され、右辺と下辺はさらに 1 加算されます。その結果、描画される境界ボックスは (-1325,-1325,2326,2326) になります。

InkRenderer は、ビューポートとウィンドウの原点を強制的に 0, 0 にします。既存の設定は保存および復元されますが、InkRenderer では使用されません。スクロールを行うには、InkRenderer オブジェクトのビュー変換およびオブジェクト変換のメソッドを使用してください。

vtbl 13 HRESULT PixelToInkSpace(INT_PTR hDC, INT* x, INT* y)

ピクセル空間座標の位置を、インク空間座標の位置に変換します。

hDCINT_PTRin格納先のコントロールまたはフォームのデバイスコンテキストのハンドルです。
xINT*inoutインク上の位置に変換するポイントの x 座標です。
yINT*inoutインク上の位置に変換するポイントの y 座標です。

戻り値

このメソッドは、次のいずれかの値を返します。

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_INVALIDARG
ディスプレイハンドルが無効です。
E_INK_EXCEPTION
メソッド内部で例外が発生しました。

解説(Remarks)

PixelToInkSpace は、ピクセルからインク空間 (1 HIMETRIC 単位 = .01mm) へ変換し、ビュー変換の逆変換を適用したうえで、オブジェクト変換を適用します。

vtbl 14 HRESULT InkSpaceToPixel(INT_PTR hdcDisplay, INT* x, INT* y)

ハンドルを使用して、インク空間座標の位置をピクセル空間の位置に変換します。

hdcDisplayINT_PTRinデバイスコンテキストのハンドルです。
xINT*inoutピクセル上の位置に変換するポイントの X 座標です。
yINT*inoutピクセル上の位置に変換するポイントの Y 座標です。

戻り値

このメソッドは、次のいずれかの値を返します。

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_INK_EXCEPTION
メソッド内部で例外が発生しました。
E_INVALIDARG
ディスプレイハンドルが無効です。
E_FAIL
処理中に座標がオーバーフローしました。

解説(Remarks)

InkSpaceToPixelFromPoints は、オブジェクト変換を適用し、InkRenderer オブジェクトのビュー変換を適用したうえで、インク空間からピクセル単位 (1 インク単位 = .01mm) へ変換します。

vtbl 15 HRESULT PixelToInkSpaceFromPoints(INT_PTR hDC, VARIANT* Points)

ピクセル空間座標の位置の配列を、インク空間座標の位置の配列に変換します。

hDCINT_PTRin格納先のコントロールまたはフォームのデバイスコンテキストのハンドルです。
PointsVARIANT*inout

ピクセル上の位置からインク空間座標へ変換するポイントの Variant 配列です。x0, y0, x1, y1, x2, y2 のように、Long 型の x 値と y 値を交互に並べた形式で指定します。

VARIANT 構造体の詳細については、「Using the COM Library」を参照してください。

戻り値

このメソッドは、次のいずれかの値を返します。

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_INVALIDARG
ディスプレイハンドルが無効です。
E_INK_EXCEPTION
メソッド内部で例外が発生しました。

解説(Remarks)

PixelToInkSpaceFromPoints は、ピクセルからインク空間 (1 インク単位 = .01mm) へ変換し、ビュー変換の逆変換を適用したうえで、オブジェクト変換の逆変換を適用します。

vtbl 16 HRESULT InkSpaceToPixelFromPoints(INT_PTR hDC, VARIANT* Points)

インク空間座標のポイントの配列を、ピクセル空間のポイントの配列に変換します。

hDCINT_PTRin描画先のデバイスコンテキストのハンドルです。
PointsVARIANT*inout

ピクセル上の位置に変換する、インク空間座標のポイントの配列です。これは VARIANT に格納された 32 ビット整数値の配列である必要があります。

VARIANT 構造体の詳細については、「Using the COM Library」を参照してください。

戻り値

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_INVALIDARG
ディスプレイハンドルが無効です。
E_INK_EXCEPTION
メソッド内部で例外が発生しました。

解説(Remarks)

InkSpaceToPixelFromPoints は、オブジェクト変換を適用し、InkRenderer オブジェクトのビュー変換を適用したうえで、インク空間からピクセル単位 (1 インク単位 = .01mm) へ変換します。

vtbl 17 HRESULT Measure(IInkStrokes* Strokes, IInkRectangle** Rectangle)

InkRenderer オブジェクトの DrawStroke メソッドでストロークのコレクションを描画した場合に、それらのストロークを含むデバイスコンテキスト上の矩形を計算します。

StrokesIInkStrokes*inoptional測定対象のストロークのコレクションです。
RectangleIInkRectangle**outこのメソッドが返されるときに、InkRenderer オブジェクトの DrawStroke メソッドでストロークを描画した場合に、それらのストロークを含むデバイスコンテキスト上の矩形へのポインターが格納されます。矩形を計算するには、ストロークが x 座標と y 座標を含んでいる必要があります。含んでいない場合、このメソッドは空の矩形を返します。

戻り値

このメソッドは、次のいずれかの値を返します。

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_INVALIDARG
ディスプレイハンドルが無効です。
E_INK_INCOMPATIBLE_OBJECT
strokes パラメーターが有効なオブジェクトを指していません。
E_INK_MISMATCHED_INK_OBJECT
strokes パラメーターが別の InkDisp オブジェクトに関連付けられています。
E_INK_EXCEPTION
メソッド内部で例外が発生しました。
E_UNEXPECTED
予期しないパラメーターまたはプロパティの型です。

解説(Remarks)

これが正確になるのは、MeasureDrawStroke の両方に同じ引数を渡した場合のみです。

境界ボックスはペン幅の影響を受けるため、ペン幅は InkRenderer のビュー変換に応じて適切にスケーリングされます。具体的には、ペン幅にビュー変換の行列式の平方根が乗算されます。境界ボックスの高さと幅は各方向にこの値の半分だけ拡張され、さらに右辺と下辺は 1 加算されます。

たとえば、元のペン幅が 53、ビュー変換の行列式の平方根が 50、境界ボックスが (0, 0, 1000, 1000) である場合を考えます。境界ボックスに対する各方向のペン幅の調整量は (53 * 50) / 2 として算出され、右辺と下辺はさらに 1 加算されます。その結果、描画される境界ボックスは (-1325, -1325, 2326, 2326) になります。

vtbl 18 HRESULT MeasureStroke(IInkStrokeDisp* Stroke, IInkDrawingAttributes* DrawingAttributes, IInkRectangle** Rectangle)

InkRenderer オブジェクトの DrawStroke メソッドでストロークを描画した場合に、そのストロークを含むデバイスコンテキスト上の矩形を計算します。

StrokeIInkStrokeDisp*inoptional測定対象のストロークです。
DrawingAttributesIInkDrawingAttributes*inoptional省略可能です。矩形の計算に使用する InkDrawingAttributes で、ストロークの描画属性よりも優先されます。既定値は NULL で、この場合はストローク自身の描画属性を使用して測定されます。
RectangleIInkRectangle**outこのメソッドが返されるときに、InkRenderer オブジェクトの DrawStroke メソッドでストロークを描画した場合に、そのストロークを含むデバイスコンテキスト上の矩形へのポインターが格納されます。矩形を計算するには、ストロークが x 座標と y 座標を含んでいる必要があります。含んでいない場合、このメソッドは空の矩形を返します。

戻り値

このメソッドは、次のいずれかの値を返します。

戻り値 説明
S_OK
成功しました。
REGDB_E_CLASSNOTREG
InkRectangle オブジェクトがシステムに登録されていません。
E_INK_INCOMPATIBLE_OBJECT

IInkStrokeDisp が互換性のある InkDisp オブジェクトを指していないか、drawingAttributes が無効な入力パラメーターです。

E_INK_EXCEPTION
メソッド内部で例外が発生しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_INVALIDARG
ディスプレイハンドルが無効です。
E_UNEXPECTED
予期しないパラメーターまたはプロパティの型です。

解説(Remarks)

これが正確になるのは、MeasureStrokeDrawStroke の両方に同じ引数を渡した場合のみです。

境界ボックスはペン幅の影響を受けるため、ペン幅は InkRenderer のビュー変換に応じて適切にスケーリングされます。具体的には、ペン幅にビュー変換の行列式の平方根が乗算されます。境界ボックスの高さと幅は各方向にこの値の半分だけ拡張され、さらに右辺と下辺は 1 加算されます。

たとえば、元のペン幅が 53、ビュー変換の行列式の平方根が 50、境界ボックスが (0, 0, 1000, 1000) である場合を考えます。境界ボックスに対する各方向のペン幅の調整量は (53 * 50) / 2 として算出され、右辺と下辺はさらに 1 加算されます。その結果、描画される境界ボックスは (-1325, -1325, 2326, 2326) になります。

vtbl 19 HRESULT Move(FLOAT HorizontalComponent, FLOAT VerticalComponent)

インク空間座標で、ビュー変換に平行移動を適用します。

HorizontalComponentFLOATinビュー変換を X 方向に平行移動させる量 (インク空間座標) です。
VerticalComponentFLOATinビュー変換を Y 方向に平行移動させる量 (インク空間座標) です。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 20 HRESULT Rotate(FLOAT Degrees, FLOAT x, FLOAT y)

InkRenderer のビュー変換に回転を適用します。

DegreesFLOATin時計回りに回転させる角度 (度) です。
xFLOATin省略可能です。回転の中心となるポイントの x 座標 (インク空間座標) です。既定値は 0 です。
yFLOATin省略可能です。回転の中心となるポイントの y 座標 (インク空間座標) です。既定値は 0 です。

戻り値

このメソッドは、次のいずれかの値を返します。

戻り値 説明
S_OK
成功しました。
E_INK_EXCEPTION
メソッド内部で例外が発生しました。

解説(Remarks)

ポイントを指定しない場合、回転は原点を中心に行われます。

vtbl 21 HRESULT ScaleTransform(FLOAT HorizontalMultiplier, FLOAT VerticalMultiplier, VARIANT_BOOL ApplyOnPenWidth)

ビュー変換を X 方向および Y 方向に拡大縮小します。

HorizontalMultiplierFLOATinビュー変換の X 方向を拡大縮小する係数です。
VerticalMultiplierFLOATinビュー変換の Y 方向を拡大縮小する係数です。
ApplyOnPenWidthVARIANT_BOOLin省略可能です。ペン幅にも拡大縮小の係数を適用する場合は VARIANT_TRUE、それ以外の場合は VARIANT_FALSE を指定します。既定値は VARIANT_TRUE です。

戻り値

このメソッドは、次のいずれかの値を返します。

戻り値 説明
S_OK
成功しました。
E_INK_EXCEPTION
メソッド内部で例外が発生しました。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IInkRenderer "{E6257A9C-B511-4F4C-A8B0-A7DBC9506B83}"
#usecom global IInkRenderer IID_IInkRenderer "{9C1CC6E4-D7EB-4EEB-9091-15A7C8791ED9}"
#comfunc global IInkRenderer_GetViewTransform           7 sptr
#comfunc global IInkRenderer_SetViewTransform           8 sptr
#comfunc global IInkRenderer_GetObjectTransform         9 sptr
#comfunc global IInkRenderer_SetObjectTransform         10 sptr
#comfunc global IInkRenderer_Draw                       11 sptr,sptr
#comfunc global IInkRenderer_DrawStroke                 12 sptr,sptr,sptr
#comfunc global IInkRenderer_PixelToInkSpace            13 sptr,var,var
#comfunc global IInkRenderer_InkSpaceToPixel            14 sptr,var,var
#comfunc global IInkRenderer_PixelToInkSpaceFromPoints  15 sptr,var
#comfunc global IInkRenderer_InkSpaceToPixelFromPoints  16 sptr,var
#comfunc global IInkRenderer_Measure                    17 sptr,sptr
#comfunc global IInkRenderer_MeasureStroke              18 sptr,sptr,sptr
#comfunc global IInkRenderer_Move                       19 float,float
#comfunc global IInkRenderer_Rotate                     20 float,float,float
#comfunc global IInkRenderer_ScaleTransform             21 float,float,int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。
; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。