Delen via


Knopinfo voor tracering implementeren

Tooltips die het bijhouden blijven zichtbaar totdat ze expliciet door de toepassing worden gesloten en hun positie op het scherm dynamisch kan veranderen. Ze worden ondersteund door versie 4.70 en hoger van de standaardbesturingselementen.

Als u knopinfo voor bijhouden wilt maken, neemt u de vlag TTF_TRACK op in de uFlags- lid van de TOOLINFO- structuur bij het verzenden van het TTM_ADDTOOL bericht.

Uw toepassing moet handmatig een tooltipelement voor tracering activeren (weergeven) en deactiveren (verbergen) door een TTM_TRACKACTIVATE bericht te verzenden. Terwijl een trackingtooltip actief is, moet uw toepassing de locatie van de tooltip opgeven door TTM_TRACKPOSITION berichten naar het tooltip-besturingselement te verzenden. Omdat de toepassing taken afhandelt zoals het positioneren van de knopinfo, gebruiken bijhoudknopinfo de TTF_SUBCLASS vlag en het TTM_RELAYEVENT bericht niet.

Het TTM_TRACKPOSITION bericht zorgt ervoor dat het tooltop-venster wordt weergegeven met behulp van een van de twee plaatsingsstijlen.

  • De tooltip wordt standaard weergegeven naast het bijbehorende hulpmiddel op een positie die de controle kiest. De gekozen locatie is relatief ten opzichte van de coördinaten die u opgeeft met behulp van dit bericht.
  • Als u de TTF_ABSOLUTE waarde opneemt in het lid van de TOOLINFO structuur, worden de tooltips weergegeven op de pixellocatie die in het bericht is opgegeven. In dit geval probeert het besturingselement de locatie van het knopinfovenster niet te wijzigen van de coördinaten die u opgeeft.

Wat u moet weten

Technologieën

Voorwaarden

  • C/C++
  • Programmeren van Windows-gebruikersinterface

Aanwijzingen

Implementeer In-Place Tooltips

De uFlags lid van de TOOLINFO structuur die in het voorbeeld wordt gebruikt, bevat de TTF_ABSOLUTE vlag. Zonder deze vlag bepaalt het knopinfobesturingselement waar de tooltips moeten worden weergegeven, en kan de positie ten opzichte van het dialoogvenster plotseling veranderen wanneer de muisaanwijzer wordt verplaatst.

Notitie

g_toolItem is een globale TOOLINFO structuur.

 

In het volgende voorbeeld ziet u hoe u een besturingselement voor het bijhouden van knopinfo maakt. In het voorbeeld wordt het gehele clientgebied van het hoofdvenster opgegeven als het hulpprogramma.

HWND CreateTrackingToolTip(int toolID, HWND hDlg, WCHAR* pText)
{
    // Create a tooltip.
    HWND hwndTT = CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS, NULL, 
                                 WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP, 
                                 CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 
                                 hDlg, NULL, g_hInst,NULL);

    if (!hwndTT)
    {
      return NULL;
    }

    // Set up the tool information. In this case, the "tool" is the entire parent window.
    
    g_toolItem.cbSize   = sizeof(TOOLINFO);
    g_toolItem.uFlags   = TTF_IDISHWND | TTF_TRACK | TTF_ABSOLUTE;
    g_toolItem.hwnd     = hDlg;
    g_toolItem.hinst    = g_hInst;
    g_toolItem.lpszText = pText;
    g_toolItem.uId      = (UINT_PTR)hDlg;
    
    GetClientRect (hDlg, &g_toolItem.rect);

    // Associate the tooltip with the tool window.
    
    SendMessage(hwndTT, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &g_toolItem); 
    
    return hwndTT;
}
            

Implementatie van vensterprocedure

Wanneer de muisaanwijzer zich in het clientgebied bevindt, is de knopinfo actief en worden de cursorcoördinaten weergegeven, zoals te zien in de volgende afbeelding.

schermafbeelding van een dialoogvenster; een knopinfo toont de x- en y-coördinaten van de muisaanwijzer

De volgende voorbeeldcode komt uit de vensterprocedure voor een dialoogvenster dat de volgtooltip vertoont die in het vorige voorbeeld is gemaakt. De globale Booleaanse variabele g_TrackingMouse wordt gebruikt om te bepalen of het nodig is om de tooltip opnieuw te activeren en het muis bijhouden opnieuw in te stellen, zodat de toepassing wordt gewaarschuwd wanneer de muisaanwijzer het clientgebied van het dialoogvenster verlaat.

//g_hwndTrackingTT is a global HWND variable

case WM_INITDIALOG:

        InitCommonControls();
        g_hwndTrackingTT = CreateTrackingToolTip(IDC_BUTTON1, hDlg, L"");
        return TRUE;

case WM_MOUSELEAVE: // The mouse pointer has left our window. Deactivate the tooltip.
    
    SendMessage(g_hwndTrackingTT, TTM_TRACKACTIVATE, (WPARAM)FALSE, (LPARAM)&g_toolItem);
    g_TrackingMouse = FALSE;
    return FALSE;

case WM_MOUSEMOVE:

    static int oldX, oldY;
    int newX, newY;

    if (!g_TrackingMouse)   // The mouse has just entered the window.
    {                       // Request notification when the mouse leaves.
    
        TRACKMOUSEEVENT tme = { sizeof(TRACKMOUSEEVENT) };
        tme.hwndTrack       = hDlg;
        tme.dwFlags         = TME_LEAVE;
        
        TrackMouseEvent(&tme);

        // Activate the tooltip.
        SendMessage(g_hwndTrackingTT, TTM_TRACKACTIVATE, (WPARAM)TRUE, (LPARAM)&g_toolItem);
        
        g_TrackingMouse = TRUE;
    }

    newX = GET_X_LPARAM(lParam);
    newY = GET_Y_LPARAM(lParam);

    // Make sure the mouse has actually moved. The presence of the tooltip 
    // causes Windows to send the message continuously.
    
    if ((newX != oldX) || (newY != oldY))
    {
        oldX = newX;
        oldY = newY;
            
        // Update the text.
        WCHAR coords[12];
        swprintf_s(coords, ARRAYSIZE(coords), L"%d, %d", newX, newY);
        
        g_toolItem.lpszText = coords;
        SendMessage(g_hwndTrackingTT, TTM_SETTOOLINFO, 0, (LPARAM)&g_toolItem);

        // Position the tooltip. The coordinates are adjusted so that the tooltip does not overlap the mouse pointer.
        
        POINT pt = { newX, newY }; 
        ClientToScreen(hDlg, &pt);
        SendMessage(g_hwndTrackingTT, TTM_TRACKPOSITION, 0, (LPARAM)MAKELONG(pt.x + 10, pt.y - 20));
    }
    return FALSE;

Tooltipbesturingselementen gebruiken