ToolTip ohne MFC



  • Hallo,

    ich weiss nicht richtig wo das Thema hingehört, deshalb packe ich es mal da hin wo es auf jeden Fall nicht hingehört 🙂

    Ich habe ein ActiveX Control, das ich ganz normale zeiche usw.
    Nun möchte ich abhängig von meiner Mausposition auf dem ActiveX Control verschiedene Tooltips (ganz normaler standard tooltip reicht) ausgeben.

    Da ActiveX = ATL ist da nix mit CToolTipCtrl und dergleichen.

    Hat jemand zufällig schon mal etwas diesbezüglich entworfen und würde sein Wissen teilen bzw. könnte ein paar Tips geben.

    Vielen Dank, Grüsse Titanico.





  • Wobei das ganze besser so heißen sollte:

    bool CreateToolTip(HWND hWndTarget, LPTSTR lpstToolTip, int nWidth)
    {
        HWND hWndToolTip = CreateWindow(TOOLTIPS_CLASS, NULL, WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hWndTarget, NULL, NULL, NULL);
    
        if (!hWndToolTip)
            return false;
    
        TOOLINFO ti;
        ti.cbSize = sizeof(ti);
        ti.uFlags = TTF_TRANSPARENT | TTF_SUBCLASS;
        ti.hwnd = hWndTarget;
        ti.uId = 0;
        ti.hinst = NULL;
        lstrcpy(ti.lpszText, lpstToolTip);
    
        GetClientRect(hWndTarget, &ti.rect);
        SendMessage(hWndToolTip, TTM_ADDTOOL, 0, (LPARAM)&ti);
        SendMessage(hWndToolTip, TTM_SETMAXTIPWIDTH, 0, (LPARAM)nWidth);
        SendMessage(hWndToolTip, TTM_SETDELAYTIME, TTDT_AUTOPOP, 20000);
    
        return true;
    }
    

    😉



  • (D)Evil schrieb:

    Wobei das ganze besser so heißen sollte:

    bool CreateToolTip(HWND hWndTarget, LPTSTR lpstToolTip, int nWidth)
    {
        HWND hWndToolTip = CreateWindow(TOOLTIPS_CLASS, NULL, WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hWndTarget, NULL, NULL, NULL);
    
        if (!hWndToolTip)
            return false;
         
        TOOLINFO ti;
        ti.cbSize = sizeof(ti);
        ti.uFlags = TTF_TRANSPARENT | TTF_SUBCLASS;
        ti.hwnd = hWndTarget;
        ti.uId = 0;
        ti.hinst = NULL;
        lstrcpy(ti.lpszText, lpstToolTip);
    
        GetClientRect(hWndTarget, &ti.rect);
        SendMessage(hWndToolTip, TTM_ADDTOOL, 0, (LPARAM)&ti);
        SendMessage(hWndToolTip, TTM_SETMAXTIPWIDTH, 0, (LPARAM)nWidth);
        SendMessage(hWndToolTip, TTM_SETDELAYTIME, TTDT_AUTOPOP, 20000);
        
        return true;
    }
    

    😉

    wenn schon dann so:

    HWND CreateToolTip(HWND target, char* tooltip, LPARAM width)
    {
         HWND hwndToolTip;
    
         hwndToolTip = CreateWindow(TOOLTIPS_CLASS, NULL, WS_POPUP |
                           TTS_NOPREFIX | TTS_ALWAYSTIP, CW_USEDEFAULT,     
                           CW_USEDEFAULT, CW_USEDEFAULT,
                           CW_USEDEFAULT, target, NULL, NULL, NULL);
         if (hwndToolTip)
         {
              TOOLINFO ti;
              ti.cbSize = sizeof(ti);
              ti.uFlags = TTF_TRANSPARENT | TTF_SUBCLASS;
              ti.hwnd = target;
              ti.uId = 0;
              ti.hinst = NULL;
              ti.lpszText = tooltip;
              GetClientRect(target, &ti.rect);
              SendMessage(hwndToolTip, TTM_ADDTOOL, 0, (LPARAM) &ti );
              SendMessage(hwndToolTip,TTM_SETMAXTIPWIDTH,0,width);
              SendMessage(hwndToolTip,TTM_SETDELAYTIME,TTDT_AUTOPOP,20000);
         }
         return hwndToolTip;
    }
    


  • Danke für die Antworten.

    funktioniert!



  • Titanico schrieb:

    Danke für die Antworten.
    funktioniert!

    gern geschehen.. 🙂



  • Ich versuche auch den Quelltext zum Laufen zu bekommen. Allerdings bekomme ich in dem Quelltext in folgender Zeile

    GetClientRect(target, &ti.rect);
    

    diese Fehlermeldung:

    error C2660: 'GetClientRect' : Funktion akzeptiert keine 2 Parameter
    

    Weiss jemand Rat?



  • versuch

    ::GetClientRect(target, &ti.rect);
    


  • 👍 Das funktionierte!

    Das Problem ist jetzt nur, dass nur Tooltips für Steuerelemente angezeigt werden, die enabled sind und leider auch nichts angezeigt wird bei einem grafischen ActiveX-Element, welches ich implementiert habe.

    Hast Du da vielleicht auch noch einen Rat parat?


Anmelden zum Antworten