IInkRenderer
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
。 (IInkRenderer)
解説(Remarks)
印刷も InkRenderer オブジェクトを介して行われます。
このオブジェクトは、C++ では CoCreateInstance メソッドを呼び出すことでインスタンス化できます。
メソッド 15
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
インク(手書き)の描画に使用されるビュー変換を表す InkTransform オブジェクトを取得します。
| ViewTransform | IInkTransform* | inoptional | インク空間内のストローク座標を変換するために使用する幾何変換 (回転、拡大縮小、せん断、反転) の値を表す行列です。この変換はポイントとペン幅の両方に適用されます。ビュー変換はオブジェクト変換の後に行われます。 |
戻り値
このメソッドは、次のいずれかの値を返します。
| 戻り値 | 説明 |
|---|---|
| 成功しました。 | |
| パラメーターに無効なポインターが含まれていました。 | |
|
メソッド内部で例外が発生しました。 |
解説(Remarks)
この変換に適用する平行移動は、インク空間の単位 (1 単位 = .01mm) で指定してください。
ビュー変換の調整は、インク描画のズーム倍率を調整することに相当します。
ビュー変換はオブジェクト変換の後に行われます。
インク(手書き)の描画に使用されるビュー変換を表す InkTransform オブジェクトを設定します。
| ViewTransform | IInkTransform* | inoptional | インク空間内のストローク座標を変換するために使用する幾何変換 (回転、拡大縮小、せん断、反転) の値を表す InkTransform オブジェクトです。 viewTransform パラメーターに NULL を指定した場合は、恒等変換を指定したことになります。 |
戻り値
このメソッドは、次のいずれかの値を返します。
| 戻り値 | 説明 |
|---|---|
| 成功しました。 | |
| パラメーターに無効なポインターが含まれていました。 | |
| viewTransform が互換性のある InkTransform オブジェクトを指していません。 | |
|
メソッド内部で例外が発生しました。 |
解説(Remarks)
この変換はポイントとペン幅の両方に適用されます。
ビュー変換はオブジェクト変換の後に行われます。
ペン幅は、指定されたペン幅 (未指定の場合は既定値の 53) にビュー変換の行列式の平方根を乗算して算出されます。
SENT メッセージへの応答としてこのメソッドを呼び出すと問題が生じます。InSendMesssageEx を呼び出して SENT メッセージを処理中かどうかを判定し、 SENT メッセージであった場合は自分自身にメッセージを POST してください。
インク(手書き)の描画に使用されたオブジェクト変換を表す InkTransform オブジェクトを取得します。
| ObjectTransform | IInkTransform* | inoptional | インク空間内のストローク座標を変換するために使用する幾何変換 (回転、拡大縮小、せん断、反転) の値を表す InkTransform オブジェクトです。 |
戻り値
このメソッドは、次のいずれかの値を返します。
| 戻り値 | 説明 |
|---|---|
| 成功しました。 | |
| パラメーターに無効なポインターが含まれていました。 | |
|
メソッド内部で例外が発生しました。 |
解説(Remarks)
この変換に適用する平行移動は、インク空間の単位 (1 単位 = .01mm) で指定してください。
インク(手書き)の描画に使用されるオブジェクト変換を表す InkTransform オブジェクトを設定します。
| ObjectTransform | IInkTransform* | inoptional | インク空間内のストローク座標を変換するために使用する幾何変換 (回転、拡大縮小、せん断、反転) の値を表す InkTransform オブジェクトです。 objectTransform パラメーターに NULL を指定した場合は、恒等変換を指定したことになります。 |
戻り値
このメソッドは、次のいずれかの値を返します。
| 戻り値 | 説明 |
|---|---|
| 成功しました。 | |
| パラメーターに無効なポインターが含まれていました。 | |
| objectTransform が互換性のある InkTransform オブジェクトを指していません。 | |
|
メソッド内部で例外が発生しました。 |
解説(Remarks)
この変換はポイントに適用されますが、ペン幅には適用されません。
オブジェクト変換はビュー変換の前に行われます。
SENT メッセージへの応答としてこのメソッドを呼び出すと問題が生じます。InSendMesssageEx を呼び出して SENT メッセージを処理中かどうかを判定し、 SENT メッセージであった場合は自分自身にメッセージを POST してください。
既知のデバイスコンテキストを使用してインクストロークを描画します。
| hDC | INT_PTR | in | 描画先のデバイスコンテキストの hWnd を指定します。 |
| Strokes | IInkStrokes* | inoptional | 描画するストロークを指定します。 |
戻り値
このメソッドは、次のいずれかの値を返します。
| 戻り値 | 説明 |
|---|---|
| 成功しました。 | |
| パラメーターに無効なポインターが含まれていました。 | |
|
strokes パラメーターが別の InkDisp オブジェクトに関連付けられています。 |
| 引数が無効です。 | |
|
hdc または strokes パラメーターが有効なオブジェクトを指していません。 |
|
メソッド内部で例外が発生しました。 |
| 予期しないパラメーターまたはプロパティの型です。 |
解説(Remarks)
ペン幅には、ビュー変換の行列式の平方根が乗算 (スケーリング) されます。
既知のデバイスコンテキストを使用して IInkStrokeDisp オブジェクトを描画します。必要に応じて、既知の InkDrawingAttributes オブジェクトを使用して IInkStrokeDisp オブジェクトを描画します。
| hDC | INT_PTR | in | 描画先のデバイスコンテキストの hWnd です。 |
| Stroke | IInkStrokeDisp* | inoptional | 描画するストロークです。 |
| DrawingAttributes | IInkDrawingAttributes* | inoptional | 省略可能です。描画に使用する InkDrawingAttributes を指定します。既定値は NULL です。InkDrawingAttributes を指定した場合は、IInkStrokeDisp の DrawingAttributes よりも優先されます。 |
戻り値
このメソッドは、次のいずれかの値を返します。
| 戻り値 | 説明 |
|---|---|
| 成功しました。 | |
| パラメーターに無効なポインターが含まれていました。 | |
|
strokes パラメーターが別の InkDisp オブジェクトに関連付けられています。 |
| ディスプレイハンドルが無効です。 | |
|
stroke または drawingAttributes パラメーターが有効なオブジェクトを指していません。 |
|
メソッド内部で例外が発生しました。 |
| 予期しないパラメーターまたはプロパティの型です。 |
解説(Remarks)
ペン幅には、ビュー変換の行列式の平方根が乗算 (スケーリング) されます。
InkRenderer は、ビューポートとウィンドウの原点を強制的に 0, 0 にします。既存の設定は保存および復元されますが、InkRenderer では使用されません。スクロールを行うには、InkRenderer オブジェクトのビュー変換およびオブジェクト変換のメソッドを使用してください。
ピクセル空間座標の位置を、インク空間座標の位置に変換します。
| hDC | INT_PTR | in | 格納先のコントロールまたはフォームのデバイスコンテキストのハンドルです。 |
| x | INT* | inout | インク上の位置に変換するポイントの x 座標です。 |
| y | INT* | inout | インク上の位置に変換するポイントの y 座標です。 |
戻り値
このメソッドは、次のいずれかの値を返します。
| 戻り値 | 説明 |
|---|---|
| 成功しました。 | |
| パラメーターに無効なポインターが含まれていました。 | |
| ディスプレイハンドルが無効です。 | |
|
メソッド内部で例外が発生しました。 |
解説(Remarks)
PixelToInkSpace は、ピクセルからインク空間 (1 HIMETRIC 単位 = .01mm) へ変換し、ビュー変換の逆変換を適用したうえで、オブジェクト変換を適用します。
ハンドルを使用して、インク空間座標の位置をピクセル空間の位置に変換します。
| hdcDisplay | INT_PTR | in | デバイスコンテキストのハンドルです。 |
| x | INT* | inout | ピクセル上の位置に変換するポイントの X 座標です。 |
| y | INT* | inout | ピクセル上の位置に変換するポイントの Y 座標です。 |
戻り値
このメソッドは、次のいずれかの値を返します。
| 戻り値 | 説明 |
|---|---|
| 成功しました。 | |
| パラメーターに無効なポインターが含まれていました。 | |
|
メソッド内部で例外が発生しました。 |
| ディスプレイハンドルが無効です。 | |
| 処理中に座標がオーバーフローしました。 |
解説(Remarks)
InkSpaceToPixelFromPoints は、オブジェクト変換を適用し、InkRenderer オブジェクトのビュー変換を適用したうえで、インク空間からピクセル単位 (1 インク単位 = .01mm) へ変換します。
ピクセル空間座標の位置の配列を、インク空間座標の位置の配列に変換します。
| hDC | INT_PTR | in | 格納先のコントロールまたはフォームのデバイスコンテキストのハンドルです。 |
| Points | VARIANT* | inout | ピクセル上の位置からインク空間座標へ変換するポイントの Variant 配列です。x0, y0, x1, y1, x2, y2 のように、Long 型の x 値と y 値を交互に並べた形式で指定します。 VARIANT 構造体の詳細については、「Using the COM Library」を参照してください。 |
戻り値
このメソッドは、次のいずれかの値を返します。
| 戻り値 | 説明 |
|---|---|
| 成功しました。 | |
| パラメーターに無効なポインターが含まれていました。 | |
| ディスプレイハンドルが無効です。 | |
|
メソッド内部で例外が発生しました。 |
解説(Remarks)
PixelToInkSpaceFromPoints は、ピクセルからインク空間 (1 インク単位 = .01mm) へ変換し、ビュー変換の逆変換を適用したうえで、オブジェクト変換の逆変換を適用します。
インク空間座標のポイントの配列を、ピクセル空間のポイントの配列に変換します。
| hDC | INT_PTR | in | 描画先のデバイスコンテキストのハンドルです。 |
| Points | VARIANT* | inout | ピクセル上の位置に変換する、インク空間座標のポイントの配列です。これは VARIANT に格納された 32 ビット整数値の配列である必要があります。 VARIANT 構造体の詳細については、「Using the COM Library」を参照してください。 |
戻り値
| 戻り値 | 説明 |
|---|---|
| 成功しました。 | |
| パラメーターに無効なポインターが含まれていました。 | |
| ディスプレイハンドルが無効です。 | |
|
メソッド内部で例外が発生しました。 |
解説(Remarks)
InkSpaceToPixelFromPoints は、オブジェクト変換を適用し、InkRenderer オブジェクトのビュー変換を適用したうえで、インク空間からピクセル単位 (1 インク単位 = .01mm) へ変換します。
InkRenderer オブジェクトの DrawStroke メソッドでストロークのコレクションを描画した場合に、それらのストロークを含むデバイスコンテキスト上の矩形を計算します。
| Strokes | IInkStrokes* | inoptional | 測定対象のストロークのコレクションです。 |
| Rectangle | IInkRectangle** | out | このメソッドが返されるときに、InkRenderer オブジェクトの DrawStroke メソッドでストロークを描画した場合に、それらのストロークを含むデバイスコンテキスト上の矩形へのポインターが格納されます。矩形を計算するには、ストロークが x 座標と y 座標を含んでいる必要があります。含んでいない場合、このメソッドは空の矩形を返します。 |
戻り値
このメソッドは、次のいずれかの値を返します。
| 戻り値 | 説明 |
|---|---|
| 成功しました。 | |
| パラメーターに無効なポインターが含まれていました。 | |
| ディスプレイハンドルが無効です。 | |
|
strokes パラメーターが有効なオブジェクトを指していません。 |
|
strokes パラメーターが別の InkDisp オブジェクトに関連付けられています。 |
|
メソッド内部で例外が発生しました。 |
| 予期しないパラメーターまたはプロパティの型です。 |
解説(Remarks)
これが正確になるのは、Measure と DrawStroke の両方に同じ引数を渡した場合のみです。
境界ボックスはペン幅の影響を受けるため、ペン幅は InkRenderer のビュー変換に応じて適切にスケーリングされます。具体的には、ペン幅にビュー変換の行列式の平方根が乗算されます。境界ボックスの高さと幅は各方向にこの値の半分だけ拡張され、さらに右辺と下辺は 1 加算されます。
たとえば、元のペン幅が 53、ビュー変換の行列式の平方根が 50、境界ボックスが (0, 0, 1000, 1000) である場合を考えます。境界ボックスに対する各方向のペン幅の調整量は (53 * 50) / 2 として算出され、右辺と下辺はさらに 1 加算されます。その結果、描画される境界ボックスは (-1325, -1325, 2326, 2326) になります。
InkRenderer オブジェクトの DrawStroke メソッドでストロークを描画した場合に、そのストロークを含むデバイスコンテキスト上の矩形を計算します。
| Stroke | IInkStrokeDisp* | inoptional | 測定対象のストロークです。 |
| DrawingAttributes | IInkDrawingAttributes* | inoptional | 省略可能です。矩形の計算に使用する InkDrawingAttributes で、ストロークの描画属性よりも優先されます。既定値は NULL で、この場合はストローク自身の描画属性を使用して測定されます。 |
| Rectangle | IInkRectangle** | out | このメソッドが返されるときに、InkRenderer オブジェクトの DrawStroke メソッドでストロークを描画した場合に、そのストロークを含むデバイスコンテキスト上の矩形へのポインターが格納されます。矩形を計算するには、ストロークが x 座標と y 座標を含んでいる必要があります。含んでいない場合、このメソッドは空の矩形を返します。 |
戻り値
このメソッドは、次のいずれかの値を返します。
| 戻り値 | 説明 |
|---|---|
| 成功しました。 | |
| InkRectangle オブジェクトがシステムに登録されていません。 | |
|
IInkStrokeDisp が互換性のある InkDisp オブジェクトを指していないか、drawingAttributes が無効な入力パラメーターです。 |
|
メソッド内部で例外が発生しました。 |
| パラメーターに無効なポインターが含まれていました。 | |
| ディスプレイハンドルが無効です。 | |
| 予期しないパラメーターまたはプロパティの型です。 |
解説(Remarks)
これが正確になるのは、MeasureStroke と DrawStroke の両方に同じ引数を渡した場合のみです。
境界ボックスはペン幅の影響を受けるため、ペン幅は InkRenderer のビュー変換に応じて適切にスケーリングされます。具体的には、ペン幅にビュー変換の行列式の平方根が乗算されます。境界ボックスの高さと幅は各方向にこの値の半分だけ拡張され、さらに右辺と下辺は 1 加算されます。
たとえば、元のペン幅が 53、ビュー変換の行列式の平方根が 50、境界ボックスが (0, 0, 1000, 1000) である場合を考えます。境界ボックスに対する各方向のペン幅の調整量は (53 * 50) / 2 として算出され、右辺と下辺はさらに 1 加算されます。その結果、描画される境界ボックスは (-1325, -1325, 2326, 2326) になります。
インク空間座標で、ビュー変換に平行移動を適用します。
| HorizontalComponent | FLOAT | in | ビュー変換を X 方向に平行移動させる量 (インク空間座標) です。 |
| VerticalComponent | FLOAT | in | ビュー変換を Y 方向に平行移動させる量 (インク空間座標) です。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
InkRenderer のビュー変換に回転を適用します。
| Degrees | FLOAT | in | 時計回りに回転させる角度 (度) です。 |
| x | FLOAT | in | 省略可能です。回転の中心となるポイントの x 座標 (インク空間座標) です。既定値は 0 です。 |
| y | FLOAT | in | 省略可能です。回転の中心となるポイントの y 座標 (インク空間座標) です。既定値は 0 です。 |
戻り値
このメソッドは、次のいずれかの値を返します。
| 戻り値 | 説明 |
|---|---|
| 成功しました。 | |
|
メソッド内部で例外が発生しました。 |
解説(Remarks)
ポイントを指定しない場合、回転は原点を中心に行われます。
ビュー変換を X 方向および Y 方向に拡大縮小します。
| HorizontalMultiplier | FLOAT | in | ビュー変換の X 方向を拡大縮小する係数です。 |
| VerticalMultiplier | FLOAT | in | ビュー変換の Y 方向を拡大縮小する係数です。 |
| ApplyOnPenWidth | VARIANT_BOOL | in | 省略可能です。ペン幅にも拡大縮小の係数を適用する場合は VARIANT_TRUE、それ以外の場合は VARIANT_FALSE を指定します。既定値は VARIANT_TRUE です。 |
戻り値
このメソッドは、次のいずれかの値を返します。
| 戻り値 | 説明 |
|---|---|
| 成功しました。 | |
|
メソッド内部で例外が発生しました。 |
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 不要)。#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,sptr,sptr #comfunc global IInkRenderer_InkSpaceToPixel 14 sptr,sptr,sptr #comfunc global IInkRenderer_PixelToInkSpaceFromPoints 15 sptr,sptr #comfunc global IInkRenderer_InkSpaceToPixelFromPoints 16 sptr,sptr #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から自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。