Balloon Tooltips



  • Hier mein Problem:

    Problem gelöst, siehe weiter unten

    Ich will einen balloon tooltip anzeigen lassen aber viele members aus der struktur NOTIFYICONDATA sind nicht definiert ebenso wie NIF_INFO

    Die struct aus der ShellApi.h:

    typedef struct _NOTIFYICONDATAA {
            DWORD cbSize;
            HWND hWnd;
            UINT uID;
            UINT uFlags;
            UINT uCallbackMessage;
            HICON hIcon;
    #if (_WIN32_IE < 0x0500)
            CHAR   szTip[64];
    #else
            CHAR   szTip[128];
    #endif
    #if (_WIN32_IE >= 0x0500)
            DWORD dwState;
            DWORD dwStateMask;
            CHAR   szInfo[256];
            union {
                UINT  uTimeout;
                UINT  uVersion;
            } DUMMYUNIONNAME;
            CHAR   szInfoTitle[64];
            DWORD dwInfoFlags;
    #endif
    #if (_WIN32_IE >= 0x600)
            GUID guidItem;
    #endif
    } NOTIFYICONDATAA, *PNOTIFYICONDATAA;
    

    Mein Code:

    Nicon.cbSize = sizeof(NOTIFYICONDATA);
    Nicon.hWnd = hwnd;
    Nicon.uFlags = NIF_INFO;
    Nicon.uTimeout = 15000; // in milliseconds
    
    strcpy (Nicon.szInfoTitle, "Titel");
    strcpy (Nicon.szInfo, "Text");
    
    Shell_NotifyIcon(NIM_MODIFY, &Nicon);
    

    Dabei ist anzumerken das ich WinXP hab, _WIN32_IE in der PrSht.h mit 0x0501 definiert wurde und NIF_INFO auch mit IntelliSense mit korrektem Wert angezeigt wird, ich das neuste PSDK habe und nutze und die common controls header inkludiert habe.

    Ich hab auch wie in diesem Thread mal _WIN32_IE selbst definiert ohne erfolg:

    http://www.c-plusplus.net/forum/viewtopic.php?t=15773&highlight=nifinfo

    Ich könnte das jetzt alles manuell definieren bzw. #if _WIN32_IE >= 0x0XXX und #endif entfernen aber es gibt doch nocht bestimmt ne andere Lösung, oder??

    Danke 🙂

    btw.

    Ich kann das MFC Beispiel aus diesem MSDN Beitrag ohne Prbleme kompilieren ...

    ➡ ms-help://MS.MSDNQTR.2003FEB.1031/dnmag02/html/c0211.htm

    [EDIT]

    War natürlich mein Fehler ... man muss doch _WIN32_IE definieren ... ich hatte nur vergessen das VC++ nur einen Durchlauf beim compilen hat und deswegen wenn man die konstante nicht vor den Includes definiert mit der ursprünglichen konstante gearbeitet wird

    Ich will balloon tooltips in die FAQ 😃

    [/EDIT]



  • Wird die PrSht.h vor der shellapi.h includiert?



  • Nee, das war warscheinlich auch das Problem. hab jetzt vor allen includes #define _WIN32_IE 0x0600 hingesetzt und siehe da es funktioniert ... Danke 😉


Anmelden zum Antworten