Implementieren von In-Place QuickInfos
Direkte QuickInfos werden verwendet, um Textzeichenfolgen für Objekte anzuzeigen, die beschnitten wurden. Eine Abbildung finden Sie unter Informationen zu QuickInfo-Steuerelementen.
Der Unterschied zwischen gewöhnlichen und direkten QuickInfos ist die Positionierung. Wenn der Mauszeiger über einen Bereich bewegt wird, dem eine QuickInfo zugeordnet ist, wird die QuickInfo standardmäßig neben dem Bereich angezeigt. QuickInfos sind jedoch Fenster, und sie können an beliebiger Stelle positioniert werden, indem Sie SetWindowPos aufrufen. Beim Erstellen einer direkten QuickInfo muss das QuickInfo-Fenster so positioniert werden, dass es die Textzeichenfolge überlagert.
Wichtige Informationen
Technologien
Voraussetzungen
- C/C++
- Programmierung der Windows-Benutzeroberfläche
Anweisungen
Positionieren einer In-Place QuickInfo
Sie müssen drei Rechtecke nachverfolgen, wenn Sie eine direkte QuickInfo positionieren:
- Das Rechteck, das den vollständigen Bezeichnungstext umgibt.
- Das Rechteck, das den QuickInfo-Text umgibt. Der QuickInfo-Text ist mit dem vollständigen Bezeichnungstext identisch und hat normalerweise die gleiche Größe und Schriftart. Die beiden Textrechtecke haben daher in der Regel die gleiche Größe.
- Das QuickInfo-Fensterrechteck. Dieses Rechteck ist etwas größer als das Darin enthaltene QuickInfo-Textrechteck.
Die drei Rechtecke werden in der folgenden Abbildung schematisch dargestellt. Der ausgeblendete Teil des Bezeichnungstexts wird durch einen grauen Hintergrund gekennzeichnet.
Um eine direkte QuickInfo zu erstellen, müssen Sie das QuickInfo-Textrechteck so positionieren, dass es das Bezeichnungstextrechteck überlagert. Das Verfahren zum Ausrichten der beiden Rechtecke ist relativ einfach:
- Definieren Sie das Bezeichnungstextrechteck.
- Positionieren Sie das QuickInfofenster so, dass das QuickInfo-Textrechteck das Bezeichnungstextrechteck überlagert.
In der Praxis reicht es in der Regel aus, die obere linke Ecke der beiden Textrechtecke auszurichten. Der Versuch, die Größe des QuickInfo-Textrechtecks so zu ändern, dass es genau mit dem Bezeichnungstextrechteck übereinstimmt, kann zu Problemen mit der QuickInfo-Anzeige führen.
Das Problem bei diesem einfachen Schema besteht darin, dass Sie das QuickInfo-Textrechteck nicht direkt positionieren können. Stattdessen müssen Sie das QuickInfo-Fensterrechteck genau so weit oben und links neben dem Bezeichnungstextrechteck positionieren, dass die Ecken der beiden Textrechtecke übereinstimmen. Anders ausgedrückt: Sie müssen den Offset zwischen dem QuickInfo-Fensterrechteck und dem eingeschlossenen Textrechteck kennen. Im Allgemeinen gibt es keine einfache Möglichkeit, diesen Offset zu bestimmen.
Implementieren von In-Place QuickInfos
Das folgende Codefragment veranschaulicht, wie sie eine TTM_ADJUSTRECT-Nachricht in einem TTN_SHOW-Handler verwenden, um eine direkte QuickInfo anzuzeigen. Ihre Anwendung gibt an, dass der Bezeichnungstext abgeschnitten wird, indem die private fMyStringIsTruncated-Variable auf TRUE festgelegt wird. Der Handler ruft die anwendungsdefinierte Funktion GetMyItemRect auf, um das Bezeichnungstextrechteck abzurufen. Dieses Rechteck wird mit TTM_ADJUSTRECT an das QuickInfo-Steuerelement übergeben, das das entsprechende Fensterrechteck zurückgibt. SetWindowPos wird dann aufgerufen, um die QuickInfo über der Bezeichnung zu positionieren.
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);
}
In diesem Beispiel wird die Größe der QuickInfo nicht geändert, nur ihre Position. Die beiden Textrechtecke werden an ihren oberen linken Ecken ausgerichtet, aber nicht unbedingt mit den gleichen Abmessungen. In der Praxis ist der Unterschied in der Regel gering, und dieser Ansatz wird für die meisten Zwecke empfohlen. Obwohl Sie im Prinzip SetWindowPos verwenden können, um die Größe der QuickInfo zu ändern und neu zu positionieren, kann dies unvorhersehbare Folgen haben.
Bemerkungen
Die Version 5.80 von Allgemeinen Steuerelementen vereinfacht die Verwendung von direkten QuickInfos, indem eine neue Nachricht hinzugefügt wird, TTM_ADJUSTRECT. Senden Sie diese Nachricht mit den Koordinaten des Bezeichnungstextrechtecks, das von der QuickInfo überlagert werden soll, und gibt die Koordinaten eines entsprechend positionierten QuickInfo-Fensterrechtecks zurück.
Zugehörige Themen