Skocz do zawartości

Tray nie działa


Recommended Posts

Napisano

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;
}
Napisano

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;
}
  • 4 weeks later...
Napisano

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]

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...