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

IInkStrokeDisp

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

公式ドキュメント

単一のインクストロークを表します。ストロークとは、特定のインクの筆跡の座標とプロパティを表す、デジタイザーが取得したプロパティとポイントデータの集合です。

解説(Remarks)

このインターフェースを実装するクラスを独自に定義した場合、そのクラスは Tablet PC のアプリケーションプログラミングインターフェース (API) と正しく連携しません。

メソッド 33

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

vtbl 7 HRESULT get_ID(INT* ID)

オブジェクトの識別子を取得します。(IInkStrokeDisp.get_Id)

IDINT*outストロークを一意に識別する ID を受け取るポインタである。

解説(Remarks)

オブジェクトの識別子は変化しません。

メモ 特定のメッセージハンドラー内でこのプロパティにアクセスすると、内部の関数が再入され、予期しない結果になることがあります。次のいずれかのメッセージを処理する際は、再入呼び出しにならないよう注意してください: WM_ACTIVATEWM_ACTIVATEAPPWM_NCACTIVATEWM_PAINTwParamSC_HOTKEY または SC_TASKLIST が設定されている場合の WM_SYSCOMMAND、および WM_SYSKEYDOWN (Alt+Tab または Alt+Esc のキー操作を処理する場合)。これはシングルスレッドアパートメントモデルのアプリケーションで発生する問題です。
vtbl 8 HRESULT get_BezierPoints(VARIANT* Points)

ストロークのベジェ近似を表す制御点の配列を取得します。

PointsVARIANT*outストロークを表すベジエ制御点の配列を受け取る VARIANT へのポインタである。

解説(Remarks)

BezierPoints プロパティが返す制御点は、元のストロークの滑らかな近似を提供するものであり、必ずしもストローク上に位置するとは限りません。

vtbl 9 HRESULT get_DrawingAttributes(IInkDrawingAttributes** DrawAttrs)

インクを描画する際に適用する描画属性を取得または設定します。(IInkStrokeDisp.get_DrawingAttributes)

DrawAttrsIInkDrawingAttributes**outこのストロークに適用されている描画属性を受け取るポインタである。

解説(Remarks)

描画属性は、ストロークの外観を指定します。たとえば、ペンのスタイルや色を指定できます。

カーソルは、接触する InkCollector ごとに異なる描画属性を持つことができます。カーソルに描画属性を指定しない場合は、InkCollector オブジェクトの既定の描画属性が使用されます。これらの既定属性は、InkCollector オブジェクトの DefaultDrawingAttributes プロパティで設定します。

DrawingAttributes プロパティを繰り返し呼び出しても、変更されるのは新しいストロークの描画属性だけです。すでに収集済みのストロークや収集中のストロークには適用されません。

メモ このプロパティの動作は DefaultDrawingAttributes プロパティとは異なります。DefaultDrawingAttributes プロパティが新しいカーソルに適用される描画属性を指定するのに対し、DrawingAttributes プロパティはこれから収集されるインクの描画属性を指定します。
vtbl 10 HRESULT putref_DrawingAttributes(IInkDrawingAttributes* DrawAttrs)
DrawAttrsIInkDrawingAttributes*inoptionalこのストロークに適用する描画属性オブジェクトへのポインタである。
vtbl 11 HRESULT get_Ink(IInkDisp** Ink)

ストロークの親となる InkDisp オブジェクトを取得します。

InkIInkDisp**outこのストロークが属するインク オブジェクトを受け取るポインタである。

解説(Remarks)

ストロークは、必ず 1 つの InkDisp オブジェクトにのみ含まれている必要があります。

vtbl 12 HRESULT get_ExtendedProperties(IInkExtendedProperties** Properties)

オブジェクトに格納されている、アプリケーション定義データのコレクションを取得します。(IInkStrokeDisp.get_ExtendedProperties)

PropertiesIInkExtendedProperties**outこのストロークに関連付けられた拡張プロパティのコレクションを受け取るポインタである。

解説(Remarks)

アプリケーションは ExtendedProperties プロパティを使用して、オブジェクトに格納されたカスタムデータにアクセスできます。このカスタムデータは、オブジェクトと共に自動的にシリアル化されます。

vtbl 13 HRESULT get_PolylineCusps(VARIANT* Cusps)

IInkStrokeDisp オブジェクトのカスプのインデックスを格納した配列を取得します。

CuspsVARIANT*out折れ線近似におけるストロークの尖点(カスプ)の配列を受け取る VARIANT へのポインタである。

解説(Remarks)

PolylineCusps プロパティが返す配列は、GetPoints メソッドが返す配列へのインデックスです。PolylineCusps プロパティの各インデックスは、GetPoints メソッドが返す配列のうち、ストロークの点のカスプに当たる点に対応します。

カスプ (cusp) とは、筆記の方向が不連続に変化するストローク上の点です。たとえば、ストロークが大文字の「L」を表す場合、このプロパティは 3 つのカスプを返します。うち 2 つはストロークの最初と最後の制御点に対応し、3 つ目は「L」の角を表します。

カスプの位置は、そのカスプを GetPoints メソッドが返す配列へのインデックスとして使用することで求められます。

vtbl 14 HRESULT get_BezierCusps(VARIANT* Cusps)

ストロークのベジェ近似におけるカスプのインデックスを格納した配列を取得します。

CuspsVARIANT*outベジエ表現におけるストロークの尖点(カスプ)の配列を受け取る VARIANT へのポインタである。

解説(Remarks)

メモ BezierPoints プロパティが返すベジェ制御点の配列は、x 値と y 値から構成されます。BezierCusps プロパティが参照するのはこの配列中の x 値だけです。y 値は、以下に示すような方法で取得できます。
カスプ (cusp) とは、筆記の方向が不連続に変化するストローク上の点です。たとえば、ストロークが大文字の「L」を表す場合、このプロパティは 3 つのカスプを返します。うち 2 つはストロークの最初と最後の制御点に対応し、3 つ目は「L」の角を表します。

次のコードは、IInkStrokeDisp である theStroke のベジェカスプの x 値と y 値を抽出し、BezierCuspValues という 2 次元配列に格納します。

vtbl 15 HRESULT get_SelfIntersections(VARIANT* Intersections)

ストロークの自己交差点を取得します。

IntersectionsVARIANT*outストローク自身の交差点の配列を受け取る VARIANT へのポインタである。

解説(Remarks)

自己交差点とは、ストロークがそれ自身と交差する点のことです。

浮動小数点インデックスとは、ストローク内の 2 点の間のどこかの位置を表す浮動小数点値です。たとえば、0.0 がストロークの最初の点、1.0 が 2 番目の点を表す場合、0.5 は最初の点と 2 番目の点のちょうど中間を表します。同様に、37.25 という浮動小数点インデックス値は、ストロークの 37 番目の点と 38 番目の点を結ぶ線分上の 25 パーセントの位置を表します。

メモ 浮動小数点インデックスは、交差点と線分の組み合わせごとに返されます。ストロークに交差点が 1 つある場合、このプロパティは、交差に関与する各線分に対して 1 つずつ、計 2 つの自己交差点を返します。
vtbl 16 HRESULT get_PacketCount(INT* plCount)

IInkStrokeDisp オブジェクトで受信したパケットの数を取得します。

plCountINT*outストロークを構成するパケットの個数を受け取るポインタである。
vtbl 17 HRESULT get_PacketSize(INT* plSize)

パケットのサイズ (バイト単位) を取得します。

plSizeINT*out1 パケットあたりのデータ サイズ(プロパティ数)を受け取るポインタである。
vtbl 18 HRESULT get_PacketDescription(VARIANT* PacketDescription)

IInkStrokeDisp オブジェクトに格納されているパケットデータの種類を示す、グローバル一意識別子 (GUID) の配列を取得します。

PacketDescriptionVARIANT*outパケットを構成する各プロパティの GUID 配列を受け取る VARIANT へのポインタである。

解説(Remarks)

利用できるパケットプロパティの完全な一覧については、PacketProperty 定数を参照してください。

vtbl 19 HRESULT get_Deleted(VARIANT_BOOL* Deleted)

特定のストロークがインクから削除されているかどうかを示す値を取得します。

DeletedVARIANT_BOOL*outストロークが削除済みであるかどうかを受け取る VARIANT_BOOL へのポインタである。
vtbl 20 HRESULT GetBoundingBox(InkBoundingBoxMode BoundingBoxMode, IInkRectangle** Rectangle)

InkDisp オブジェクト内のすべてのストローク、個々のストローク、または InkStrokes コレクションの境界ボックスを、インクスペース座標で取得します。(IInkStrokeDisp.GetBoundingBox)

BoundingBoxModeInkBoundingBoxModein

省略可能。境界ボックスの計算に使用するストロークの特性を指定します。既定値は -1 で、ストロークのすべての特性を使用して境界ボックスを決定することを示します。

境界ボックスの計算にストロークの特性を使用する方法の詳細については、BoundingBoxMode 列挙型を参照してください。

RectangleIInkRectangle**out

このメソッドが戻るとき、InkDisp オブジェクト、IInkStrokeDisp オブジェクト、または InkStrokes コレクションの境界ボックスを定義する矩形へのポインターが格納されます。

メモ IInkStrokeDisp オブジェクトの場合、返される境界ボックスはストロークの境界ボックスのコピーであるため、返された境界ボックスを変更してもストロークの位置には影響しません。

戻り値

このメソッドは、次のいずれかの値を返すことがあります。

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_INK_EXCEPTION
メソッド内で例外が発生しました。
E_UNEXPECTED
パラメーターまたはプロパティの型が想定外です。
REGDB_CLASSNOTREG
InkRectangle オブジェクトが登録されていません。

解説(Remarks)

境界ボックスがペン幅の影響を受ける場合、この幅は InkRenderer のビュー変換に合わせて拡大縮小されます。具体的には、ペン幅にビュー変換の行列式の平方根を乗じます。

メモ Windows Vista 以降のバージョンでは、GetBoundingBox メソッドはストロークの幅を考慮しません。
メモ ペン幅を明示的に設定していない場合、既定値は 53 です。正しい境界ボックスを得るには、ペン幅に行列式の平方根を乗ずる必要があります。境界ボックスの高さと幅は、各方向にこの値の半分ずつ拡大されます。たとえば、ペン幅が 53、行列式の平方根が 50、境界ボックスが (0, 0, 1000, 1000) である場合を考えます。各方向へのペン幅による境界ボックスの調整量は (53 * 50) / 2 として計算され、右辺と下辺はさらに 1 ずつ加算されます。その結果、描画される境界ボックスは (-1325, -1325, 2326, 2326) になります。
vtbl 21 HRESULT FindIntersections(IInkStrokes* Strokes, VARIANT* Intersections)

この IInkStrokeDisp オブジェクトが、特定の InkStrokes コレクション内の他の IInkStrokeDisp オブジェクトと交差する点を取得します。

StrokesIInkStrokes*inoptional

このストロークとの交差点を計算する対象となるストロークのコレクション。NULL の場合は、InkDisp オブジェクト内のすべてのストロークが使用されます。

メモ 対象のストロークコレクションは、交差を調べるストロークと同じ InkDisp オブジェクトに属している必要があります。同じ InkDisp オブジェクトのものでない場合は、E_INK_MISMATCHED_INK_OBJECT が返されます (以下の「HRESULT value」を参照)。FindIntersections メソッドは、対象のストロークコレクションが同じ InkDisp オブジェクトに属することを要求する唯一の Tablet PC アプリケーションプログラミングインターフェース (API) です。
IntersectionsVARIANT*out

このメソッドが戻るとき、このストロークが対象のストロークコレクション内のストロークと交差する位置を示す浮動小数点インデックス値の配列が格納されます。

浮動小数点インデックスとは、ストローク内の 2 点の間のどこかの位置を表す浮動小数点値です。たとえば、0.0 がストロークの最初の点、1.0 が 2 番目の点を表す場合、0.5 は最初の点と 2 番目の点のちょうど中間を表します。同様に、37.25 という浮動小数点インデックス値は、ストロークの 37 番目の点と 38 番目の点を結ぶ線分上の 25 パーセントの位置を表します。

VARIANT 構造体の詳細については、「COM ライブラリの使用」を参照してください。

戻り値

このメソッドは、次のいずれかの値を返すことがあります。

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_OUTOFMEMORY
IInkStrokeDisp ハンドルヘルパーオブジェクトを割り当てられません。
E_UNEXPECTED
パラメーターまたはプロパティの型が想定外です。
E_INK_EXCEPTION
メソッド内で例外が発生しました。
E_INK_INCOMPATIBLE_OBJECT
strokes パラメーターが、互換性のある InkDisp オブジェクトを指していません。
E_INK_MISMATCHED_INK_OBJECT
InkStrokes コレクションの InkDisp オブジェクトと、この IInkStrokeDisp オブジェクトが一致しません。

解説(Remarks)

このメソッドで判定できるのは交差点のみです。

vtbl 22 HRESULT GetRectangleIntersections(IInkRectangle* Rectangle, VARIANT* Intersections)

IInkStrokeDisp オブジェクトが指定した矩形と交差する点を検出します。

RectangleIInkRectangle*inoptionalヒットテスト領域を表す、インクスペース座標での矩形。
IntersectionsVARIANT*out

このメソッドが戻るとき、ストロークが rectangle と交差する位置を示す VARIANT 配列が格納されます。開始位置の浮動小数点インデックスは偶数番目の要素に、終了位置の浮動小数点インデックスは奇数番目の要素に格納されます。最初のインデックスの組が最初の交差を表します。

VARIANT 構造体の詳細については、「COM ライブラリの使用」を参照してください。

戻り値

このメソッドは、次のいずれかの値を返すことがあります。

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_OUTOFMEMORY
Stroke ハンドラーヘルパーオブジェクトを割り当てられません。
E_UNEXPECTED
パラメーターまたはプロパティの型が想定外です。
E_INK_EXCEPTION
メソッド内で例外が発生しました。

解説(Remarks)

このメソッドは、ストロークが指定した矩形と交差する位置を示す配列を返します。矩形と交差するストロークの各セグメントは、開始インデックスと終了インデックスが交互に並ぶ 1 組のインデックスとして表されます。

ストロークがテスト矩形の内側から始まる場合、最初のインデックスには -1 が設定されます。ストロークがテスト矩形の内側で終わる場合、最後のインデックスには -1 が設定されます。ストローク全体がテスト矩形の外側にある場合は、空の配列が返されます。たとえば、ストロークがテスト矩形の内側から始まり、矩形の境界を出て、再び内側に戻り、再度外に出る場合、GetRectangleIntersections メソッドは、矩形内に含まれる 2 つのセグメントを表す {-1, 1.4, 5.5, 10.1} のような値を返すことがあります。

vtbl 23 HRESULT Clip(IInkRectangle* Rectangle)

IInkStrokeDisp オブジェクトまたは InkStrokes コレクションのうち、矩形の外側にある部分を削除します。(IInkStrokeDisp.Clip)

RectangleIInkRectangle*inoptionalストロークをクリップする基準となる矩形を指定します。この矩形の外側の部分がクリップされます。矩形はインクスペース座標で指定します。

戻り値

このメソッドは、次のいずれかの値を返すことがあります。

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
REGDB_CLASSNOTREG
InkDisp オブジェクトが登録されていません。
E_INVALIDARG
クリップ矩形が無効です。
E_INK_EXCEPTION
メソッド内で例外が発生しました。
E_FAIL
原因不明のエラーが発生しました。

解説(Remarks)

InkDisp オブジェクトの場合、矩形と交差するすべてのストロークは交差点で分割されます。矩形の外側にあるストロークの部分はすべて InkDisp オブジェクトから削除されます。このメソッドは、ストロークが矩形と交差する位置に新しい点を追加することがあります。InkDisp オブジェクトに対して Clip メソッドを呼び出した後、InkDisp オブジェクトのストロークコレクション内のストローク ID は一意であることが保証されますが、その他の情報が保持されることは保証されません。

このメソッドは、クリップ時にペン幅を考慮しません。クリップされるのは実際の インク またはストロークのデータのみです。

IInkStrokeDisp オブジェクトまたは InkStrokes コレクションの場合、Clip メソッドは親の InkDisp オブジェクトを更新します。InkDisp オブジェクトからインクが削除されると、その InkDisp オブジェクトに対して定義されている IInkStrokeDisp オブジェクトや InkStrokes コレクションが無効になることがあります。

インクデータの詳細については、「インクデータ」を参照してください。

vtbl 24 HRESULT HitTestCircle(INT X, INT Y, FLOAT Radius, VARIANT_BOOL* Intersects)

ストロークが指定した円の内側に完全に含まれるか、またはその円と交差するかを判定します。

XINTinヒットテスト用の円の中心の x 座標 (インクスペース座標)。
YINTinヒットテスト用の円の中心の y 座標 (インクスペース座標)。
RadiusFLOATinヒットテストに使用する円の半径。
IntersectsVARIANT_BOOL*outストロークが円と交差するか、円の内側にある場合は VARIANT_TRUE。それ以外の場合は VARIANT_FALSE

戻り値

このメソッドは、次のいずれかの値を返すことがあります。

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_INK_EXCEPTION
メソッド内で例外が発生しました。
E_UNEXPECTED
パラメーターまたはプロパティの型が想定外です。
vtbl 25 HRESULT NearestPoint(INT X, INT Y, FLOAT* Distance, FLOAT* Point)

指定した点に最も近いストローク上の位置を検出し、その点からストロークまでの距離を返します。すべてインクスペース座標で扱います。

XINTinテストする点の、インクスペースでの x 座標。
YINTinテストする点の、インクスペースでの y 座標。
DistanceFLOAT*inout省略可能。点からストロークまでの距離。このパラメーターには NULL を指定できます。既定値は 0 です。
PointFLOAT*out

このメソッドが戻るとき、ストローク上の最も近い位置を表す浮動小数点インデックス値が格納されます。

浮動小数点インデックスとは、ストローク内の 2 点の間のどこかの位置を表す浮動小数点値です。たとえば、0.0 がストロークの最初の点、1.0 が 2 番目の点を表す場合、0.5 は最初の点と 2 番目の点のちょうど中間を表します。同様に、37.25 という浮動小数点インデックス値は、ストロークの 37 番目の点と 38 番目の点を結ぶ線分上の 25 パーセントの位置を表します。

戻り値

このメソッドは、次のいずれかの値を返すことがあります。

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

解説(Remarks)

distance パラメーターは、点からストロークの外形までの距離を表します。これは、 2 点間の距離からストロークの幅の半分を引いた値です。

vtbl 26 HRESULT Split(FLOAT SplitAt, IInkStrokeDisp** NewStroke)

指定した位置でストロークを分割します。

SplitAtFLOATin

ストロークを分割する位置を表す浮動小数点インデックス値。

メモ 浮動小数点インデックスとは、ストローク内の 2 点の間のどこかの位置を表す浮動小数点値です。たとえば、0.0 がストロークの最初の点、1.0 が 2 番目の点を表す場合、0.5 は最初の点と 2 番目の点のちょうど中間を表します。同様に、37.25 という浮動小数点インデックス値は、ストロークの 37 番目の点と 38 番目の点を結ぶ線分上の 25 パーセントの位置を表します。
NewStrokeIInkStrokeDisp**outこのメソッドが戻るとき、分割操作によって作成された新しい IInkStrokeDisp オブジェクトへのポインターが格納されます。

戻り値

このメソッドは、次のいずれかの値を返すことがあります。

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_OUTOFMEMORY
Stroke ハンドラーヘルパーオブジェクトを割り当てられません。
E_INVALIDARG
パラメーターが無効です。
E_UNEXPECTED
パラメーターまたはプロパティの型が想定外です。
E_INK_EXCEPTION
メソッド内で例外が発生しました。

解説(Remarks)

このメソッドは、ストロークセット内の元のストロークの直後に新しいストロークを挿入し、以降のストロークインデックスを番号付け直します。

IInkStrokeDisp を分割すると、ストロークの前半部分は元の IInkStrokeDisp の ID をそのまま保持します。IInkStrokeDisp の後半部分は、既存の最大の IInkStrokeDisp ID より 1 大きい ID を持つ新しい IInkStrokeDisp になります。元の IInkStrokeDisp が (Ink.Strokes 以外の) InkStrokes コレクションに含まれていた場合、そのコレクションに残るのは前半部分のみです。

vtbl 27 HRESULT GetPacketDescriptionPropertyMetrics(LPWSTR PropertyName, INT* Minimum, INT* Maximum, TabletPropertyMetricUnit* Units, FLOAT* Resolution)

指定したパケット記述の種類に対するメトリックを取得します。

PropertyNameLPWSTRin

メトリックを取得するプロパティを識別する、PacketProperty 定数のグローバル一意識別子 (GUID)。

BSTR データ型の詳細については、「COM ライブラリの使用」を参照してください。

MinimumINT*outこのプロパティについてタブレットが報告する最小値 (論理単位)。たとえば、x 値を 0 から 9000 の範囲で報告するタブレットの論理最小値は 0 です。
MaximumINT*outこのプロパティについてタブレットが報告する最大値 (論理単位)。たとえば、x 値を 0 から 9000 の範囲で報告するタブレットの論理最大値は 9000 です。
UnitsTabletPropertyMetricUnit*outインチや度など、プロパティの物理単位。プロパティの単位の一覧については、TabletPropertyMetricUnit 列挙型を参照してください。
ResolutionFLOAT*outunits メンバーに対する解像度 (増分値)。たとえば、400 dpi (1 インチあたりのドット数) で報告するタブレットの resolution 値は 400 になります。

戻り値

このメソッドは、次のいずれかの値を返すことがあります。

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_OUTOFMEMORY
この要求を完了するために必要なメモリを割り当てられません。
CO_E_CLASSSTRING
GUID の形式が無効です。
E_INVALIDARG
そのプロパティはコレクションに存在しません。
E_INK_EXCEPTION
処理中に例外が発生しました。
vtbl 28 HRESULT GetPoints(INT Index, INT Count, VARIANT* Points)

ストロークを構成する点を取得します。

IndexINTin省略可能。ストロークを構成する点の配列内の開始インデックス。既定値の ISC_FirstElement (InkSelectionConstants 列挙型で定義) は最初の点を指定します。
CountINTin省略可能。返す点の数。既定値の ISC_AllElements (InkSelectionConstants 列挙型で定義) は、ストロークデータを構成するすべての点を指定します。
PointsVARIANT*out

このメソッドが戻るとき、ストロークの点の配列が格納されます。

VARIANT 構造体の詳細については、「COM ライブラリの使用」を参照してください。

戻り値

このメソッドは、次のいずれかの値を返すことがあります。

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_OUTOFMEMORY
点用のメモリを割り当てられません。
E_INVALIDARG
インデックスが無効です (範囲外)。
E_INK_EXCEPTION
メソッド内で例外が発生しました。
E_UNEXPECTED
パラメーターまたはプロパティの型が想定外です。
vtbl 29 HRESULT SetPoints(VARIANT Points, INT Index, INT Count, INT* NumberOfPointsSet)

X、Y 値の配列を使用して IInkStrokeDisp の点を設定します。

PointsVARIANTin

index 以降のストロークの点を置き換える新しい点の配列。これは Long 型の配列を含む VARIANT で、点は x0, y0, x1, y1, x2, y2 のように値が交互に並ぶ形式で表されます。

VARIANT 構造体の詳細については、「COM ライブラリの使用」を参照してください。

IndexINTin省略可能。変更するストローク内の最初の点の、0 から始まるインデックス。既定値の ISC_FirstElement (ItemSelectionConstants 列挙型で定義) は、ストロークの最初の点を変更することを指定します。
CountINTin省略可能。変更するストローク内の点の数。既定値の ISC_AllElements (ItemSelectionConstants 列挙型で定義) は、ストローク内のすべての点を変更することを指定します。
NumberOfPointsSetINT*outこのメソッドが戻るとき、実際に設定されたパケットの数が格納されます。

戻り値

このメソッドは、次のいずれかの値を返すことがあります。

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_INVALIDARG
index が無効 (範囲外) であるか、points パラメーターが正しい形式ではありませんでした。
E_INK_EXCEPTION
メソッド内で例外が発生しました。

解説(Remarks)

このメソッドは、ストローク内の点の数を変更しません。ストローク内の点の数を変更するには、新しいストロークを作成するか、ストロークを分割する必要があります。

このメソッドではストロークを切り詰めることはできません。点の配列の要素数がストロークの点の数より少ない場合、ストロークの残りの点は変更されません。

このメソッドではストロークを拡張することもできません。点の配列の要素数がストロークの点の数より多い場合、余分な点は使用されません。カウントが配列内の点の数を超える場合は、配列内の点の数だけが変更されます。

SetPoints を呼び出した後にストロークを描画するには、InvalidateRect 関数を呼び出してください。

vtbl 30 HRESULT GetPacketData(INT Index, INT Count, VARIANT* PacketData)

IInkStrokeDisp オブジェクト内の指定した範囲のパケットについて、パケットデータを取得します。

IndexINTin省略可能。ストローク内のパケットを指す、0 から始まるインデックスの開始位置。既定値の ISC_FirstElement (InkSelectionConstants 列挙型で定義) は最初のパケットを指定します。
CountINTin省略可能。startingIndex パラメーターで指定したパケットから数えて、返すポイントパケットデータセットの数。既定値の ISC_AllElements (InkSelectionConstants 列挙型で定義) は、ストロークデータを構成するすべての点を指定します。
PacketDataVARIANT*out

このメソッドが戻るとき、ストローク内の要求された点のパケットデータを含む符号付き 32 ビット整数の配列が格納されます。配列には、1 番目の点のデータ、2 番目の点のデータ…という順で格納されます。

VARIANT 構造体の詳細については、「COM ライブラリの使用」を参照してください。

戻り値

このメソッドは、次のいずれかの値を返すことがあります。

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_FAIL
原因不明のエラーが発生しました。
E_OUTOFMEMORY
Stroke ハンドラーヘルパーオブジェクトを割り当てられません。
E_INVALIDARG
ストロークが無効です。
E_INK_EXCEPTION
メソッド内で例外が発生しました。
E_UNEXPECTED
パラメーターまたはプロパティの型が想定外です。

解説(Remarks)

ストローク内のパケット数が startingIndex パラメーターと pointCount パラメーターの合計より少ない場合、返されるデータ配列には要求した数より少ない点のパケット情報が含まれます。

パケットデータの記述を取得するには、ストロークの PacketDescription プロパティを使用します。このプロパティは、GetPacketData メソッドが各点についてどのプロパティ値を返すかを示す、グローバル一意識別子 (GUID) の配列を返します。利用できるパケットプロパティの GUID は PacketProperty 定数に含まれています。

vtbl 31 HRESULT GetPacketValuesByProperty(LPWSTR PropertyName, INT Index, INT Count, VARIANT* PacketValues)

ストローク内の 1 つ以上のパケットから、指定したパケットプロパティのデータを取得します。

PropertyNameLPWSTRin

どのパケットデータを取得するかを選択するために使用された、PacketProperty 定数の識別子。

BSTR データ型の詳細については、「COM ライブラリの使用」を参照してください。

IndexINTin省略可能。ストローク内のパケットを指す、0 から始まるインデックスの開始位置。既定値の ISC_FirstElement (InkSelectionConstants 列挙型で定義) は最初のパケットを指定します。
CountINTin省略可能。ストロークデータを構成する点の数。既定値の ISC_AllElements (InkSelectionConstants 列挙型で定義) は、ストロークデータを構成するすべての点を指定します。
PacketValuesVARIANT*out

このメソッドが戻るとき、ストロークから要求された各点について、指定された PacketProperty の値を示す符号付き 32 ビット整数の配列が格納されます。

VARIANT 構造体の詳細については、「COM ライブラリの使用」を参照してください。

戻り値

このメソッドは、次のいずれかの値を返すことがあります。

戻り値 説明
S_OK
成功しました。
TPC_E_INVALID_STROKE
ストロークが無効です。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_FAIL
原因不明のエラーが発生しました。
E_OUTOFMEMORY
パケットデータ配列を割り当てられません。
E_INVALIDARG
インデックス、カウント、またはパケットプロパティが無効です。
E_INK_EXCEPTION
メソッド内で例外が発生しました。
CO_E_CLASSSTRING
GUID の形式が無効です。

解説(Remarks)

特定のパケットプロパティは、ある IInkStrokeDisp オブジェクトでは利用できない場合があります。Tablet PC には、ユーザー入力用のタブレットが複数接続されていることがあります。InkTablets コレクションには、Tablet PC に接続されているすべてのタブレットの一覧が含まれます。特定のパケットプロパティが、特定の IInkTablet オブジェクトで、または利用可能なすべてのタブレットでサポートされているかを判定するには、IsPacketPropertySupported メソッドを使用します。また、新しいストロークでどのパケットプロパティを収集するかを制御するには、インクコレクターDesiredPacketDescription プロパティを使用します。

vtbl 32 HRESULT SetPacketValuesByProperty(LPWSTR bstrPropertyName, VARIANT PacketValues, INT Index, INT Count, INT* NumberOfPacketsSet)

特定のプロパティのパケット値を変更します。

bstrPropertyNameLPWSTRinどのパケットデータを設定するかを選択するために使用する、PacketProperty 定数のグローバル一意識別子 (GUID)。このストロークに定義されているプロパティを確認するには PacketDescription を使用します。
PacketValuesVARIANTinパケットデータ値の配列。配列内の値のいずれかがプロパティの最小値または最大値の範囲外である場合、このメソッドは失敗します。プロパティの値の範囲を確認するには、GetPacketDescriptionPropertyMetrics メソッドを呼び出します。
IndexINTin省略可能。変更するパケットの開始インデックス。既定値の ISC_FirstElement (ItemSelectionConstants 列挙型で定義) は最初のパケットを指定します。
CountINTin省略可能。変更するストローク内のパケット数と、PacketValues 内の値の数を指定します。既定値の ISC_AllElements (ItemSelectionConstants 列挙型で定義) は、すべてのパケットを変更することを指定します。
NumberOfPacketsSetINT*outこのメソッドが戻るとき、実際に設定されたパケットの数が格納されます。

戻り値

このメソッドは、次のいずれかの値を返すことがあります。

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
CO_E_CLASSSTRING
GUID の形式が無効です。
E_INVALIDARG
VARIANT、インデックス (範囲外)、またはプロパティ GUID が無効です。
E_INK_EXCEPTION
メソッド内で例外が発生しました。
vtbl 33 HRESULT GetFlattenedBezierPoints(INT FittingError, VARIANT* FlattenedBezierPoints)

InkDisp オブジェクト内のすべてのストローク、個々のストローク、または InkStrokes コレクションの境界ボックスを、インクスペース座標で取得します。

FittingErrorINTin省略可能。ベジェ制御点とストロークの点との間の最大距離 (精度)。インクスペース単位で指定します。これは曲線フィッティングの誤差レベルとも呼ばれます。既定値は 0 です。
FlattenedBezierPointsVARIANT*out

このメソッドが戻るとき、IInkStrokeDisp オブジェクトのベジェ曲線表現を描画するのに使用された点を示す点の配列が格納されます。VARIANT の結果には、ベジェ点が x1, y1, x2, y2 のような形式で並ぶ配列が含まれます。

VARIANT 構造体の詳細については、「COM ライブラリの使用」を参照してください。

戻り値

このメソッドは、次のいずれかの値を返すことがあります。

戻り値 説明
S_OK
成功しました。
TPC_E_INVALID_STROKE
ストロークが無効です。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_FAIL
原因不明のエラーが発生しました。
E_OUTOFMEMORY
Stroke ハンドラーヘルパーオブジェクトを割り当てられません。
E_INVALIDARG
フィッティング誤差が範囲外でした。
E_INK_EXCEPTION
メソッド内で例外が発生しました。
E_UNEXPECTED
パラメーターまたはプロパティの型が想定外です。

解説(Remarks)

fittingError パラメーターは、0 から 500 の範囲で設定するのが理想的です。値が 500 を超えると、描画時にストロークが歪んだり粗く見えたりすることがあります。フィッティング誤差レベルを 0 に設定するとストロークは最も滑らかになりますが、描画パフォーマンスは最も低下します。

vtbl 34 HRESULT Transform(IInkTransform* Transform, VARIANT_BOOL ApplyOnPenWidth)

IInkStrokeDisp オブジェクトまたは InkStrokes コレクションに線形変換を適用します。この変換には、拡大縮小、回転、平行移動、およびそれらの組み合わせを指定できます。(IInkStrokeDisp.Transform)

TransformIInkTransform*inoptionalストロークに適用する変換。(これは InkTransform オブジェクトで、XFORM 構造体に対応します。) この変換は点とペン幅の両方に適用されます (ApplyOnPenWidthVARIANT_TRUE の場合)。
ApplyOnPenWidthVARIANT_BOOLin省略可能。ストロークの InkDrawingAttributes にあるインクの幅にも変換を適用する場合は VARIANT_TRUE。それ以外の場合は VARIANT_FALSE。既定値は VARIANT_FALSE です。

戻り値

このメソッドは、次のいずれかの値を返すことがあります。

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_INVALIDARG
引数が無効です。
E_UNEXPECTED
パラメーターまたはプロパティの型が想定外です。
E_INK_EXCEPTION
メソッド内で例外が発生しました。
vtbl 35 HRESULT ScaleToRectangle(IInkRectangle* Rectangle)

IInkStrokeDisp オブジェクトまたは InkStrokes コレクションを、指定した InkRectangle オブジェクトに収まるように拡大縮小します。(IInkStrokeDisp.ScaleToRectangle)

RectangleIInkRectangle*inoptionalストロークまたはストロークコレクションを拡大縮小して合わせる、インクスペース上の InkRectangle。ストロークの境界ボックスがこの矩形に一致するよう、ストロークは拡大縮小および平行移動されます。

戻り値

このメソッドは、次のいずれかの値を返すことがあります。

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_INK_EXCEPTION
メソッド内で例外が発生しました。
vtbl 36 HRESULT Move(FLOAT HorizontalComponent, FLOAT VerticalComponent)

IInkStrokeDisp オブジェクトまたは InkStrokes コレクションのインクに平行移動を適用します。(IInkStrokeDisp.Move)

HorizontalComponentFLOATinビュー変換を X 方向に平行移動させる距離 (インクスペース座標)。
VerticalComponentFLOATinビュー変換を Y 方向に平行移動させる距離 (インクスペース座標)。

戻り値

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

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

回転の中心点を基準に、指定した角度 (度単位) でインクを回転させます。(IInkStrokeDisp.Rotate)

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

戻り値

このメソッドは、次のいずれかの値を返すことがあります。

戻り値 説明
S_OK
成功しました。
E_INK_EXCEPTION
メソッド内で例外が発生しました。
vtbl 38 HRESULT Shear(FLOAT HorizontalMultiplier, FLOAT VerticalMultiplier)

指定した水平方向および垂直方向の係数で、ストロークのインクをせん断 (シア) させます。(IInkStrokeDisp.Shear)

HorizontalMultiplierFLOATinせん断の水平方向の係数。
VerticalMultiplierFLOATinせん断の垂直方向の係数。

戻り値

このメソッドは、次のいずれかの値を返すことがあります。

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

解説(Remarks)

このメソッドで適用される変換が純粋なせん断になるのは、いずれかのパラメーターが 0 の場合だけです。原点にある矩形に適用する場合、shearY 係数が 0 のとき、この変換は下辺を矩形の高さの shearX 倍だけ水平に移動させます。shearX 係数が 0 のときは、右辺を矩形の幅の shearY 倍だけ垂直に移動させます。

メモ 両方のパラメーターが 0 以外の場合、結果は直感的でないことがあります。
せん断が逆変換不可能な場合、このメソッドは例外をスローします。shearX パラメーターと shearY パラメーターの積が 1 に等しい場合、せん断は逆変換不可能です。
vtbl 39 HRESULT ScaleTransform(FLOAT HorizontalMultiplier, FLOAT VerticalMultiplier)

指定した水平方向および垂直方向の係数を、変換またはインクに適用します。(IInkStrokeDisp.ScaleTransform)

HorizontalMultiplierFLOATin変換の水平方向を拡大縮小する係数。
VerticalMultiplierFLOATin変換の垂直方向を拡大縮小する係数。

戻り値

このメソッドは、次のいずれかの値を返すことがあります。

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

解説(Remarks)

IInkStrokeDisp クラスおよび InkStrokes クラスの場合、このメソッドは原点を基準としてストローク内の点を拡大縮小します。したがって、HorizontalMultiplier パラメーターが 2.0 の場合、ストロークの幅は 2 倍になり、原点からの水平方向の距離も 2 倍になります。ストロークの相対位置を制御するには、このメソッドを Move メソッドと併用します。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IInkStrokeDisp "{43242FEA-91D1-4A72-963E-FBB91829CFA2}"
#usecom global IInkStrokeDisp IID_IInkStrokeDisp "{}"
#comfunc global IInkStrokeDisp_get_ID                               7 var
#comfunc global IInkStrokeDisp_get_BezierPoints                     8 var
#comfunc global IInkStrokeDisp_get_DrawingAttributes                9 sptr
#comfunc global IInkStrokeDisp_putref_DrawingAttributes             10 sptr
#comfunc global IInkStrokeDisp_get_Ink                              11 sptr
#comfunc global IInkStrokeDisp_get_ExtendedProperties               12 sptr
#comfunc global IInkStrokeDisp_get_PolylineCusps                    13 var
#comfunc global IInkStrokeDisp_get_BezierCusps                      14 var
#comfunc global IInkStrokeDisp_get_SelfIntersections                15 var
#comfunc global IInkStrokeDisp_get_PacketCount                      16 var
#comfunc global IInkStrokeDisp_get_PacketSize                       17 var
#comfunc global IInkStrokeDisp_get_PacketDescription                18 var
#comfunc global IInkStrokeDisp_get_Deleted                          19 var
#comfunc global IInkStrokeDisp_GetBoundingBox                       20 int,sptr
#comfunc global IInkStrokeDisp_FindIntersections                    21 sptr,var
#comfunc global IInkStrokeDisp_GetRectangleIntersections            22 sptr,var
#comfunc global IInkStrokeDisp_Clip                                 23 sptr
#comfunc global IInkStrokeDisp_HitTestCircle                        24 int,int,float,var
#comfunc global IInkStrokeDisp_NearestPoint                         25 int,int,var,var
#comfunc global IInkStrokeDisp_Split                                26 float,sptr
#comfunc global IInkStrokeDisp_GetPacketDescriptionPropertyMetrics  27 wstr,var,var,var,var
#comfunc global IInkStrokeDisp_GetPoints                            28 int,int,var
#comfunc global IInkStrokeDisp_SetPoints                            29 int,int,int,var
#comfunc global IInkStrokeDisp_GetPacketData                        30 int,int,var
#comfunc global IInkStrokeDisp_GetPacketValuesByProperty            31 wstr,int,int,var
#comfunc global IInkStrokeDisp_SetPacketValuesByProperty            32 wstr,int,int,int,var
#comfunc global IInkStrokeDisp_GetFlattenedBezierPoints             33 int,var
#comfunc global IInkStrokeDisp_Transform                            34 sptr,int
#comfunc global IInkStrokeDisp_ScaleToRectangle                     35 sptr
#comfunc global IInkStrokeDisp_Move                                 36 float,float
#comfunc global IInkStrokeDisp_Rotate                               37 float,float,float
#comfunc global IInkStrokeDisp_Shear                                38 float,float
#comfunc global IInkStrokeDisp_ScaleTransform                       39 float,float
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。
; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。