Balloon Tips - Doch wie im tray...



  • Ich erstelle mit folgendem Beispiel aus der msdn Balloon Tips:

    /* CREATE A TOOLTIP CONTROL OVER THE ENTIRE WINDOW AREA */
    void CreateMyTooltip (HWND hwnd,HINSTANCE ghThisInstance)
    {
                     // struct specifying control classes to register
        INITCOMMONCONTROLSEX iccex;
        HWND hwndTT;                 // handle to the ToolTip control
              // struct specifying info about tool in ToolTip control
        TOOLINFO ti;
        unsigned int uid = 0;       // for ti initialization
        char strTT[30] = "This is your ToolTip string.";
        LPTSTR lptstr = strTT;
        RECT rect;                  // for client area coordinates
    
        /* INITIALIZE COMMON CONTROLS */
        iccex.dwICC = ICC_WIN95_CLASSES;
        iccex.dwSize = sizeof(INITCOMMONCONTROLSEX);
        InitCommonControlsEx(&iccex);
    
        /* CREATE A TOOLTIP WINDOW */
        hwndTT = CreateWindowEx(WS_EX_TOPMOST,
            TOOLTIPS_CLASS,
            NULL,
            WS_POPUP | TTS_NOPREFIX | TTS_BALLOON,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            hwnd,
            NULL,
            ghThisInstance,
            NULL
            );
    
        SetWindowPos(hwndTT,
            HWND_TOPMOST,
            0,
            0,
            0,
            0,
            SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
    
        /* GET COORDINATES OF THE MAIN CLIENT AREA */
        GetClientRect (hwnd, &rect);
    
        /* INITIALIZE MEMBERS OF THE TOOLINFO STRUCTURE */
        ti.cbSize = sizeof(TOOLINFO);
        ti.uFlags = TTF_SUBCLASS;
        ti.hwnd = hwnd;
        ti.hinst = ghThisInstance;
        ti.uId = uid;
        ti.lpszText = lptstr;
            // ToolTip control will cover the whole window
        ti.rect.left = rect.left;    
        ti.rect.top = rect.top;
        ti.rect.right = rect.right;
        ti.rect.bottom = rect.bottom;
    
        /* SEND AN ADDTOOL MESSAGE TO THE TOOLTIP CONTROL WINDOW */
        SendMessage(hwndTT, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti);	
    
    }
    

    Wie jedoch bekomme ich die zu meinem Tray icon? Muss ich mit SendMessage an das Tray Icon senden? Und kann ich in irgendeiner Weise auswerten was der Benutzer mit meinem Balloon Tipp gemacht hat?





  • hmmm.... sehr MFC lastig
    Ist der Weg den mein Code geht denn definitiv falsch?



  • Du musst es via "NOTIFYICONDATA" machen!
    Das ganze ist auch hier:
    http://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/tooltip/usingtooltips.asp
    ausführlich erklärt...



  • Du musst es via "NOTIFYICONDATA" machen!

    Hmmmm... will heißen? Ich weiß wie ich ein Tray Icon bekomme. Meine Frage ist wie der Balloon Tipp da hin kommt!
    Außerdem stammt mein Code (falls du ihn gelesen haben solltest) aus deinem Link.



  • Aus welchem Link? Aber nicht aus dem den ich als letztes gepostet habe (oder hier hast Du dann zumindest im Falschen Absatz den Code kopiert 😉 )



  • Der "richtige" Code sieht nämlich wie folgt aus:

    #define ARRAYSIZE(a) (sizeof(a)/sizeof(a[0]))
    
    NOTIFYICONDATA IconData = {0};
    
    IconData.cbSize = SIZEOF(IconData);
    IconData.hWnd = hwndNI;
    IconData.uFlags = NIF_INFO;
    
    HRESULT hr = StringCchCopy(IconData.szInfo, ARRAYSIZE(IconData.szInfo), TEXT("Your message text goes here."));
    if(FAILED(hr))
    {
    // TODO: Write an error handler in case the call to StringCchCopy fails.
    }
    IconData.uTimeout = 15000; // in milliseconds
    
    Shell_NotifyIcon(NIM_MODIFY, &IconData);
    


  • Jepp, das habe ich auch eben bemerkt. Hast Recht, vielen Dank erstmal!


Anmelden zum Antworten