Tooltip auf bestimmte fläche anzeigen



  • Hallo, ich habe ein Problem. Ich möchte gerne dass mir der Tooltip nur auf einer bestimmten Fläche angezeigt wird.
    Heißt also: hWnd ist das Window indem ich den Tooltip haben möchte. Nun möchte ich, dass der Tooltip auf der Position "40, 80, 80, 80" angezeigt wird.
    Mit dem momentanen Code wird mir der Tooltip leider nur im ganzen MainWindow angezeigt. Hab auch schon ein bisschen rumprobiert, jedoch ohne Erfolg...

    Momentaner Code:

    hWndTooltip = CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS, NULL, WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP, 
                                 CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hWnd, NULL, hInstTooltip,NULL);
    
    		SetWindowPos(hWndTooltip, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
    
    		TOOLINFO ti = { 0 };
    		ti.cbSize   = sizeof(TOOLINFO);
    		ti.uFlags   = TTF_SUBCLASS;
    		ti.hwnd     = hWnd;
    		ti.hinst    = hInstTooltip;
    		ti.lpszText = "Test";
    
    		GetClientRect (hWnd, &ti.rect);
    
    		SendMessage(hWndTooltip, TTM_ADDTOOL, NULL, (LPARAM) (LPTOOLINFO) &ti);
    

    Hoffe man kann mir helfen 🙂


  • Mod

    Warum füllst Du rect nicht aus?



  • Falls du das meinst, habs schon versucht, jedoch ohne Erfolg

    TOOLINFO ti = { 0 };
    

    Andernfalls hab ich auch schon ein RECT erstellt und damit dann damit versucht. Auch ohne Erfolg.

    ti.rect.top = rectTT.top;
    

  • Mod

    Damit setzt Du doch nur einen top Wert. Wo setzt Du dort das ganze rectangle?



  • Sorry, ich hab vergessen auch noch den Rest zu Posten. 😉

    Also ich hab das RECT nach der Zeile angegeben:

    ti.lpszText = "Test";
    


  • falsche Beispiele !



  • Die sind beide nur für Custom Tooltips, und warum sollte ich es mir so schwer machen, wenn es leichter auch geht? 🙂

    Es müsste doch eigentlich eine Lösung dafür geben, wie man das ganz einfach hinbekommt. Mit Google find ich leider auch nichts passendes...





  • Erst mal danke für den Link. Jedoch glaub ich, ich hab mich nicht ganz verständlich ausgedrückt 😃

    Ich habe den Tooltip schon erstellt, mithilfe der MSDN. Nun, ich möchte nicht, dass der Tooltip beim ganzen Window erscheint, sondern nur bei einem bestimmten Bereich. zB. RECT rect = { 0, 0, 50, 50 };
    Ich weiß nur nicht welchen Code ich einfügen muss, damit ich das Ergebnis bekomme. 🙂





  • Irgendwie funktoniert das bei mir nicht :|

    Ich hab jetzt so gemacht, jedoch funktioniert es nicht.

    RECT rc = { 0, 0, 50, 50 };
    		SendMessage(hWndTooltip, TTM_ADJUSTRECT, TRUE, (LPARAM)&rc);
    		SetWindowPos(hWndTooltip, HWND_TOPMOST, 0, 0, rc.right, rc.bottom, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
    


  • Hab es nun hinbekommen 🙂

    Ich habe ein RECT erstellt und dann darauf hingewiesen:

    [code="cpp"]hWndTooltip = CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS, NULL, WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,
    CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hWnd, NULL, hInstTooltip,NULL);

    RECT rect = { 0, 0, 50, 50 };

    SetWindowPos(hWndTooltip, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);

    TOOLINFO ti = { 0 };
    ti.cbSize = sizeof(TOOLINFO);
    ti.uFlags = TTF_SUBCLASS;
    ti.hwnd = hWnd;
    ti.hinst = hInstTooltip;
    ti.lpszText = "Test";
    ti.rect.left = rect.left;
    ti.rect.top = rect.top;
    ti.rect.right = rect.right;
    ti.rect.bottom = rect.bottom;

    GetClientRect (hWnd, &rect);

    SendMessage(hWndTooltip, TTM_ADDTOOL, NULL, (LPARAM) (LPTOOLINFO) &ti);[/code]


Anmelden zum Antworten