インプレース ツールヒントを実装する方法
インプレース ツールヒントは、クリップされたオブジェクトのテキスト文字列を表示するために使用されます。 図については、「ツールヒント コントロールについて」を参照してください。
通常のツールヒントとインプレース ツールヒントの違いは配置です。 既定では、ツールヒントが関連付けられている領域の上にマウス ポインターを置くと、その領域の横にヒントが表示されます。 ただし、ツールヒントはウィンドウであり、SetWindowPos を呼び出すことによって任意の場所に配置できます。 インプレース ツールヒントの作成は、テキスト文字列をオーバーレイするようにツールヒント ウィンドウを配置することです。
知っておくべきこと
テクノロジ
前提条件
- C/C++
- Windows ユーザー インターフェイス プログラミング
手順
インプレース ツールヒントの配置
インプレース ツールヒントを配置するときは、次の 3 つの矩形を追跡する必要があります。
- ラベル テキスト全体を囲む矩形。
- ツールヒント テキストを囲む矩形。 ツールヒントのテキストは、完全なラベル テキストと同じであり、通常は同じサイズとフォントです。 したがって、2 つのテキスト矩形は通常、同じサイズになります。
- ツツールヒント ウィンドウの矩形。 この矩形は、それを囲むツールヒント テキストの矩形よりもやや大きくなります。
次の図に、3 つの矩形を図式化して示します。 ラベル テキストの非表示部分は、灰色の背景で示されます。
インプレース ツールヒントを作成するには、ラベル テキストの矩形をオーバーレイするように、ツールヒント テキストの矩形を配置する必要があります。 2 つの矩形を配置する手順は比較的簡単です。
- ラベル テキストの矩形を定義します。
- ツールヒント テキストの矩形がラベル テキストの矩形をオーバーレイするように、ツールヒント ウィンドウを配置します。
実際には、通常、2 つのテキスト矩形の左上隅を揃えるので十分です。 ツールヒント テキストの矩形のサイズをラベル テキストの矩形と正確に一致するように変更しようとすると、ツールヒントの表示に問題が発生する可能性があります。
この単純なスキームの問題は、ツールヒント テキストの矩形を直接配置できないことです。 代わりに、2 つのテキスト矩形の角が一致するように、ツールヒント ウィンドウの矩形をラベル テキスト矩形の上と左に配置する必要があります。 つまり、ツールヒント ウィンドウの矩形とその囲まれたテキストの矩形との間の補正値を把握する必要があります。 一般に、この補正値を決定する簡単な方法はありません。
インプレース ツールヒントの実装
次のコード フラグメントは、TTN_SHOW ハンドラーで TTM_ADJUSTRECT メッセージを使用してインプレース ヒントを表示する方法を示しています。 アプリケーションは、プライベート fMyStringIsTruncated 変数を TRUE に設定することで、ラベル テキストが切り捨てられていることを示します。 ハンドラーは、アプリケーション定義関数 である GetMyItemRect を呼び出して、ラベル テキストの矩形を取得します。 この矩形は、TTM_ADJUSTRECT を使用してツールヒント コントロールに渡され、対応するウィンドウの矩形が返されます。 その後、SetWindowPos が呼び出され、ツールヒントがラベルの上に配置されます。
case TTN_SHOW:
if (fMyStringIsTruncated)
{
RECT rc;
GetMyItemRect(&rc);
SendMessage(hwndToolTip, TTM_ADJUSTRECT, TRUE, (LPARAM)&rc);
SetWindowPos(hwndToolTip, NULL, rc.left, rc.top, 0, 0,
SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
}
この例では、ツールヒントのサイズは変更されず、その位置だけが変更されます。 2 つのテキストの矩形は左上隅に配置されますが、必ずしも同じ寸法であるとは限りません。 実際には、この違いは通常は小さく、ほとんどの場合にこの方法が推奨されます。 原則として、SetWindowPos を使用してサイズを変更したり、ツールヒントの位置を変更したりすることはできますが、予期しない結果になる可能性があります。
解説
共通コントロール バージョン 5.80 では、新しいメッセージ TTM_ADJUSTRECT が追加され、インプレース ツールヒントの使用が簡略化されます。 このメッセージは、ツールヒントをオーバーレイするラベル テキストの矩形の座標と共に送信し、適切に配置されたツールヒント ウィンドウの矩形の座標を返します。
関連トピック