Mein Tooltip wird gar nicht angezeigt!



  • Am Programm beenden liegt es nicht! Ich hab jetzt mal ein Fenster erzeugt und das Icon Tray so gemacht das es nicht beendet wird und trotzdem kommt kein "ToolTip"!

    #define _WIN32_IE 0x0600 
    
    #include <windows.h>
    #include <commctrl.h>
    
    #include "resource.h"
    
    #define WM_ICONCLICK (WM_APP+0)
    
    void fnToolTip(HWND, WPARAM, LPARAM, char *);
    void fnIconTray(HWND, BOOL);
    
    LRESULT CALLBACK fnWndProc(HWND, UINT, WPARAM, LPARAM);
    
    HINSTANCE hPREV_OF;
    HICON hIcon;
    
    static UINT s_uTaskbarRestart;
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdLine)
    {
    
    MSG msg;
    HWND hWnd;
    
    WNDCLASS wndclass;
    hPREV_OF = hInstance;
    
    wndclass.style = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc = fnWndProc;
    wndclass.cbClsExtra = 0;
    wndclass.cbWndExtra = 0;
    wndclass.hInstance = hInstance;
    wndclass.hIcon = (HICON)LoadIcon(hInstance, reinterpret_cast<const char *>(IDI_ICON1));
    wndclass.hCursor = LoadCursor(hInstance, IDC_HAND);
    wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wndclass.lpszMenuName = 0;
    wndclass.lpszClassName = reinterpret_cast<LPCTSTR>("mywindow");
    
    if (!RegisterClass(&wndclass))
    {
    
    	MessageBox(NULL, reinterpret_cast<LPCTSTR>("Leider konnte die Klasse nicht geladen werden!"), reinterpret_cast<LPCTSTR>("WNDCLASS"), MB_ICONERROR);
    
    }
    
    hWnd = CreateWindow("mywindow", 
    					"MyWindow", 
    					WS_OVERLAPPEDWINDOW, 
    					CW_USEDEFAULT, 
    					CW_USEDEFAULT,
    					CW_USEDEFAULT,
    					CW_USEDEFAULT,
    					NULL, 
    					NULL, 
    					hInstance, 
    					NULL);
    
    ShowWindow(hWnd, iCmdLine);
    UpdateWindow(hWnd);  
    
    while(GetMessage(&msg, NULL, 0,0))
    {
    
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    
    }
    
    return msg.wParam;
    
    }
    
    void fnToolTip(HWND hWnd, WPARAM wParam, LPARAM lParam, char *szText)
    {
    
    	TOOLINFO ti; 
    	HWND ToolTip; 
    
    	ToolTip = CreateWindowEx(WS_EX_TOPMOST, 
    		TOOLTIPS_CLASS, 
            NULL, 
            TTS_BALLOON, 
            CW_USEDEFAULT, 
            CW_USEDEFAULT, 
            CW_USEDEFAULT, 
            CW_USEDEFAULT, 
            hWnd, 
            NULL, 
            hPREV_OF, 
            NULL 
            ); 
    
        SetWindowPos(ToolTip, 
            HWND_TOPMOST, 
            0, 
            0, 
            0, 
            0, 
            SWP_NOMOVE); 
    
        ti.cbSize = sizeof(TOOLINFO); 
        ti.uFlags = TTF_SUBCLASS; 
        ti.hwnd = hWnd; 
        ti.hinst = hPREV_OF; 
        ti.uId = 0; 
    	ti.lpszText = szText; 
    
        ti.rect.left = 0; 
        ti.rect.top = 0; 
        ti.rect.right = 100; 
        ti.rect.bottom = 100; 
    
        SendMessage(ToolTip, TTM_ACTIVATE, (WPARAM) wParam, (LPARAM) lParam);
    
    }
    
    void fnIconTray(HWND hWnd, BOOL bAnzeigen)
    {
    
    	NOTIFYICONDATA tsym; 
    
        ZeroMemory (&tsym, sizeof (NOTIFYICONDATA));
    
        if (bAnzeigen)
        {
            tsym.cbSize = sizeof (NOTIFYICONDATA);
            tsym.hWnd   = hWnd;
            tsym.uID    = IDI_ICON1;
            tsym.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE;
            tsym.uCallbackMessage = NULL;
            tsym.hIcon  = hIcon;
            strcpy (tsym.szTip, "http://www.rp-homepage.com");
            Shell_NotifyIcon (NIM_ADD, &tsym);
        }
    
        else
        {
            tsym.cbSize = sizeof (NOTIFYICONDATA);
            tsym.hWnd   = hWnd;
            tsym.uID    = IDI_ICON1;
            tsym.uFlags = 0;
            Shell_NotifyIcon (NIM_DELETE, &tsym);
        }
    
    }
    
    LRESULT CALLBACK fnWndProc(HWND hWnd, UINT mSG, WPARAM wParam, LPARAM lParam)
    {
    
    switch(mSG)
    {
    
    case WM_CREATE:
    
    	s_uTaskbarRestart = RegisterWindowMessage (TEXT("TaskbarCreated"));
    
    	hIcon = (HICON)LoadImage (hPREV_OF, "icon1.ico", IMAGE_ICON, 0, 0, LR_LOADFROMFILE);
    
    	fnIconTray(hWnd, TRUE);
    
    	fnToolTip(hWnd, wParam, lParam, "Hallo!!");
    
    	break;
    
    case WM_ICONCLICK:
    
    	switch(lParam)
        {
    
    	case WM_LBUTTONUP: // linke Maustaste
    
    		MessageBox (hWnd, "Maustaste links", "Taskbar Icon", NULL);
    
    		break;
    
    	case WM_RBUTTONUP: // rechte Maustaste
    
    		MessageBox (hWnd, "Maustaste rechts", "Taskbar Icon", NULL);
    
    		break;
    
    	}
    
    	return 0;
    
    	case WM_CLOSE:
    
    		DestroyIcon (hIcon); 
    		PostQuitMessage(0);
    
    		break;
    
    default:
    
    	if (mSG == s_uTaskbarRestart)
            fnIconTray(hWnd, TRUE);
    
    	break;
    
    }
    
    return DefWindowProc(hWnd, mSG, wParam, lParam);
    
    }
    

    Weiß einfach nicht woran das liegt?



  • Prüf mal Rückgabewert von Shell_NotifyIcon() und check mal ob das Icon auch wirklich geladen wird...



  • Das Icon wird ja geladen, ich seh es ja im Tray. Aber der ToolTip wird nicht geladen, bitte nicht verwechseln den Icon Tray Tooltip der vom Icon mitgeliefert wird, sondern dieser Tooltip Ballong!





  • Spielgrips schrieb:

    SetWindowPos(ToolTip, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE);
    

    Ich mag mich ja irren, aber ist es sinnvoll ein ToolTip mit der Breite/Höhe von jeweil 0 Pixeln zu basteln?



  • habe auch noch ein paar kleine "fehler" bzw vorschläge

    - reinterpret_cast weglassen --> warum c++ cast und warum dann den gefährlichsten?
    - globale variablen vermeiden (designfrage)
    - fensterhandle von tooltip speichern, denn wie möchtest du den nachrichten dorthin versenden?
    - rückgabewert von createwindow abfragen bzw getlasterror()



  • Dieses rumbasteln hilft och nicht mehr, kann mir einer mal ein Beispiel coden?



  • initcommoncontrols gemacht?
    rückgabewert von createwindow?

    [edit]
    @hepi

    msdn schrieb:

    The window procedure for the ToolTip control automatically sets the size, position, and visibility of the control. The height of the ToolTip window is based on the height of the font currently selected into the device context for the ToolTip control. The width varies based on the length of the string currently in the ToolTip window.



  • Initcommoncontrols habe ich gemacht vorm erstellen.. GetLastError(); weiß ich nicht wie ich jetzt den Wert oder die Message ausgeben soll! Also per MessageBox habe ich es versucht und da kam nix :(!

    Edit >> Hab das mit einer IF auswerten lassen, also die CreateWindow gibt kein NULL zurück, also wird es erzeugt :)! Aber wo bleibt es?



  • Der große Fehler war die Konstante:

    #define _WIN32_IE 0x0600
    

    Und zwar ohne eine richtige Version anzugeben, geht das nicht, also hab ich die Konstante geändert und schon gehts!

    #define _WIN32_IE 0x0501
    

Anmelden zum Antworten