ITextServices2
COM公式ドキュメント
ITextServices2 インターフェースは ITextServices インターフェースを拡張します。
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
コンテンツに合わせてコントロールのサイズを適切に変更します。このメソッドは TxGetNaturalSize に似ていますが、テキストの最上行のアセントも取得します。
| dwAspect | DWORD | in | 描画のアスペクト。DVASPECT 列挙型の値のいずれかを指定できます。 | ||||||||||||||||
| hdcDraw | HDC | in | 描画先となるデバイスコンテキスト。 | ||||||||||||||||
| hicTargetDev | HDC | in | テキストの書式設定の対象となるデバイスコンテキスト(つまり WYSIWYG 用)。 | ||||||||||||||||
| ptd | DVTARGETDEVICE* | inout | ターゲットデバイスに関する追加情報。 | ||||||||||||||||
| dwMode | DWORD | in | 要求するフィッティングの種類。次のいずれかを指定できます。
| ||||||||||||||||
| psizelExtent | SIZE* | in | ズームに使用する範囲のサイズ(HIMETRIC 単位)。 | ||||||||||||||||
| pwidth | INT* | inout | dwMode で定義されるフィッティングの幅。 | ||||||||||||||||
| pheight | INT* | inout | dwMode で定義されるフィッティングの高さ。 | ||||||||||||||||
| pascent | INT* | inout | 単一行コントロールの場合、テキストの最上行にある文字のアセント(ベースラインより上の単位)を受け取ります。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は S_OK です。
テキストサービスがオブジェクトをアクティブ化できなかった場合、戻り値は次の HRESULT コードのいずれかになります。COM エラーコードの詳細については、Error Handling in COM を参照してください。
| 戻り値 | 説明 |
|---|---|
| 正しいサイズを判定できません。 | |
| 1つ以上の引数が無効です。 | |
| メモリが不足しています。 |
解説(Remarks)
最初の4つのパラメーターは ITextServices::TxDraw の対応するパラメーターに似ており、同じ情報を提供します。行を再計算する必要がある場合、TxGetNaturalSize2 はこれらの値を ITextServices::TxDraw と同じ方法で使用します。
pwidth パラメーターと pheight パラメーターは入出力パラメーターです。ホストは、テキストオブジェクトの自然な範囲の暫定的な幅と高さを渡します。テキストサービスオブジェクトは、これらの値を現在のキャッシュ状態と比較し、異なる場合は行を再計算します。その後、dwMode で指定されたとおりに自然なサイズを計算して返します。
例
次の例は、ズーム係数を 1:1 にするために psizelExtent パラメーターを初期化する方法を示しています。省略記号は、記述する必要があるコードを示します。
LONG dxpi = GetDeviceCaps(hdc, LOGPIXELSX);
LONG dypi = GetDeviceCaps(hdc, LOGPIXELSY);
LONG dyAscent = 0;
LONG dx = ... ; // テキストイメージの幅(ピクセル単位)
LONG dy = ... ; // テキストイメージの高さ(ピクセル単位)
SIZEL sizel; // dx と dy(HIMETRIC 単位)
ITextServices2 *pserv = ... ; // 単一行コントロール用のインターフェース
sizel.cx = MulDiv(dx, HIMETRIC_PER_INCH, dxpi);
sizel.cy = MulDiv(dy, HIMETRIC_PER_INCH, dypi);
pserv->TxGetNaturalSize2(DVASPECT_DOCPRINT, hdc, hdcNil, pNil,
TXTNS_FITTOCONTENT, &sizel, &dx, &dy, &dyAscent)))
Direct2D レンダリングを使用してテキストサービスオブジェクトを描画します。
| pRenderTarget | ID2D1RenderTarget* | in | テキストサービスオブジェクトを描画する Direct2D レンダリングオブジェクト。 | ||||||
| lprcBounds | RECTL* | inout | 境界(クライアント)矩形。 | ||||||
| lprcUpdate | RECT* | inout | 描画デバイスコンテキストの論理座標系における、lprcBounds 矩形内で更新する矩形。このパラメーターが NULL の場合、クライアント矩形全体が描画されます。 | ||||||
| lViewId | INT | in | 描画するビュー。
|
戻り値
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ITextServices2 "{}" #usecom global ITextServices2 IID_ITextServices2 "{}" #comfunc global ITextServices2_TxGetNaturalSize2 21 int,sptr,sptr,var,int,var,var,var,var #comfunc global ITextServices2_TxDrawD2D 22 sptr,var,var,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ITextServices2 "{}" #usecom global ITextServices2 IID_ITextServices2 "{}" #comfunc global ITextServices2_TxGetNaturalSize2 21 int,sptr,sptr,sptr,int,sptr,sptr,sptr,sptr #comfunc global ITextServices2_TxDrawD2D 22 sptr,sptr,sptr,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。