Problem mit TrayIcon



  • Ich habe ein kleines Problem beim Erstellen meines TrayIcons.
    Hier ist der Code meines "kleinen" Programmes:

    /////////////
    // CD-Tray //
    /////////////
    
    // Das Programm verwendet OOP - wenn dann - nur rudimentär
    
    // defines
    #define WM_CDTRAY_MOUSEMOVE  (WM_USER + 1) // user defined tray message
    #define TRAY_ID 0x200 // user defined tray identifier
    
    // benutzte Headers
    #include <windows.h>
    
    // globale Variabeln
    HINSTANCE g_hInstance;
    
    // gebraucht Prototypen
    LRESULT CALLBACK MainProc (HWND, UINT, WPARAM, LPARAM);
    
    // Ab hier gehts los
    int WINAPI WinMain (HINSTANCE hInstance,
                        HINSTANCE hPrevInstance,
                        LPSTR lpCmdLine,
                        int nCmdShow)
    {
        // globale Variabeln setzen
        g_hInstance = hInstance;
    
        // Registering Window-Class
        WNDCLASSEX wcMainWnd;
        memset (&wcMainWnd, 0, sizeof (wcMainWnd));
        wcMainWnd.cbSize = sizeof (WNDCLASSEX);
        wcMainWnd.hCursor = LoadCursor (NULL, IDC_ARROW);
        wcMainWnd.hIcon = LoadIcon (NULL, IDI_APPLICATION);
        wcMainWnd.hInstance = g_hInstance;
        wcMainWnd.lpfnWndProc = MainProc;
        wcMainWnd.lpszClassName = "CDTrayWndClass";
        wcMainWnd.style = CS_HREDRAW | CS_VREDRAW;
    
        (RegisterClassEx (&wcMainWnd));
    
        // Creating Window
        HWND hwndMainWnd;
        hwndMainWnd = CreateWindowEx (
            NULL,
            "CDTrayWndClass",
            "CD Tray",
            WS_OVERLAPPEDWINDOW,
            0,
            0,
            400,
            400,
            NULL,
            NULL,
            g_hInstance,
            NULL);
    
        // TODO: Error routin
    
        ShowWindow (hwndMainWnd, nCmdShow);
    
        // Message Pump
        MSG msgMsg;
        while (GetMessage (&msgMsg, hwndMainWnd, 0, 0));
        {
            TranslateMessage (&msgMsg);
            DispatchMessage (&msgMsg);
        }
    
        return 0;
    }
    
    // Haupt-Message Pump
    LRESULT CALLBACK MainProc (HWND hWnd,
                               UINT uMsg,
                               WPARAM wParam,
                               LPARAM lParam)
    {
        switch (uMsg)
        {
        case WM_CREATE:
            {
                char szTip[64] = "CD Tray";
    
                NOTIFYICONDATA nifCDTrayIcon;
                memset (&nifCDTrayIcon, 0, sizeof (nifCDTrayIcon));
                nifCDTrayIcon.cbSize = sizeof (NOTIFYICONDATA);
                nifCDTrayIcon.hIcon = LoadIcon (NULL, IDI_APPLICATION);
                nifCDTrayIcon.hWnd = hWnd;
                nifCDTrayIcon.uCallbackMessage = WM_CDTRAY_MOUSEMOVE;
                nifCDTrayIcon.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE;
                nifCDTrayIcon.uID = NULL;
    
                strcpy (nifCDTrayIcon.szTip, szTip);
                nifCDTrayIcon.szTip[strlen (szTip)] = '\0';
    
                Shell_NotifyIcon (NIM_ADD, &nifCDTrayIcon);
    
                break;
            }
        default:
            return DefWindowProc (hWnd, uMsg, wParam, lParam);
        }
    
        return 0;
    }
    

    Mein Problem ist nun, dass nachdem das TrayIcon gezeichnet wurde und das Fenster erstellt das Programm hängt. Ich weiß nicht wieso. In der Doku steht ich muss bei WM_PAINT 0 zurückgeben, was er ja auch tut. Ich versteh also nicht was da passiert. Außerdem ist meine CPU-Auslastung immer auf 100% solange das Fenster aktiviert ist (also so mit Fokus drauf, Titelleiste blau und so).

    Ich hoffe ihr könnt mir helfen.
    Danke schonmal im **Voraus.

    MfG
    Michael Beuse**



  • hehe, das hat doch garnichts mit dem Tray-Icon zu tun. Du hast bei der Message Loop ein Semikolon zuviel gemacht. :p



  • So ein Mist. Danke dir. MMMrrr, mann das ist ja zum in den ***** beißen. Naja, man lernt also seinen Code genau durch zuschauen auch wenn er kompiliert wird. 😃 😃 😃



  • hm...wieso gibst du ihm die id NULL?



  • War nur zum testen. Ich habe auch schon gemerkt, dass die id NULL nicht ganz so glückliche gewählt war.


Anmelden zum Antworten