Skocz do zawartości

Tray nie działa


Kid

Recommended Posts

Napisałem kod który jest poniżej.
W momencie kiedy zminimalizuję okno pojawia się ikonka w Tray-u. (jest OK), ale w momencie kiedy przejadę myszką nad tą ikonką to automatycznie ona znika, zdarzenie WM_TRAY nie zachodzi, a przogram działa jakby nic się nie stało.
co jest nie tak?
może to przez to ze mam system win NT?

#include <windows.h>

# define WM_TRAY WM_USER+1

LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

char szClassName[ ] = "WindowsApp";
NOTIFYICONDATA nid;
HWND hwnd, thwnd;

int WINAPI
WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)

{
    MSG messages;            
    WNDCLASSEX wincl;        

    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      
    wincl.style = CS_DBLCLKS;                 
    wincl.cbSize = sizeof (WNDCLASSEX);
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 
    wincl.cbClsExtra = 0;                      
    wincl.cbWndExtra = 0;                      
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    nid.cbSize = sizeof(NOTIFYICONDATA);
    nid.hWnd = hwnd;
    nid.uID = 1001;
    nid.uFlags =  NIF_MESSAGE | NIF_ICON | NIF_TIP;
    nid.uCallbackMessage = WM_TRAY;;
    nid.hIcon =  LoadIcon(NULL, IDI_APPLICATION);
    lstrcpyn(nid.szTip, szClassName, sizeof(nid.szTip));

    if (!RegisterClassEx (&wincl)) return 0;

    hwnd = CreateWindow (szClassName, 
            "Windows App", 
            WS_OVERLAPPEDWINDOW, 
            0, 0, 640, 480,                 
            HWND_DESKTOP,        
            NULL,                
            hThisInstance,       
            NULL                 
            );

    ShowWindow (hwnd, nFunsterStil);

    while (GetMessage (&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }
    return messages.wParam;
}

LRESULT CALLBACK
WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                  
    {
        case WM_DESTROY:
            PostQuitMessage (0);       
            break;
        case WM_SIZE:
            if (LOWORD(wParam)==1) Shell_NotifyIcon(NIM_ADD, &nid);
            break;
        case WM_TRAY:    
            MessageBox (NULL, "l","k", MB_OK);   
        default:
            return DefWindowProc (hwnd, message, wParam, lParam);
    }
    return 0;
}
Link do komentarza
Udostępnij na innych stronach

Ja tak offtopicowo do chmielaczka:
Jak piszesz post i chcesz wstawic kawalek kodu źródłowego to użyj takiego przycisku jak (Code) wtedy to lepiej wyglada dla czytajacych. A jak nie wiesz gdzie jest ten guzik (Code) to poprostu umieść twój kod miedzy tym <code> a tym </code> (zamiast < uzyj [ a zamiast tego > uzyj tego ]) i wtedy to bedzie wygladalo tak ladnie:

#include <stdio.h>

int main()
{
  printf("Hello World!");
  return 0;
}
Link do komentarza
Udostępnij na innych stronach

  • 4 weeks later...

jak już to skromnie szatkus ujął :)  nie powinieneś inicjować struktury nid jeśli jeszcze nie stworzyłeś okna. przecież pobiera ona do jego uchwyt. najlepiej zrób tak jak to jest podane w artykule na ten temat tzn. stwórz ikonkę w trayu podzczas komunikatu WM_CREATE. no i dobrze by było gdybyś pozbył się jej podczas usuwania okna.....[/img]

Link do komentarza
Udostępnij na innych stronach

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...