如何實作就地工具提示
就地工具提示可用來顯示已裁剪之物件的文字字串。 如需圖例,請參閱 關於工具提示控件。
一般和就地工具提示之間的差異在於定位。 根據預設,當滑鼠指標停留在具有與其相關聯工具提示的區域上時,工具提示會顯示在區域相鄰。 不過,工具提示是視窗,而且可以透過呼叫 SetWindowPos 來放置在您選擇的任何位置。 建立就地工具提示是定位工具提示視窗,使其重疊文字字串的問題。
您需要知道的事項
技術
必要條件
- C/C++
- Windows 使用者介面程序設計
指示
定位就地工具提示
在定位就地工具提示時,您需要追蹤三個矩形:
- 圍繞完整標籤文字的矩形。
- 圍繞工具提示文字的矩形。 工具提示文字與完整的標籤文字相同,而且通常大小和字型相同。 因此,這兩個文字矩形的大小通常相同。
- 工具提示視窗矩形。 這個矩形稍微大於其所括的工具提示文字矩形。
下圖以圖解方式顯示這三個矩形。 標籤文字的隱藏部分會以灰色背景表示。
若要建立就地工具提示,您必須放置工具提示文字矩形,使其重疊標籤文字矩形。 對齊兩個矩形的程序相當簡單:
- 定義標籤文字矩形。
- 放置工具提示視窗,使工具提示文字矩形重疊標籤文字矩形。
實際上,通常足以對齊兩個文字矩形的左上角。 嘗試調整工具提示文字矩形的大小,以完全符合標籤文字矩形,可能會導致工具提示顯示發生問題。
這個簡單配置的問題在於您無法直接放置工具提示文字矩形。 相反地,您必須將工具提示視窗矩形放置在標籤文字矩形的上方和左邊,讓兩個文字矩形的角落重合。 換句話說,您必須知道工具提示視窗矩形與其封閉文字矩形之間的位移。 一般而言,判斷此位移沒有簡單的方法。
實作就地工具提示
下列代碼段說明如何使用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);
}
此範例不會變更工具提示的大小,而只會變更其位置。 這兩個文字矩形會對齊其左上角,但不一定與相同的維度對齊。 在實務上,差異通常很小,因此在大部分情況下,建議使用此方法。 雖然您原則上 可以使用 SetWindowPos 來重設大小,以及重新定位工具提示,但這樣做可能會產生無法預測的結果。
備註
通用控件 5.80 版藉由新增新訊息來簡化就地工具提示的使用, TTM_ADJUSTRECT。 使用您想要工具提示重疊的標籤文字矩形座標傳送此訊息,並傳回適當位置工具提示視窗矩形的座標。
相關主題