Tray-Icon erstellen und Kontextmenü anzeigen



  • Was ist ein Tray-Icon?
    Ein Tray-Icon ist ein Icon was man in der Task-Leiste rechts neben der Uhr sieht. So ein Icon ist vielseitig nutzbar und findet insbesondere bei Anwendungen, die im Hintergrund laufen, Verwendung.

    Wie mache ich ein Tray-Icon

    {   //Create Tray Icon      
        char szTip[64] = "Tray-Icon Tutorial"; //Exemplarisch
    
        nidTrayIcon.cbSize = sizeof(nidTrayIcon);
        nidTrayIcon.hIcon = hProgramIcon; //Exemplarisch
        nidTrayIcon.hWnd = hMainWindow; //Exemplarisch, HWND des Fensters an dessen MessageLoop die Nachricht geschickt werden soll
        nidTrayIcon.uCallbackMessage = (WM_USER + 1); //Exemplarisch
        nidTrayIcon.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; //Exemplarisch
        nidTrayIcon.uID = 0x0200; //Exemplarisch
    
        strcpy(nidTrayIcon.szTip, szTip);
        nidTrayIcon.szTip[strlen(szTip)] = '\0';
    
        Shell_NotifyIcon(NIM_ADD, &nidTrayIcon);
    }
    

    Dabei muss nidTrayIcon eine globale Variable des Typs NOTIFYICONDATA sein. Mit uflags stellt man ein, welche Parameter korrekt gesetzt wurden, so ist es z.B. möglich ein Icon, ohne ToolTip-Text zu erzeugen.

    Wie entferne ich das Icon?

    Shell_NotifyIcon(NIM_DELETE, &nidTrayIcon);
    

    Wie aktualisiere ich das Icon?

    Shell_NotifyIcon(NIM_MODIFY, &nidTrayIcon);
    

    Wie fange ich in der MessageLoop Nachrichten ab?

    long CALLBACK WndProc(HWND hWnd, UINT nMsg, UINT wParam, LONG lParam)
    {
       switch(nMsg)
       {
       case (WM_USER + 1):
          {
             switch(lParam)
             {
             case WM_RBUTTONUP:
                {
                   // .
                   // .
                   // .
                }
             }
    
             return 0;
          }
       // .
       // .
       // .
    
       default:
          return DefWindowProc(hWnd, nMsg, wParam, lParam);
       }
    }
    

    Wie zeige ich ein Kontextmenü an ?
    Siehe auch: http://support.microsoft.com/default.aspx?scid=kb;EN-US;q135788

    long CALLBACK WndProc(HWND hWnd, UINT nMsg, UINT wParam, LONG lParam)
    {
       POINT pt;
    
       switch(nMsg)
       {
       case (WM_USER + 1):
          {
             switch(lParam)
             {
             case WM_LBUTTONUP:
                {
            SetForegroundWindow(hWnd);
            GetCursorPos(&pt);
            TrackPopupMenu(HandleEinesSubmenus, TPM_RIGHTBUTTON, pt.x, pt.y, 0, hWnd, NULL);
            PostMessage(hWnd, WM_NULL, 0, 0);
                }
             }
    
             return 0;
          }
       // .
       // .
       // .
    
       default:
          return DefWindowProc(hWnd, nMsg, wParam, lParam);
       }
    }
    

    [ Dieser Beitrag wurde am 05.11.2001 um 17:26 Uhr von Loggy editiert. ]

    [ Dieser Beitrag wurde am 26.05.2002 um 21:40 Uhr von geeky editiert. ]


Anmelden zum Antworten