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

IInkDisp

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

公式ドキュメント

。 (IInkDisp)

メソッド 25

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

vtbl 7 HRESULT get_Strokes(IInkStrokes** Strokes)

オブジェクトに含まれる、またはオブジェクトの作成に使用されたストロークのコレクションを取得します。 (IInkDisp.get_Strokes)

StrokesIInkStrokes**outインクに含まれるすべてのストロークのコレクションを受け取るポインタである。

解説(Remarks)

このストロークのコレクションは、InkDisp オブジェクトに含まれるストロークのコピーである場合と、そのオブジェクトまたはコレクションの作成に使用されたストロークである場合があります。

メモ InkDisp オブジェクトの Strokes プロパティは、InkDisp オブジェクトが実際に操作しているコレクションではなく、そのコピーを返します。つまり、このコレクションにストロークを追加したり削除したりしても、InkDisp オブジェクトのストロークには影響しません。ストロークを追加または削除するには、AddStrokesAtRectangleDeleteStrokeDeleteStrokes などの InkDisp のメソッドを使用してください。ただし、コレクション内の各ストロークは、元の IInkStrokeDisp オブジェクトへの参照です。
vtbl 8 HRESULT get_ExtendedProperties(IInkExtendedProperties** Properties)

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

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

解説(Remarks)

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

vtbl 9 HRESULT get_Dirty(VARIANT_BOOL* Dirty)

InkDisp Class オブジェクトのストロークが、インクを最後に保存した時点から変更されているかどうかを示す値を取得または設定します。 (Get)

DirtyVARIANT_BOOL*out前回の保存以降にインクが変更されたかどうかを受け取る VARIANT_BOOL へのポインタである。

解説(Remarks)

インクが保存されると、dirty フラグは自動的にクリアされ、このプロパティの値は VARIANT_FALSE になります。インクを保存するには、Save Method メソッドを呼び出します。

vtbl 10 HRESULT put_Dirty(VARIANT_BOOL Dirty)

InkDisp Class オブジェクトのストロークが、インクを最後に保存した時点から変更されているかどうかを示す値を取得または設定します。 (Put)

DirtyVARIANT_BOOLinインクの変更フラグ(ダーティ状態)に設定する値を指定する VARIANT_BOOL である。

解説(Remarks)

インクが保存されると、dirty フラグは自動的にクリアされ、このプロパティの値は VARIANT_FALSE になります。インクを保存するには、Save Method メソッドを呼び出します。

vtbl 11 HRESULT get_CustomStrokes(IInkCustomStrokes** ppunkInkCustomStrokes)

インクとともに永続化されるカスタムストロークのコレクションを取得します。

ppunkInkCustomStrokesIInkCustomStrokes**outインクに含まれる名前付きストローク集合のコレクションを受け取るポインタである。
vtbl 12 HRESULT GetBoundingBox(InkBoundingBoxMode BoundingBoxMode, IInkRectangle** Rectangle)

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

BoundingBoxModeInkBoundingBoxModein

省略可能。境界ボックスの計算に使用するストロークの特性を指定します。境界ボックスの計算にストロークの特性をどのように使用するかの詳細については、BoundingBoxMode 列挙型を参照してください。

既定値は -1 (IBBM_DEFAULT) で、ストロークのすべての特性を使用して境界ボックスを指定することを意味します。

RectangleIInkRectangle**out

このメソッドが返されるときに、InkDisp オブジェクト、IInkStrokeDisp オブジェクト、または InkStrokes コレクションの境界ボックスを定義する四角形が格納されます。

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

戻り値

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

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

解説(Remarks)

境界ボックスがペンの幅の影響を受ける場合、その幅は InkRenderer のビュー変換に合わせて適切にスケーリングされます。これは、ペンの幅にビュー変換の行列式の平方根を掛けることで行われます。

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

InkDisp オブジェクトの Strokes コレクションから InkStrokes コレクションを削除します。

StrokesIInkStrokes*inoptional省略可能。InkDisp オブジェクトから削除するストロークのコレクションを指定します。既定値は NULL です。

戻り値

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

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_OUTOFMEMORY
操作の実行に使用するメモリを割り当てられません。
E_FAIL
不特定のエラーが発生しました。
E_INK_MISMATCHED_INK_OBJECT
ストロークの InkDisp オブジェクトは、対象の InkDisp オブジェクトと一致している必要があります。
E_INK_EXCEPTION
メソッド内部で例外が発生しました。
E_UNEXPECTED
予期しないパラメーターまたはプロパティの型です。

解説(Remarks)

InkStrokes コレクションが渡されなかった場合、このメソッドは InkDisp オブジェクト内のすべてのストロークを削除します。一度に 1 つのストロークだけを削除するには、DeleteStroke メソッドを呼び出します。

削除されたストロークが InkDisp オブジェクトのストロークコレクションの末尾に位置していない場合、InkDisp オブジェクトは InkDisp オブジェクト内に残っているストロークのインデックスを振り直します。

メモ コレクションに含まれるストロークが InkDisp オブジェクトから削除されると、InkStrokes コレクションの内容は無効になります。
ユーザーがインクを書き込んでいる最中に DeleteStrokes を呼び出すと、エラーになることがあります。
vtbl 14 HRESULT DeleteStroke(IInkStrokeDisp* Stroke)

InkDisp オブジェクトから IInkStrokeDisp オブジェクトを削除します。

StrokeIInkStrokeDisp*inoptionalInkDisp オブジェクトから削除するストロークです。

戻り値

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

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_FAIL
不特定のエラーが発生しました。
E_INK_MISMATCHED_INK_OBJECT
ストロークの InkDisp オブジェクトは、対象の InkDisp オブジェクトと一致している必要があります。
E_INK_EXCEPTION
メソッド内部で例外が発生しました。
E_UNEXPECTED
予期しないパラメーターまたはプロパティの型です。

解説(Remarks)

このメソッドは 1 つのストロークだけを削除します。ストロークのコレクションを削除するには、DeleteStrokes メソッドを呼び出します。

vtbl 15 HRESULT ExtractStrokes(IInkStrokes* Strokes, InkExtractFlags ExtractFlags, IInkDisp** ExtractedInk)

抽出するストロークを、指定されたストロークのコレクションによって決定し、InkDisp Class から切り取りまたはコピーして新しい InkDisp Class に格納するストロークを指定します。

StrokesIInkStrokes*inoptional省略可能。抽出するストロークのコレクションを指定します。既定値は 0 で、すべてのストロークを抽出することを示します。
ExtractFlagsInkExtractFlagsin省略可能。インクを新しい Ink オブジェクトに切り取るかコピーするかを指定する InkExtractFlags Enumeration 型を指定します。既定値は IEF_DEFAULT で、ストロークを切り取ります。
ExtractedInkIInkDisp**outこのメソッドが返されるときに、切り取りまたはコピーされた抽出済みストロークのコレクションを含む、新しい InkDisp Class オブジェクトへのポインターが格納されます。

戻り値

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

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_INK_MISMATCHED_INK_OBJECT
InkStrokes Collection コレクションの InkDisp Class オブジェクトは、対象の InkDisp Class と一致している必要があります。
E_INK_EXCEPTION
メソッド内部で例外が発生しました。
E_INK_SOME_STROKES_NOT_EXTRACTED
一部のストロークが抽出されませんでした。
E_OUTOFMEMORY
操作の実行に使用するメモリを割り当てられません。
E_INVALIDARG
抽出フラグが無効です。
REGDB_CLASSNOTREG
          <a href="/windows/desktop/tablet/inkdisp-class">InkDisp Class</a> オブジェクトのクラスが登録されていません。
vtbl 16 HRESULT ExtractWithRectangle(IInkRectangle* Rectangle, InkExtractFlags extractFlags, IInkDisp** ExtractedInk)

指定した四角形によって抽出するストロークを決定し、既存の InkDisp オブジェクトからストロークを切り取りまたはコピーして、新しい InkDisp オブジェクトに貼り付けます。

RectangleIInkRectangle*inoptionalInkDisp オブジェクトから抽出するインクの範囲を区切る InkRectangle オブジェクトを指定します。
extractFlagsInkExtractFlagsin省略可能。既存の InkDisp オブジェクトからインクを切り取るかコピーするかを決定する InkExtractFlags 列挙型を指定します。既定値は IEF_DEFAULT で、既存の InkDisp オブジェクトからストロークを切り取ります。
ExtractedInkIInkDisp**outこのメソッドが返されるときに、抽出されたストロークのコレクションを含む InkDisp オブジェクトへのポインターが格納されます。

戻り値

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

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_INK_EXCEPTION
メソッド内部で例外が発生しました。
E_INK_SOME_STROKES_NOT_EXTRACTED
一部のストロークが抽出されませんでした。
E_OUTOFMEMORY
操作を完了するためのメモリを割り当てられません。
E_INVALIDARG
抽出フラグが無効です。
REGDB_CLASSNOTREG
Ink オブジェクトが登録されていませんでした。

解説(Remarks)

新しい InkDisp オブジェクトは、元の InkDisp オブジェクトの描画属性、プロパティ、および座標を保持します。

このメソッドは、元のオブジェクトから削除または切り取られたストロークを含まない新しい InkDisp オブジェクトを作成する場合に便利です。

指定したストロークのコレクションからストロークを抽出するには、ExtractStrokes Method を呼び出します。

新しい InkDisp オブジェクトには、四角形の内側にあるストロークの部分だけが追加されます。

extractFlags パラメーターが RemoveFromOriginal または Default の場合、四角形と交差するストロークは分割され、四角形の内側の部分は既存の InkDisp オブジェクトから削除されます。

vtbl 17 HRESULT Clip(IInkRectangle* Rectangle)

IInkStrokeDisp オブジェクトまたは InkStrokes コレクションのうち、四角形の外側にある部分を削除します。 (IInkDisp.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 コレクションが無効になる場合があります。

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

vtbl 18 HRESULT Clone(IInkDisp** NewInk)

InkDisp オブジェクトの複製を作成します。

NewInkIInkDisp**outこのメソッドが返されるときに、新しく作成された InkDisp オブジェクトへのポインターが格納されます。

戻り値

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

戻り値 説明
S_OK
成功しました。
E_OUTOFMEMORY
操作を完了するためのメモリを割り当てられません。
E_FAIL
不特定のエラーが発生しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_INK_EXCEPTION
メソッド内部で例外が発生しました。
REGDB_CLASSNOTREG
InkDisp オブジェクトが登録されていませんでした。
E_UNEXPECTED
予期しないパラメーターまたはプロパティの型です。

解説(Remarks)

Clone メソッドは、InkDispInkDrawingAttributesInkRecognizerContext の各オブジェクトに定義されています。Clone メソッドは、元のオブジェクトの完全なコピーを返します。

ほとんどの場合、複製されたオブジェクトは元のオブジェクトの完全なコピーですが、2 つのオブジェクトの間に関連はありません。この例外の詳細については、このトピックの解説セクションを参照してください。

InkDisp オブジェクト: 複製された InkDisp オブジェクトが元のオブジェクトの完全なコピーにならない唯一のケースは、dirty 状態の InkDisp オブジェクトを複製した場合です。この場合、複製された InkDisp オブジェクトの Dirty プロパティは FALSE になります。複製された InkDisp オブジェクトのその他のプロパティはすべて完全なコピーです。

vtbl 19 HRESULT HitTestCircle(INT X, INT Y, FLOAT radius, IInkStrokes** Strokes)

指定した円の内部に完全に含まれるか、その円と交差する InkStrokes コレクションを取得します。

XINTinヒットテストに使用する円の中心の x 座標を、インク空間単位で指定します。
YINTinヒットテストに使用する円の中心の y 座標を、インク空間単位で指定します。
radiusFLOATinヒットテストに使用する円の半径を、インク空間単位で指定します。
StrokesIInkStrokes**outこのメソッドが返されるときに、指定した円の内部に完全に含まれるか、その円と交差するストロークのコレクションが格納されます。

戻り値

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

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_INK_EXCEPTION
メソッド内部で例外が発生しました。
E_INVALIDARG
表示ハンドルが無効です。
E_UNEXPECTED
予期しないパラメーターまたはプロパティの型です。

解説(Remarks)

ストロークが円と交差する場合は、そのストローク全体が返されます。

このメソッドは、ペンの幅全体、ベジエによる平滑化 (存在する場合)、ペン先の形状など、ストロークに適用される描画属性一式を考慮して交差を計算します。

ストロークまたはストロークのコレクションに対して回転またはせん断の変換を行った後は、変換後の x- 座標と y- 座標は元の座標と同心ではなくなります。そのため、radius 引数を x- 座標や y- 座標から計算しないでください。

指定したストロークのどの点がテスト領域と交差するかを判断するには、IInkStrokeDisp オブジェクトの HitTest メソッドを呼び出します。

アプリケーションは、結果として得られるストロークのコレクションを受け取るポインターを常に渡す必要があります。交差がない場合、コレクションの数は 0 になります。

vtbl 20 HRESULT HitTestWithRectangle(IInkRectangle* SelectionRectangle, FLOAT IntersectPercent, IInkStrokes** Strokes)

指定した四角形の内部に含まれるストロークを取得します。

SelectionRectangleIInkRectangle*inoptionalインク空間座標で指定する、InkRectangle 型の選択四角形です。
IntersectPercentFLOATinどのストロークをコレクションに含めるかを決定する、float 型または single 型のパーセント値です。四角形と交差するストロークは、そのストロークのうち四角形の内部に含まれる点の割合が IntersectPercent のパーセント値以上である場合に、コレクションに含まれます。
StrokesIInkStrokes**outこのメソッドが返されるときに、インクを構成するストロークのコレクションへのポインターが格納されます。

戻り値

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

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

解説(Remarks)

指定したストロークのどの点がテスト領域と交差するかを判断するには、IInkStrokeDisp オブジェクトの GetRectangleIntersections メソッドを呼び出します。このメソッドは、ストロークが指定した四角形と交差する点を取得します。

vtbl 21 HRESULT HitTestWithLasso(VARIANT Points, FLOAT IntersectPercent, VARIANT* LassoPoints, IInkStrokes** Strokes)

折れ線で囲まれた選択領域内のストロークを取得します。

PointsVARIANTin

ストロークを選択するために選択ツールで使用される点です。選択領域は、選択の境界線が最初に自己交差する部分の内側の領域です。境界線が自己交差しない場合、このメソッドは配列の末尾に点を追加し、最初の点から最後の点までを結ぶ直線を作成します。境界線が直線である (選択の境界線の内側に領域がない) 場合、ストロークは選択されません。

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

IntersectPercentFLOATin結果として得られるストロークのコレクションにストロークを含めるために、選択ツールの内部に含まれている必要があるストロークの点の割合です。0 (0) の場合、選択ツールの内部に含まれるストロークと選択ツールと交差するストロークがすべて、結果のストロークコレクションに含まれます。100 の場合、選択ツールに完全に含まれるストロークだけがコレクションに含まれます。選択ツールと交差するストロークは、そのストロークのうち選択ツールの内部に含まれる点の割合が percentIntersect のパーセント値以上である場合に、コレクションに含まれます。小数部を含むパーセント値は切り上げられます。
LassoPointsVARIANT*inoutoptional

省略可能。選択に使用された選択ツールの特定の部分を取得します。ユーザーはさまざまな形状の選択ツールを描画でき、複数回重なる場合もあるため、選択ツールのどの部分が選択に使用されたかを示すのに役立ちます。既定値は NULL ポインターで、情報を返さないことを意味します。

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

StrokesIInkStrokes**outこのメソッドが返されるときに、インクを構成するストロークのコレクションへのポインターが格納されます。

戻り値

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

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_INK_EXCEPTION
メソッド内部で例外が発生しました。
E_INVALIDARG
表示ハンドルが無効です。
E_OUTOFMEMORY
メモリを割り当てられません。
vtbl 22 HRESULT NearestPoint(INT X, INT Y, FLOAT* PointOnStroke, FLOAT* DistanceFromPacket, IInkStrokeDisp** Stroke)

InkDisp オブジェクト内で、指定した点に最も近い IInkStrokeDisp を取得します。必要に応じて、最も近い点のインデックスと、指定した点からストロークまでの距離も返します。

XINTinその点のインク空間での x- 座標です。
YINTinその点のインク空間での y- 座標を指定します。
PointOnStrokeFLOAT*inout省略可能。InkDisp オブジェクト内で、指定した点に最も近いストローク線上の位置を取得します。たとえば値 1.5 は、その位置がストロークの 1 番目と 2 番目のパケットのちょうど中間にあることを示します。このパラメーターには NULL を指定できます。既定値は 0 です。
DistanceFromPacketFLOAT*inout省略可能。インク空間で指定した点と、InkDisp オブジェクト内の最も近いストロークとの距離を取得します。このパラメーターには NULL を指定できます。既定値は 0 です。
StrokeIInkStrokeDisp**outこのメソッドが返されるときに、InkDisp オブジェクト内で指定した点に最も近い点を含む IInkStrokeDisp が格納されます。指定した点から等距離にある点を含むストロークが複数存在する場合、この結果の値は不定です。

戻り値

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

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_FAIL
不特定のエラーが発生しました。
E_INK_EXCEPTION
メソッド内部で例外が発生しました。
E_OUTOFMEMORY
メモリを割り当てられません。

解説(Remarks)

ストローク線上の位置は 2 つの物理的な座標点の間に来ることがあるため、出力の point パラメーターは浮動小数点数として定義されています。この値を使用して Split メソッドでストロークを分割したり、値を切り上げまたは切り捨ててストローク内のパケットのインデックスとして使用したりできます。

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

vtbl 23 HRESULT CreateStrokes(VARIANT StrokeIds, IInkStrokes** Strokes)

既存の IInkStrokeDisp オブジェクトから新しい InkStrokes コレクションを作成します。

StrokeIdsVARIANTin

省略可能。InkDisp オブジェクトに存在するストローク ID の配列を指定します。これらの ID を持つストロークが、新しい InkStrokes コレクションに追加されます。既定値は NULL です。

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

StrokesIInkStrokes**outこのメソッドが返されるときに、新しい InkStrokes コレクションへのポインターが格納されます。

戻り値

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

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_INVALIDARG
VARIANT の型が無効です (VT_ARRAY | VT_I4 のみサポートされます)。
E_INK_EXCEPTION
メソッド内部で例外が発生しました。
E_OUTOFMEMORY
新しい Strokes コレクションを作成するためのメモリを割り当てられません。
TPC_E_INVALID_STROKE
存在しないストローク ID がメソッドに渡されました。

解説(Remarks)

ids パラメーターが NULL または空の配列の場合、空の InkStrokes コレクションが作成されます。

vtbl 24 HRESULT AddStrokesAtRectangle(IInkStrokes* SourceStrokes, IInkRectangle* TargetRectangle)

指定した Strokes コレクションを、指定した四角形の位置でこの InkDisp オブジェクトに追加します。

SourceStrokesIInkStrokes*inoptionalインクに追加するストロークです。これらのソースストロークは、この InkDisp オブジェクトの末尾に追加されます。
TargetRectangleIInkRectangle*inoptionalストロークを追加する位置を示す、インク空間座標での InkRectangle です。四角形の座標が {0,0,0,0} の場合、実行時エラーが発生します。

戻り値

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

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_FAIL
不特定のエラーが発生しました。
E_INK_INCOMPATIBLE_OBJECT
ポインターが有効なオブジェクトを指していません。
E_INK_EXCEPTION
メソッド内部で例外が発生しました。
E_INVALIDARG
四角形の上辺と下辺が同じ値です。

解説(Remarks)

挿入時に、ストロークはその境界ボックスから指定した四角形に合わせて拡大縮小されます。

このメソッドは、単一の InkDisp オブジェクト内でストロークをコピーする場合にも使用できます。ソースとなるインクストロークは、別の InkDisp オブジェクトのものである必要はありません。

vtbl 25 HRESULT Save(InkPersistenceFormat PersistenceFormat, InkPersistenceCompressionMode CompressionMode, VARIANT* Data)

インクを指定した InkPersistenceFormat に変換し、指定した InkPersistenceCompressionMode を使用して保存して、バイナリデータをバイト配列で返します。

PersistenceFormatInkPersistenceFormatin

省略可能。永続化されるインクの形式を示す InkPersistenceFormat の値のいずれかを設定します。既定値は InkSerializedFormat です。

名前 説明
InkSerializedFormat
インクは ink serialized format (ISF) を使用して永続化されます。

これは、インクの最もコンパクトな永続表現です。バイナリのドキュメント形式に埋め込んだり、クリップボードに直接配置したりできます。これが既定値です。

Base64InkSerializedFormat
インクは、ISF を base64 ストリームとしてエンコードすることで永続化されます。

この形式は、インクを Extensible Markup Language (XML) ファイルまたは HTML ファイルに直接エンコードできるように用意されています。

Gif
インクは、ファイル内にメタデータとして ISF を埋め込んだ Graphics Interchange Format (GIF) ファイルを使用して永続化されます。

これにより、インクに対応していないアプリケーションでもインクを表示でき、インク対応アプリケーションに戻したときには完全なインクの忠実性が維持されます。この形式は、HTML ファイル内でインクコンテンツをやり取りし、インク対応アプリケーションとインク非対応アプリケーションの両方で利用できるようにする場合に最適です。

Base64Gif
インクは、base64 エンコードされた GIF を使用して永続化されます。

この GIF 形式は、インクを XML ファイルまたは HTML ファイルに直接エンコードし、後で画像に変換する場合に用意されています。用途としては、すべてのインク情報を含む XML 形式を生成し、Extensible Stylesheet Language Transformations (XSLT) を通じて HTML を生成する方法などが考えられます。

CompressionModeInkPersistenceCompressionModein

省略可能。永続化されるインクの圧縮モードを指定する InkPersistenceCompressionMode の値のいずれかです。 既定値は IPCM_Default です。

名前 説明
IPCM_Default
一般的なアプリケーションにおいて、保存時間と保存領域の最適なバランスが必要な場合に使用します。
IPCM_MaximumCompression
インクの保存速度よりも保存領域の最小化を優先する場合に使用します。
IPCM_NoCompression
使用する保存領域の量よりも保存時間を優先する場合や、バージョン間の互換性が重要な場合に使用します。
DataVARIANT*out

このメソッドが返されるときに、永続化されたインクを含むバイト配列が格納されます。

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

戻り値

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

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_INK_EXCEPTION
メソッド内部で例外が発生しました。
E_INVALIDARG
圧縮モードが無効です。
E_OUTOFMEMORY
バイト配列を割り当てられません。
E_UNEXPECTED
空の Ink オブジェクトを GIF 形式で保存しようとした場合に発生します。

解説(Remarks)

空の InkDisp オブジェクトを GIF 形式で保存しようとすると、エラーが発生します。

メモ InkPersistenceFormat の値に Base64InkSerializedFormat を指定して Save メソッドを呼び出した場合、戻り値は NULL 終端のバイト配列になります。保存したインクを XML ファイルに書き込むには、配列を 8 ビット Unicode 変換形式 (UTF-8) でエンコードされた文字列に変換する前に、配列の最後のバイトを削除してください。
vtbl 26 HRESULT Load(VARIANT Data)

指定したバイナリデータを使用して、新しい InkDisp オブジェクトにデータを設定します。

DataVARIANTin

インクデータを含むストリームです。

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

戻り値

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

戻り値 説明
S_OK
成功しました。
E_INVALIDARG
VARIANT が正しい型 (バイト配列) ではありませんでした。
E_OUTOFMEMORY
Stream 用のメモリを割り当てられません。
E_UNEXPECTED
予期しないパラメーターまたはプロパティの型です。
E_INK_EXCEPTION
メソッド内部で例外が発生しました。

解説(Remarks)

インクを読み込めるのは、新しく空の InkDisp オブジェクト (ストロークを一度も収集しておらず、プロパティも関連付けられていないもの) だけです。ストロークを収集済み、またはプロパティが関連付けられている InkDisp オブジェクトにインクを読み込もうとすると、たとえそのストロークやプロパティが InkDisp オブジェクトから削除済みであっても、例外がスローされます。これは、ストローク ID の割り当て方法によるものです。ストロークには一意の ID が割り当てられ、この ID は、そのストロークが Ink オブジェクトから削除された後でも再利用されません。つまり、InkDisp オブジェクトに ID が 1 のストロークが含まれていて、そのストロークを削除した後に別の InkDisp オブジェクトをこの InkDisp オブジェクトに読み込むと、ストローク ID は 2 から始まることになります。これは混乱を招くため、許可されていません。

メモ 空でない InkDisp オブジェクトにインクを読み込もうとした場合、Load を呼び出した時点で、カスタムストロークや拡張プロパティを含む InkDisp オブジェクト内のすべてのデータが失われます。
Save メソッドを使用すると、InkDisp オブジェクト内のインクを、バイトデータの配列で構成される Graphics Interchange Format (GIF) 形式で永続化できます (tla_gif の永続化形式は InkPersistenceFormat 列挙型で指定します)。バイトデータの配列を取得した後は、その配列を別の InkDisp オブジェクトに読み込むことができます。つまり、GIF 形式ではないバイト配列を Save メソッドで受け取った場合と同じ方法で、GIF 互換のバイト配列データを別の InkDisp オブジェクトに読み込めます。
メモ 画像を作成し、その画像をバイト配列として永続化して、そのバイト配列を別の InkDisp オブジェクトに読み込むことはできません。これは、バイト配列データを GIF として読み込んだ後は、Tablet PC がそのデータの形式を制御できなくなるためです。したがって、その画像を再びバイト配列として永続化した後、そのデータに対して Load を呼び出すことはできません。
vtbl 27 HRESULT CreateStroke(VARIANT PacketData, VARIANT PacketDescription, IInkStrokeDisp** Stroke)

パケットデータの入力値の配列から IInkStrokeDisp オブジェクトを作成します。

PacketDataVARIANTin

パケットデータの配列を指定します。データは Int32 値の配列であり、順に並べることで点の配列 (x0, y0)、(x1, y1) を構成します。この配列は Variant に格納してメソッドに渡します。

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

PacketDescriptionVARIANTin予約済みのパラメーターであり、現在は実装されていません。
StrokeIInkStrokeDisp**outこのメソッドが返されるときに、新しく作成されたストロークへのポインターが格納されます。

戻り値

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

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_INVALIDARG
VARIANT の型が無効です (VT_ARRAY | VT_I4 のみサポートされます)。
E_INK_EXCEPTION
メソッド内部で例外が発生しました。
E_OUTOFMEMORY
新しいストロークを作成するためのメモリを割り当てられません。

解説(Remarks)

点の配列に含まれる各点の最小値と最大値は、それぞれ LONG_MIN と LONG_MAX です。ただし、これらの点が定義するインク空間の四角形は、幅または高さの最大値が LONG_MAX を超えることはできません。そのため、x 座標の最小値と最大値の差、および y 座標の最小値と最大値の差は、LONG_MAX を超えることはできません。

vtbl 28 HRESULT ClipboardCopyWithRectangle(IInkRectangle* Rectangle, InkClipboardFormats ClipboardFormats, InkClipboardModes ClipboardModes, IDataObject** DataObject)

指定した四角形の内部に含まれる IInkStrokeDisp オブジェクトをクリップボードにコピーします。

RectangleIInkRectangle*inoptionalクリップボードにコピーするストロークを含む四角形を指定します。
ClipboardFormatsInkClipboardFormatsin省略可能。InkDisp オブジェクトの InkClipboardFormats 列挙値を指定します。既定値は ICF_Default です。
ClipboardModesInkClipboardModesin省略可能。InkDisp Class オブジェクトの InkClipboardModes Enumeration 値を指定します。既定値は ICB_Default です。
DataObjectIDataObject**outこのメソッドが返されるときに、新しく作成されたデータオブジェクトへのポインターが格納されます。

戻り値

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

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

解説(Remarks)

四角形によってストロークがクリップされる場合、コピーされたデータ内でもそれらのストロークはクリップされます。

InkDisp オブジェクトのプロパティだけをコピーしたい場合は、InkDisp オブジェクトをクリップボードにコピーすると便利なことがあります。InkDisp オブジェクトをクリップボードにコピーするには、strokes パラメーターに NULL を設定して ClipboardCopy メソッドを呼び出します。

注意 ICB_DelayedCopy フラグの使用によるメモリリークの可能性を避けるため、OleFlushClipboard メソッドまたは OleSetClipboard メソッドを呼び出す必要があります。ClipboardCopyWithRectangle メソッドの最後の呼び出しで ICB_DelayedCopy フラグを使用した場合は、アプリケーションの終了前にこれを行う必要があります。
ClipboardCopyWithRectangleICB_Cut モードで使用した場合、2 つ以上のストロークに分割されたストロークは削除され、その代わりに新しいストロークが追加されます。

また、InkAdded イベントと InkDeleted イベントは、ストロークのインデックスに基づいて生成されます。たとえば、インデックス 0、1、3、5、6 のストロークを削除する場合、2 つのイベントが生成されます。1 つはインデックス 0、1、3 のストローク用、もう 1 つはインデックス 5 と 6 のストローク用です。つまり、連続する組ごとに 1 つのイベントが生成されます。

これは InkAdded イベントにも当てはまります。ストロークコレクション内で新しく追加されたストロークのインデックスは内部アルゴリズムによって決定され、これが上記のような InkAdded イベントの発生のしかたに影響します。

イベントハンドラー内でストロークの数を照会した場合、その結果は、まだイベントが生成されていないストロークも含めて、操作全体で追加されたストロークの総数になります。

vtbl 29 HRESULT ClipboardCopy(IInkStrokes* strokes, InkClipboardFormats ClipboardFormats, InkClipboardModes ClipboardModes, IDataObject** DataObject)

InkStrokes コレクションをクリップボードにコピーします。

strokesIInkStrokes*inoptional省略可能。コピーするストロークを指定します。strokes パラメーターが NULL の場合、ClipboardCopy メソッドは InkDisp オブジェクト全体をコピーします。既定値は NULL です。
ClipboardFormatsInkClipboardFormatsin省略可能。InkDisp オブジェクトの InkClipboardFormats 列挙値を指定します。既定値は ICF_Default です。
ClipboardModesInkClipboardModesin省略可能。InkDisp オブジェクトの InkClipboardModes 列挙値を指定します。既定値は ICB_Default です。
DataObjectIDataObject**outこのメソッドが返されるときに、新しく作成されたデータオブジェクトへのポインターが格納されます。

戻り値

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

戻り値 説明
S_OK
成功しました。
E_POINTER
パラメーターに無効なポインターが含まれていました。
E_INK_EXCEPTION
メソッド内部で例外が発生しました。
E_INK_MISMATCHED_INK_OBJECT
strokes パラメーターが別の Ink オブジェクトに関連付けられています。

解説(Remarks)

このメソッドは、認識結果を含むストロークのすべてのプロパティをコピーします。strokes パラメーターに NULL を設定すると、CustomStrokes プロパティを含む InkDisp オブジェクトがクリップボードにコピーされ、InkDisp オブジェクトの IInkCustomStrokes コレクション内のストロークの認識結果も保持されます。

空の InkStrokes コレクションが渡された場合、このメソッドは NULL を返し、クリップボードの内容は変更されません。

メモ クリップボード API を動作させるには、事前に OleInitialize(NULL) を呼び出しておく必要があります。
注意 ICB_DelayedCopy フラグの使用によるメモリリークの可能性を避けるため、OleFlushClipboard メソッドまたは OleSetClipboard メソッドを呼び出す必要があります。ClipboardCopy メソッドの最後の呼び出しで ICB_DelayedCopy フラグを使用した場合は、アプリケーションの終了前にこれを行う必要があります。
vtbl 30 HRESULT CanPaste(IDataObject* DataObject, VARIANT_BOOL* CanPaste)

IDataObject を InkDisp オブジェクトに変換できるかどうかを示します。

DataObjectIDataObject*inoptional省略可能。検査する IDataObject を指定します。既定値は NULL で、この場合はクリップボード上のデータオブジェクトが使用されます。
CanPasteVARIANT_BOOL*outデータオブジェクトを InkDisp オブジェクトに変換できる場合は VARIANT_TRUE、それ以外の場合は VARIANT_FALSE です。

戻り値

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

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

解説(Remarks)

指定した IDataObjectNULL の場合は、クリップボード上のデータオブジェクトが使用されます。

vtbl 31 HRESULT ClipboardPaste(INT x, INT y, IDataObject* DataObject, IInkStrokes** Strokes)

クリップボードから IDataObject を InkDisp オブジェクトにコピーします。

xINTin省略可能。貼り付け先の x 座標を インク空間 座標で指定します。既定値は 0 です。
yINTin省略可能。貼り付け先の y 座標をインク空間座標で指定します。既定値は 0 です。
DataObjectIDataObject*inoptional省略可能。使用する IDataObject を指定します。クリップボードから貼り付ける場合は NULL を設定します。既定値は NULL です。
StrokesIInkStrokes**outこのメソッドが返されるときに、InkDisp オブジェクト内の InkStrokes コレクションへのポインターが格納されます。

戻り値

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

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

解説(Remarks)

Clipboard へのアクセス中に予期しないエラーが発生した場合は、エラーが返されます。エラーが発生しなくても、クリップボードに インク として貼り付けられる形式 (ink serialized format (ISF) または text ink object (tInk)) が含まれていない場合は、NULL が返され、例外はスローされません。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IInkDisp "{9D398FA0-C4E2-4FCD-9973-975CAAF47EA6}"
#usecom global IInkDisp IID_IInkDisp "{937C1A34-151D-4610-9CA6-A8CC9BDB5D83}"
#comfunc global IInkDisp_get_Strokes                 7 sptr
#comfunc global IInkDisp_get_ExtendedProperties      8 sptr
#comfunc global IInkDisp_get_Dirty                   9 var
#comfunc global IInkDisp_put_Dirty                   10 int
#comfunc global IInkDisp_get_CustomStrokes           11 sptr
#comfunc global IInkDisp_GetBoundingBox              12 int,sptr
#comfunc global IInkDisp_DeleteStrokes               13 sptr
#comfunc global IInkDisp_DeleteStroke                14 sptr
#comfunc global IInkDisp_ExtractStrokes              15 sptr,int,sptr
#comfunc global IInkDisp_ExtractWithRectangle        16 sptr,int,sptr
#comfunc global IInkDisp_Clip                        17 sptr
#comfunc global IInkDisp_Clone                       18 sptr
#comfunc global IInkDisp_HitTestCircle               19 int,int,float,sptr
#comfunc global IInkDisp_HitTestWithRectangle        20 sptr,float,sptr
#comfunc global IInkDisp_HitTestWithLasso            21 int,float,var,sptr
#comfunc global IInkDisp_NearestPoint                22 int,int,var,var,sptr
#comfunc global IInkDisp_CreateStrokes               23 int,sptr
#comfunc global IInkDisp_AddStrokesAtRectangle       24 sptr,sptr
#comfunc global IInkDisp_Save                        25 int,int,var
#comfunc global IInkDisp_Load                        26 int
#comfunc global IInkDisp_CreateStroke                27 int,int,sptr
#comfunc global IInkDisp_ClipboardCopyWithRectangle  28 sptr,int,int,sptr
#comfunc global IInkDisp_ClipboardCopy               29 sptr,int,int,sptr
#comfunc global IInkDisp_CanPaste                    30 sptr,var
#comfunc global IInkDisp_ClipboardPaste              31 int,int,sptr,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。
; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。