Win32 API 日本語リファレンス
ホームUI.Controls.RichEdit › ITextServices

ITextServices

COM
継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

Text Object Model (TOM) を拡張し、ウィンドウレス動作のための追加機能を提供します。

解説(Remarks)

ITextHost インターフェイスと組み合わせることで、ITextServices はウィンドウを作成することなく rich edit コントロールを使用する手段を提供します。

実装するタイミング

アプリケーションが ITextServices インターフェイスを実装することはありません。

使用するタイミング

アプリケーションは CreateTextServices 関数を呼び出して text services オブジェクトを作成できます。ITextServices ポインターを取得するには、CreateTextServices が返すプライベートな IUnknown ポインターに対して QueryInterface を呼び出します。その後、ITextServices のメソッドを呼び出して text services オブジェクトへメッセージを送信できます。

メソッド 18

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT TxSendMessage(DWORD msg, WPARAM wparam, LPARAM lparam, LRESULT* plresult)

ウィンドウホストが、自身のウィンドウから送信されたメッセージを text services オブジェクトへ転送するために使用します。

msgDWORDinメッセージ識別子。
wparamWPARAMinウィンドウメッセージの WPARAM
lparamLPARAMinウィンドウメッセージの LPARAM
plresultLRESULT*inoutメッセージの戻り値 LRESULT

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は S_OK です。

メソッドが失敗した場合、戻り値は次のいずれかの HRESULT コードです。COM エラーコードの詳細については、Error Handling in COM を参照してください。

リターンコード 説明
E_OUTOFMEMORY
メモリ不足。NOERROR メッセージは処理され、何らかのアクションが実行されました。
S_FALSE
メッセージは処理されませんでした。通常、呼び出し元が(場合によっては DefWindowProc を呼び出して)自身でメッセージを処理すべきことを示します。
S_MSG_KEYIGNORED
メッセージは処理されましたが、キー入力に対するアクションは実行されませんでした。

解説(Remarks)

この関数からは 2 つの戻り値が返される点に注意してください。ウィンドウプロシージャから返すべき戻り値は plresult です。ただし、場合によっては、返される LRESULT だけでは十分な情報が得られないことがあります。たとえば、コントロール間でのカーソル移動を実装する際には、キー入力(右矢印など)が処理されたものの無視された(たとえばキャレットが既にテキスト内の最も右の位置にある)かどうかを知ることが役立ちます。このような場合、追加の情報は返される HRESULT を通じて返されることがあります。

WM_CHAR および WM_KEYDOWN は、キーまたは文字が認識されたものの、現在の状態では効果がない場合に S_MSG_KEYIGNORED を返すべきです。たとえば、次のような場合に S_MSG_KEYIGNORED を返す必要があります。

vtbl 4 HRESULT TxDraw(DVASPECT dwDrawAspect, INT lindex, void* pvAspect, DVTARGETDEVICE* ptd, HDC hdcDraw, HDC hicTargetDev, RECTL* lprcBounds, RECTL* lprcWBounds, RECT* lprcUpdate, INT_PTR pfnContinue, DWORD dwContinue, INT lViewId)

text services オブジェクトを描画します。

dwDrawAspectDVASPECTin

描画するアスペクト、すなわちオブジェクトをどのように表現するかを指定します。描画アスペクトには次のいずれかの値を指定できます。

意味
DVASPECT_CONTENT
テキストコンテンツのスクリーンイメージを hdcDraw デバイスコンテキストへレンダリングします。

hicTargetDev および ptd パラメーターは、対象デバイスコンテキスト(存在する場合。通常はプリンター)に関する情報を提供します。

DVASPECT_DOCPRINT
オブジェクトを、プリンターへ印刷される場合と同様に hdcDraw デバイスコンテキストへレンダリングします。これにより、text services オブジェクトはプリンター向けに最適化できます(たとえば、背景色が白であれば描画しないなど)。また、選択範囲などの一部のスクリーン固有の要素はレンダリングされるべきではありません。

ITextServices::TxDraw は、現在のスクロール位置から開始して lprcBounds の矩形をレンダリングする必要があります。

lindexINTinサポートされていません。
pvAspectvoid*inout描画の最適化に関する情報。
ptdDVTARGETDEVICE*inout対象デバイス。
hdcDrawHDCinレンダリング用デバイスコンテキスト。
hicTargetDevHDCin対象情報コンテキスト。
lprcBoundsRECTL*inout境界(クライアント)矩形。
lprcWBoundsRECTL*inoutメタファイル用のクリッピング矩形。
lprcUpdateRECT*inoutlprcBounds 内の更新領域。
pfnContinueINT_PTRinサポートされていません。
dwContinueDWORDincontinue 関数に渡すパラメーター。
lViewIdINTin

描画するビューを指定します。

意味
TXTVIEW_ACTIVE
インプレースアクティブなビューを描画します。
TXTVIEW_INACTIVE
インプレースアクティブなビュー以外のビュー(たとえば印刷プレビュー)を描画します。

戻り値

型: HRESULT

戻り値は通常 S_OK です。

解説(Remarks)

このメソッドは text services オブジェクトをレンダリングします。OLE の対応する IViewObject::Draw メソッドと同じパラメーターに加えて、lprcUpdatelViewId のパラメーターを受け取ります。ホストがインプレースアクティブ、非アクティブのいずれの状態でも使用できます。

lprcBounds パラメーターはレンダリング対象の矩形(クライアント矩形とも呼ばれます)を指定します。この矩形は、描画する text services オブジェクトのイメージ全体の位置と範囲を表します。これは hdcDraw の論理座標系で表現されます。lprcBoundsNULL の場合、コントロールはアクティブでなければなりません。この場合、text services オブジェクトはインプレースアクティブなビュー(すなわち、ホストに対して TxGetClientRect を呼び出して取得できるクライアント矩形)をレンダリングする必要があります。

lprcUpdate パラメーターが NULL でない場合、それは hdcDraw の論理座標系で、そのクライアント矩形内の更新対象の矩形を指定します。lprcUpdateNULL の場合、クライアント矩形全体を描画する必要があります。

text services オブジェクトは適切なズーム倍率でレンダリングする必要があります。ズーム倍率は、クライアント矩形と TxGetExtent が返すネイティブサイズから求められます。ズーム倍率についての説明は TxGetExtent を参照してください。

OLE ホストと ITextServices::TxDraw(ITextServices::OnTxSetCursor および ITextServices::TxQueryHitPoint にも該当)に関する一般的な注意:

OLE ホストは、任意のレンダリング用デバイスコンテキストまたはクライアント矩形を用いて、いつでも ITextServices::TxDraw メソッドを呼び出せます。非アクティブな OLE オブジェクトは範囲(extent)のみを保持します。レンダリング先の矩形を取得するために、ホストは IViewObject::Draw メソッドを呼び出します。この矩形はそのメソッドの範囲内でのみ有効です。したがって、同じコントロールが、異なる矩形や異なるデバイスコンテキストで連続してレンダリングされることがあります。たとえば、画面上の異なるビューに同時に表示される場合などです。

通常、ITextServices::TxDraw に渡されるクライアント矩形とデバイスコンテキストはキャッシュすべきではありません。キャッシュすると text services オブジェクトが描画のたびに行を再計算せざるを得なくなり、パフォーマンスを低下させるためです。代わりに、text services オブジェクトは特定のクライアント矩形とデバイスコンテキストについて計算された情報(改行位置など)をキャッシュできます。ただし、次に ITextServices::TxDraw を呼び出す際には、キャッシュされた情報を使用する前にその有効性を確認し、必要に応じて更新された情報を再生成する必要があります。

また、コントロールがインプレースアクティブな場合は十分に注意してください。ITextServices::TxDraw はインプレースアクティブなビュー以外のビューをレンダリングするために呼び出されることがあるため、この問題はさらに複雑になります。言い換えると、ITextServices::TxDraw に渡されるクライアント矩形は、アクティブなもの(ITextServices::OnTxInPlaceActivate に渡され、ホストに対する TxGetClientRect を通じて取得されるもの)と同一とは限りません。

vtbl 5 HRESULT TxGetHScroll(INT* plMin, INT* plMax, INT* plPos, INT* plPage, BOOL* pfEnabled)

水平スクロールバーの情報を返します。

plMinINT*inout最小スクロール位置。
plMaxINT*inout最大スクロール位置。
plPosINT*inout現在のスクロール位置。
plPageINT*inoutビューの幅(ピクセル単位)。
pfEnabledBOOL*inout水平スクロールが有効かどうかを示します。TRUE の場合、水平スクロールが有効です。

戻り値

型: HRESULT

このメソッドは常に S_OK を返します。

vtbl 6 HRESULT TxGetVScroll(INT* plMin, INT* plMax, INT* plPos, INT* plPage, BOOL* pfEnabled)

垂直スクロールバーの状態情報を返します。

plMinINT*inout最小スクロール位置。
plMaxINT*inout最大スクロール位置。
plPosINT*inout現在のスクロール位置。
plPageINT*inoutビューの高さ(ピクセル単位)。
pfEnabledBOOL*inout垂直スクロールバーが有効かどうかを示します。TRUE の場合、垂直スクロールバーは有効です。それ以外の場合は無効です。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は S_OK です。

メソッドが失敗した場合、戻り値は次のいずれかの HRESULT コードです。COM エラーコードの詳細については、Error Handling in COM を参照してください。

リターンコード 説明
E_FAIL
原因不明のエラー。
E_INVALIDARG
1 つ以上の引数が無効です。
vtbl 7 HRESULT OnTxSetCursor(DVASPECT dwDrawAspect, INT lindex, void* pvAspect, DVTARGETDEVICE* ptd, HDC hdcDraw, HDC hicTargetDev, RECT* lprcClient, INT x, INT y)

text services オブジェクトにカーソルを設定するよう通知します。

dwDrawAspectDVASPECTin

描画アスペクトには次のいずれかの値を指定できます。

意味
DVASPECT_CONTENT
テキストコンテンツのスクリーンイメージを hdcDraw デバイスコンテキストへレンダリングします。

hicTargetDev および ptd パラメーターは、対象デバイスコンテキスト(存在する場合。通常はプリンター)に関する情報を提供します。

DVASPECT_DOCPRINT
オブジェクトを、プリンターへ印刷される場合と同様に hdcDraw デバイスコンテキストへレンダリングします。これにより、text services オブジェクトはプリンター向けに最適化できます(たとえば、背景色が白であれば描画しないなど)。また、選択範囲などの一部のスクリーン固有の要素はレンダリングされるべきではありません。

ITextServices::OnTxSetCursor は、現在のスクロール位置から開始して lprcClient の矩形をレンダリングする必要があります。

lindexINTinサポートされていません。
pvAspectvoid*inout描画の最適化に関する情報。
ptdDVTARGETDEVICE*inout対象デバイス。
hdcDrawHDCinレンダリング用デバイスコンテキスト。
hicTargetDevHDCin対象情報コンテキスト。
lprcClientRECT*inoutコントロールのクライアント矩形。矩形の座標は、含まれるウィンドウのクライアント座標で表されます。NULL は有効な値です。
xINTinカーソルの x 位置。含まれるウィンドウのクライアント座標で表されます。
yINTinカーソルの y 位置。含まれるウィンドウのクライアント座標で表されます。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は S_OK です。

メソッドが失敗した場合、戻り値は次の HRESULT コードです。COM エラーコードの詳細については、Error Handling in COM を参照してください。

リターンコード 説明
E_INVALIDARG
1 つ以上の不正なパラメーターがあります。

解説(Remarks)

text services オブジェクトは、この呼び出しの結果として正しいカーソルを判断するために再計測を行うことがあります。正しいカーソルは TxSetCursor を通じて設定されます。

lprcClient パラメーターは、マウスカーソルが位置しているコントロールのビューのクライアント矩形です。lprcClient パラメーターは、WM_SIZE メッセージと同様に、含まれるウィンドウのデバイス座標で表されます。これは最後にレンダリングされたビューとは限りません。さらに、コントロールがインプレースアクティブな場合、これは現在アクティブなビューとは限りません。そのため、text services オブジェクトはこの矩形を現在のキャッシュの値と照合し、行の再計算が必要かどうかを判断する必要があります。この計算にはズーム倍率を含める必要があります。ズーム倍率についての説明は TxGetExtent を参照してください。

このメソッドはコントロールのスクリーンビューに対してのみ呼び出されるべきです。したがってデバイスコンテキスト (DC) は渡されませんが、スクリーン DC であると想定してください。

詳細については、ITextServices::TxDraw の「解説」を参照してください。

vtbl 8 HRESULT TxQueryHitPoint(DVASPECT dwDrawAspect, INT lindex, void* pvAspect, DVTARGETDEVICE* ptd, HDC hdcDraw, HDC hicTargetDev, RECT* lprcClient, INT x, INT y, DWORD* pHitResult)

指定した点が text services オブジェクトの矩形内にあるかどうかを判定します。

dwDrawAspectDVASPECTin

描画アスペクトには次のいずれかの値を指定できます。

意味
DVASPECT_CONTENT
テキストコンテンツのスクリーンイメージを hdcDraw デバイスコンテキストへレンダリングします。

hicTargetDev および ptd パラメーターは、対象デバイスコンテキスト(存在する場合。通常はプリンター)に関する情報を提供します。

DVASPECT_DOCPRINT
オブジェクトを、プリンターへ印刷される場合と同様に hdcDraw デバイスコンテキストへレンダリングします。これにより、text services オブジェクトはプリンター向けに最適化できます(たとえば、背景色が白であれば描画しないなど)。また、選択範囲などの一部のスクリーン固有の要素はレンダリングされるべきではありません。

ITextServices::TxGetNaturalSize は、現在のスクロール位置から開始して lprcClient の矩形をレンダリングする必要があります。

lindexINTinサポートされていません。
pvAspectvoid*inout描画の最適化に関する情報。
ptdDVTARGETDEVICE*inout対象デバイスに関する情報。
hdcDrawHDCinレンダリング用デバイスコンテキスト。
hicTargetDevHDCin対象情報コンテキスト。
lprcClientRECT*inoutコントロールのクライアント矩形。ヒットテストが行われるビューのクライアント(デバイス)座標で表されます。
xINTin確認する x 座標。ヒットテストが行われるビューのクライアント座標で表されます。
yINTin確認する y 座標。ヒットテストが行われるビューのクライアント座標で表されます。
pHitResultDWORD*inout

ヒットテストの結果。次の TXTHITRESULT 列挙値のいずれかになります。

意味
TXTHITRESULT_CLOSE
点はクライアント矩形内にあり、非透過領域の近くにあります。
TXTHITRESULT_HIT
点はクライアント矩形内にあり、テキストの上にあるか、または背景が透過ではありません。
TXTHITRESULT_NOHIT
点はクライアント矩形の外にあります。
TXTHITRESULT_TRANSPARENT
点はクライアント矩形内にあり、テキストの上にないか、または背景が透過でした。

戻り値

型: HRESULT

戻り値は HRESULT コードです。

解説(Remarks)

このメソッドにより、ホストはテキスト上での透過ヒットテストを実装できます。

詳細については、ITextServices::TxDraw および ITextServices::OnTxSetCursor の「解説」セクションを参照してください。

vtbl 9 HRESULT OnTxInPlaceActivate(RECT* prcClient)

このコントロールがインプレースアクティブであることを text services オブジェクトに通知します。

prcClientRECT*inoutコントロールのクライアント矩形。

戻り値

型: HRESULT

オブジェクトが正常にアクティブ化された場合、戻り値は S_OK です。

エラーによりオブジェクトをアクティブ化できなかった場合、戻り値は E_FAIL です。COM エラーコードの詳細については、Error Handling in COM を参照してください。

解説(Remarks)

インプレースアクティブとは、埋め込みオブジェクトがインプレースで実行されていることを意味します(たとえば通常のコントロールや埋め込みでは、描画するウィンドウを持ちます)。対照的に、UI アクティブとは、オブジェクトが現在編集フォーカスを持っていることを意味します。たとえば、コンテナー上のメニューやツールバーなども、UI アクティブなコントロール/埋め込みの要素を含むことがあります。UI アクティブなコントロールは常に 1 つだけですが、インプレースアクティブなコントロールは多数存在し得ます。

UI アクティブ化はフォーカスの取得とは異なる点に注意してください。コントロールがフォーカスを取得または喪失することを text services オブジェクトに伝えるために、ホストは WM_SETFOCUS および WM_KILLFOCUS メッセージを送信します。また、ウィンドウレスホストは、これらのメッセージの wParam(フォーカスを失ったウィンドウ)として NULL を渡す点にも注意してください。

非アクティブ状態から UI アクティブ状態へ直接遷移する場合、ホストはまず ITextServices::OnTxInPlaceActivate を呼び出し、その後 ITextServices::OnTxUIActivate を呼び出す必要があります。

ITextServices::OnTxInPlaceActivate は、アクティブ化されるビューのクライアント矩形をパラメーターとして受け取ります。この矩形は、含まれるウィンドウのクライアント座標で与えられます。これはホストに対して TxGetClientRect を呼び出して取得されるものと同じです。

vtbl 10 HRESULT OnTxInPlaceDeactivate()

このコントロールがインプレースアクティブでなくなったことを text services オブジェクトに通知します。

戻り値

型: HRESULT

戻り値は常に S_OK です。

解説(Remarks)

インプレースアクティブ化とは、埋め込みオブジェクトがインプレースで実行されていることを指します(たとえば通常のコントロールや埋め込みでは、描画するウィンドウを持ちます)。対照的に、UI アクティブとは、オブジェクトが現在編集フォーカスを持っていることを意味します。具体的には、コンテナー上のメニューやツールバーなども、UI アクティブなコントロール/埋め込みの要素を含むことがあります。UI アクティブなコントロールは常に 1 つだけですが、インプレースアクティブなコントロールは同時に多数存在し得ます。

UI アクティブ化はフォーカスの取得とは異なる点に注意してください。コントロールがフォーカスを取得または喪失することを text services オブジェクトに知らせるために、ホストは WM_SETFOCUS および WM_KILLFOCUS メッセージを送信します。また、ウィンドウレスホストは、これらのメッセージの wParam(フォーカスを失ったウィンドウ)として NULL を渡す点にも注意してください。

UI アクティブ状態から非アクティブ状態へ遷移する場合、ホストはまず ITextServices::OnTxUIDeactivate を呼び出し、その後 ITextServices::OnTxInPlaceDeactivate を呼び出す必要があります。

vtbl 11 HRESULT OnTxUIActivate()

コントロールが UI アクティブになったことを text services オブジェクトに通知します。

戻り値

型: HRESULT

このメソッドは常に S_OK を返します。

解説(Remarks)

アクティブ化の詳細な説明については、ITextServices::OnTxInPlaceActivate を参照してください。

vtbl 12 HRESULT OnTxUIDeactivate()

コントロールが UI アクティブでなくなったことを text services オブジェクトに通知します。

戻り値

型: HRESULT

このメソッドは常に S_OK を返します。

解説(Remarks)

非アクティブ化の詳細な説明については、ITextServices::OnTxInPlaceActivate を参照してください。

vtbl 13 HRESULT TxGetText(LPWSTR* pbstrText)

コントロール内のすべての Unicode プレーンテキストを BSTR として返します。

pbstrTextLPWSTR*inout
      *</b>

Unicode プレーンテキスト。

戻り値

型: HRESULT

テキストが出力引数に正常に返された場合、戻り値は S_OK です。

メソッドが失敗した場合、戻り値は次のいずれかの HRESULT コードです。COM エラーコードの詳細については、Error Handling in COM を参照してください。

リターンコード 説明
E_INVALIDARG
無効な BSTR ポインターが渡されました。
E_OUTOFMEMORY
テキストのコピー用のメモリを割り当てられませんでした。

解説(Remarks)

ホスト(呼び出し元)が、返された BSTR の所有権を取得します。

プレーンテキストデータを取得する他の方法として、WM_GETTEXT や Text Object Model (TOM) の GetText メソッドの使用があります。

コントロールにテキストが存在しない場合、BSTR は割り当てられ、その中に 0x000D が返されます。

返されるテキストは、必ずしも null 終端されているとは限りません

vtbl 14 HRESULT TxSetText(LPWSTR pszText)

コントロール内のすべてのテキストを設定します。

pszTextLPWSTRin現在のテキストを置き換える文字列。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は S_OK です。

メソッドが失敗した場合、戻り値は次の HRESULT コードです。COM エラーコードの詳細については、Error Handling in COM を参照してください。

リターンコード 説明
E_FAIL
テキストを更新できませんでした。

解説(Remarks)

このメソッドは注意して使用する必要があります。本質的に、text services オブジェクトを新しいデータで再初期化します。取り消し(undo)情報を含め、以前のデータおよび書式情報はすべて失われます。

以前のデータがクリップボードにコピーされている場合、そのデータは破棄される前に(OleFlushClipboard を通じて)クリップボードへ完全にレンダリングされます。

このメソッドは Undoサポートしません

テキストを設定する代替手段として、WM_SETTEXTSetText の 2 つがあります。

vtbl 15 HRESULT TxGetCurTargetX(INT* param0)

ターゲット x 位置、すなわちキャレットの現在の水平位置を取得します。

param0INT*inout現在のターゲット X 位置を受け取るポインタである。

戻り値

型: HRESULT

キャレットの x 位置が返された場合、戻り値は S_OK です。

メソッドが失敗した場合、戻り値は次の HRESULT コードです。COM エラーコードの詳細については、Error Handling in COM を参照してください。

リターンコード 説明
E_FAIL
選択範囲がありません。
E_INVALIDARG
入力引数が無効です。

解説(Remarks)

ITextServices::OnTxSetCursor と組み合わせることで、このメソッドはキャレットを上下に移動する際に水平方向のキャレット位置を維持できます。この機能は、フォーム内でキャレットを移動する際に役立ちます。

ターゲットのキャレット位置は、ディスプレイ上の x 座標として表現されます。これは、他のコントロールが必ずしも列位置について同じ属性を共有しているとは限らないためです。

vtbl 16 HRESULT TxGetBaseLinePos(INT* param0)

text services のクライアント矩形を基準として、最初に表示される行のベースライン位置をピクセル単位で取得します。これにより、コントロールをベースラインで整列できます。

param0INT*inoutベースラインの位置を受け取るポインタである。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は S_OK です。

メソッドが失敗した場合、戻り値は次の HRESULT コードです。COM エラーコードの詳細については、Error Handling in COM を参照してください。

リターンコード 説明
E_NOTIMPL
実装されていません。
vtbl 17 HRESULT TxGetNaturalSize(DWORD dwAspect, HDC hdcDraw, HDC hicTargetDev, DVTARGETDEVICE* ptd, DWORD dwMode, SIZE* psizelExtent, INT* pwidth, INT* pheight)

コントロールのサイズを変更して、そのコンテンツに適切に収まるようにします。

dwAspectDWORDin描画のアスペクト。DVASPECT 列挙体の任意の値を指定できます。
hdcDrawHDCin描画が行われるデバイスコンテキスト。
hicTargetDevHDCinテキストの書式設定の対象となるデバイスコンテキスト(すなわち WYSIWYG 用)。
ptdDVTARGETDEVICE*inout対象デバイスに関する追加情報。
dwModeDWORDin

要求するフィッティングの種類。次のいずれかを指定できます。

意味
TXTNS_EMU
このメソッドのパラメーターの測定単位として、ピクセルの代わりに English Metric Units (EMU) を使用します。
TXTNS_FITTOCONTENT
渡された幅にテキストを書式設定することで、テキスト全体に収まるようにコントロールのサイズを変更します。text services オブジェクトは、テキスト全体の高さと最も長い行の幅を返します。

たとえば、ユーザーがコントロールのハンドルの 1 つをダブルクリックしたときに実行します。

TXTNS_FITTOCONTENT2
インデントされたコンテンツに収まるようにコントロールのサイズを変更します。
TXTNS_FITTOCONTENT3
インデントされたコンテンツと末尾の空白に収まるようにコントロールのサイズを変更します。
TXTNS_FITTOCONTENTWSP
インデントされていないコンテンツと末尾の空白に収まるようにコントロールのサイズを変更します。
TXTNS_INCLUDELASTLINE
プレーンテキストコントロールの場合、サイズを計算する際に最後のキャリッジリターンの高さを含めます。
TXTNS_ROUNDTOLINE
行が整数個表示される(行が切り取られない)ようにコントロールのサイズを変更します。渡された幅と高さを埋めるのに十分なテキストを書式設定し、最も近い行境界に丸めた高さを返します。
注意 渡される幅と高さ、および返される幅と高さは、ビュー矩形に対応します。ホストは必要に応じてクライアント矩形へ調整し直す必要があります。これらの値はテキストオブジェクトの範囲を表すため、HIMETRIC 座標(HIMETRIC の 1 単位は 0.01 ミリメートル)で入出力され、測定にはズーム倍率は含まれません。ズーム倍率についての説明は TxGetExtent を参照してください。
psizelExtentSIZE*inサポートされていません。
pwidthINT*inoutdwMode で定義されるフィッティングの幅。
pheightINT*inoutdwMode で定義されるフィッティングの高さ。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は S_OK です。

text services がオブジェクトをアクティブ化できなかった場合、戻り値は次のいずれかの HRESULT コードです。COM エラーコードの詳細については、Error Handling in COM を参照してください。

リターンコード 説明
E_FAIL
正しいサイズを判断できません。
E_INVALIDARG
1 つ以上の引数が無効です。
E_OUTOFMEMORY
メモリ不足。

解説(Remarks)

最初の 4 つのパラメーターは、ITextServices::TxDraw の対応するパラメーターと同様で、同じ情報を与えます。行を再計算する必要がある場合は、ITextServices::TxDraw と同じ方法でこれらの値を使用してください。

pwidth および pheight パラメーターは入出力パラメーターです。ホストは、テキストオブジェクトの自然な範囲の暫定的な幅と高さを渡します。text services オブジェクトはこれらの値を現在のキャッシュ状態と比較し、異なる場合は行を再計算します。その後、dwMode で指定されたとおりに自然なサイズを計算して返します。

vtbl 18 HRESULT TxGetDropTarget(IDropTarget** ppDropTarget)

テキストコントロールのドロップターゲットを取得します。

ppDropTargetIDropTarget**out指定したウィンドウにおけるドラッグアンドドロップ操作のターゲット。

戻り値

型: HRESULT

メソッドがドロップターゲットを正常に取得した場合、戻り値は S_OK です。

COM エラーコードの詳細については、Error Handling in COM を参照してください。

リターンコード 説明
E_OUTOFMEMORY
ドロップターゲットを作成できませんでした。

解説(Remarks)

ホスト(呼び出し元)は、RegisterDragDrop または RevokeDragDrop を呼び出す責任、および完了時に返されたドロップターゲットに対して Release を呼び出す責任を負います。

vtbl 19 HRESULT OnTxPropertyBitsChange(DWORD dwMask, DWORD dwBits)

コントロールのプロパティ(ビットで表される)を設定します。

dwMaskDWORDin変更するプロパティを表すビット。指定可能なビット値については、dwBits の TXTBIT_* 値の一覧を参照してください。
dwBitsDWORDin

ビットプロパティの新しい値。次の任意の組み合わせを指定できます。

意味
TXTBIT_ALLOWBEEP
TRUE の場合、ビープ音が有効です。
TXTBIT_AUTOWORDSEL
TRUE の場合、AutoWordSelect 機能が有効です。
TXTBIT_BACKSTYLECHANGE
TRUE の場合、背景スタイル (backstyle) が変更されました。TxGetBackStyle を参照してください。
TXTBIT_CHARFORMATCHANGE
TRUE の場合、文字書式が変更されました。
TXTBIT_CLIENTRECTCHANGE
TRUE の場合、クライアント矩形が変更されました。
TXTBIT_DISABLEDRAG
TRUE の場合、ドラッグが無効です。
TXTBIT_D2DDWRITE
このインスタンスに対して、GDI/Uniscribe ではなく Direct2D/DirectWrite を使用します。
TXTBIT_D2DPIXELSNAPPED
グリフを最も近いピクセル位置にレンダリングします。D2DDWRITE が設定されている場合にのみ有効です。
TXTBIT_D2DSUBPIXELLINES
サブピクセル精度で線を描画します。二次テキストフロー方向(通常は垂直方向)において、テキストの行、下線、取り消し線をピクセルスナップしません。D2DDWRITE が設定され、かつ D2DPIXELSNAPPED が設定されていない場合にのみ有効です。
TXTBIT_D2DSIMPLETYPOGRAPHY
シンプルタイポグラフィ(グリフレンダリングなし)を使用してテキストをレンダリングします。この値は TXTBIT_D2DDWRITE も指定されている場合にのみ有効です。
TXTBIT_EXTENTCHANGE
TRUE の場合、クライアント矩形のサイズが変更されました。
TXTBIT_HIDESELECTION
TRUE の場合、コントロールが非アクティブなときに text services オブジェクトは選択範囲を非表示にする必要があります。FALSE の場合、コントロールが非アクティブなときも選択範囲を表示する必要があります。

なお、これは TXTBIT_SAVESELECTIONTRUE であることを意味します。

TXTBIT_MAXLENGTHCHANGE
TRUE の場合、コントロール内のテキストの最大長が変更されました。
TXTBIT_MULTILINE
TRUE の場合、text services オブジェクトは複数行モードで動作する必要があります。行をビュー矩形に折り返すか切り取るかを決定するには、TXTBIT_WORDWRAP 値を使用します。

FALSE の場合、text services オブジェクトは ENTER キーによるキャリッジリターン/ラインフィードを処理すべきではなく、ハード改行を含む入力テキストは最初の改行の直前で切り詰める必要があります。ITextServices::TxSetText で設定されたテキストを切り詰めることも許容されます。これは、複数行フィールドにバインドされている場合に単一行コントロールを使用しないのはホストの責任だからです。

TXTBIT_NOTHREADREFCOUNT
このインスタンスのために TLS データを参照しません。
TXTBIT_PARAFORMATCHANGE
TRUE の場合、段落書式が変更されました。
TXTBIT_READONLY
TRUE の場合、text services オブジェクトはユーザーインターフェイスを通じた編集変更を一切受け付けるべきではありません。ただし、EM_SETTEXTEXEM_REPLACESELITextServices::TxSetText を通じたプログラムによる変更は引き続き受け付ける必要があります。また、ユーザーは引き続き挿入位置の移動、テキストの選択、コピーなどコンテンツを変更しないその他の操作を行えるようにする必要があります。
TXTBIT_RICHTEXT
TRUE の場合、text services オブジェクトはリッチテキストモードになります。

FALSE の場合、プレーンテキストモードになります。

なお、これは編集コマンドの適用方法に影響します。たとえば、プレーンエディットコントロールでテキストの一部に太字を適用すると、テキスト全体が太字になります。一方、リッチエディットコントロールでは、選択されたテキストのみが太字になります。

TXTBIT_SAVESELECTION
TRUE の場合、コントロールが非アクティブなときに選択範囲の境界を保存する必要があります。

FALSE の場合、コントロールが再びアクティブになったときに、選択範囲の境界を start = 0、length = 0 にリセットできます。

TXTBIT_SCROLLBARCHANGE
TRUE の場合、スクロールバーが変更されました。
TXTBIT_SELBARCHANGE
TRUE の場合、選択バーの幅が変更されました
TXTBIT_SHOWACCELERATOR
設定されている場合、アクセラレーター文字に下線を付ける必要があります。

TxGetAcceleratorPos を呼び出すには、これを設定する必要があります。

TXTBIT_SHOWPASSWORD
パスワード文字列を表示します。
TXTBIT_USECURRENTBKG
サポートされていません。
TXTBIT_USEPASSWORD
TRUE の場合、TxGetPasswordChar で取得したパスワード文字を使用してテキストを表示します。

このプロパティに関する通知は、パスワード文字が変更されたこと、または以前は使用されていなかったパスワード文字が現在は使用されている(あるいはその逆)ことのいずれかを意味します。

TXTBIT_VERTICAL
サポートされていません。
TXTBIT_VIEWINSETCHANGE
TRUE の場合、インセットが変更されました。
TXTBIT_WORDWRAP
TRUE かつ TXTBIT_MULTILINETRUE の場合、複数行コントロールは行をビュー矩形に折り返す必要があります。このプロパティが FALSETXTBIT_MULTILINETRUE の場合、行は折り返さずに切り取る必要があります。ビュー矩形の右側は無視する必要があります。

TXTBIT_MULTILINEFALSE の場合、このプロパティは効果を持ちません。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は S_OK です。

メソッドが失敗した場合、戻り値は次の HRESULT コードです。COM エラーコードの詳細については、Error Handling in COM を参照してください。

リターンコード 説明
E_NOTIMPL
実装されていません。

解説(Remarks)

クライアント矩形は、text services オブジェクトが描画と管理を担当する矩形です。ホストはその領域の描画を text services オブジェクトに依存します。text services オブジェクトは、その矩形の外側の領域を描画したり無効化したりしてはなりません。さらに、カーソルがこの矩形の上にあるとき、ホストはマウスメッセージを text services オブジェクトへ転送します。この矩形は、含まれるウィンドウのクライアント座標で表されます。

ビューインセットは、クライアント矩形とビュー矩形の間の各辺のスペースの量です。ビュー矩形(書式設定矩形とも呼ばれます)は、テキストを書式設定する矩形です。詳細については、TxGetViewInset を参照してください。

backstyle は、クライアント矩形の背景のスタイルです。TXTBACK_TRANSPARENT または TXTBACK_SOLID のいずれかになります。TXTBACKSTYLE を参照してください。

スクロールバープロパティは、スクロールバーの変更、すなわちどのスクロールバーが存在するか、スクロールが不可能なときにスクロールバーを非表示にするか無効にするか、および挿入位置がクライアント矩形から外れたときに自動スクロールを有効にするかどうかを示します。

vtbl 20 HRESULT TxGetCachedSize(DWORD* pdwWidth, DWORD* pdwHeight)

text services が使用しているキャッシュされた描画論理サイズ(存在する場合)を返します。通常、これは ITextServices::TxDraw や ITextServices::OnTxSetCursor などで最後に使用されたクライアント矩形のサイズになりますが、保証されるわけではありません。

pdwWidthDWORD*inout幅(クライアント座標)。
pdwHeightDWORD*inout高さ(クライアント座標)。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は HRESULT コードです。

解説(Remarks)

このメソッドにより、ホストはキャッシュされた描画サイズ情報を保持する必要や、同期を維持する必要から解放されます。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp)

HSP用 COM定義

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

出力引数:
#define global IID_ITextServices "{}"
#usecom global ITextServices IID_ITextServices "{}"
#comfunc global ITextServices_TxSendMessage           3 int,sptr,sptr,var
#comfunc global ITextServices_TxDraw                  4 int,int,sptr,var,sptr,sptr,var,var,var,sptr,int,int
#comfunc global ITextServices_TxGetHScroll            5 var,var,var,var,var
#comfunc global ITextServices_TxGetVScroll            6 var,var,var,var,var
#comfunc global ITextServices_OnTxSetCursor           7 int,int,sptr,var,sptr,sptr,var,int,int
#comfunc global ITextServices_TxQueryHitPoint         8 int,int,sptr,var,sptr,sptr,var,int,int,var
#comfunc global ITextServices_OnTxInPlaceActivate     9 var
#comfunc global ITextServices_OnTxInPlaceDeactivate   10
#comfunc global ITextServices_OnTxUIActivate          11
#comfunc global ITextServices_OnTxUIDeactivate        12
#comfunc global ITextServices_TxGetText               13 var
#comfunc global ITextServices_TxSetText               14 wstr
#comfunc global ITextServices_TxGetCurTargetX         15 var
#comfunc global ITextServices_TxGetBaseLinePos        16 var
#comfunc global ITextServices_TxGetNaturalSize        17 int,sptr,sptr,var,int,var,var,var
#comfunc global ITextServices_TxGetDropTarget         18 sptr
#comfunc global ITextServices_OnTxPropertyBitsChange  19 int,int
#comfunc global ITextServices_TxGetCachedSize         20 var,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。