Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[WinAPI] Problem z przywracaniem okna z traya

Ostatnio zmodyfikowano 2008-12-29 00:18
Autor Wiadomość
Patzick
Temat założony przez niniejszego użytkownika
[WinAPI] Problem z przywracaniem okna z traya
» 2008-12-28 21:47:27
Gdy klikam myszką na ikonkę w trayu w którym zminimalizowany jest program wywołuje się funkcja
[CODE SRc="C++"]ShowWindow(hwnd, SW_RESTORE);[/code]
SW_RESTORE odpowiada za przywrócenie okna do poprzedniego stanu, ale nawet jeżeli program był na samym wierzchu to po kliknięciu traya okno pojawia się "pod" innymi, a chciałbym żeby pojawiało się przed. Jedyne co udało mi się to dać styl WS_EX_TOPMOST w głównym oknie ale wtedy gdy chcę przejść do innej aplikacji nie minimalizując tej ona dalej jest na wierzchu :( a chcę, żeby była na wierzchu tylko przy wywołaniu okna. Mam nadzieję, że znacie rozwiązanie ;)
P-3055
DejaVu
» 2008-12-28 22:10:36
Hm... w sumie na ten sam problem natrafiłem i nie chciało mi się go rozwiązywać ;p Hm... spróbuję czegoś poszukać.

/edit:
Może coś z tego tematu coś Ci pomoże:
http://www.codeguru.com/forum/showthread.php?threadid=460544

/edit2:
Może to pomoże:
http://msdn.microsoft.com/en-us/library/ms632673(VS.85).aspx
P-3056
DejaVu
» 2008-12-28 23:00:38
Już wyczaiłem o co chodzi. Generalnie jeśli chcesz, żeby przycisk minimalizacji sprowadzał aplikację do tray'a, musisz napisać:
C/C++
case WM_SYSCOMMAND:
if( wParam == SC_MINIMIZE )
{
    ShowWindow( hwnd, SW_HIDE );
   
} else
{
    return DefWindowProc( hwnd, message, wParam, lParam );
}
break;
Jeśli nie podmienisz WM_SYSCOMMAND'a akcji minimalizującej to:
1. Aplikacja się zminimalizuje
2. Będziesz polował na komunikat WM_SIZE, żeby ukryć aplikację na belce:
C/C++
case WM_SIZE:
{
    if( wParam == SIZE_MINIMIZED )
    {
        ShowWindow( hwnd, SW_HIDE );
    }
    else
    {
        ShowWindow( hwnd, SW_SHOW );
    }
}
3. Przy przywracaniu aplikacji
C/C++
case CMSG_TRAY1:
{
    if( wParam == ID_TRAY1 )
    if( lParam == WM_LBUTTONDOWN )
    {
        ShowWindow( globalHwnd, SW_RESTORE );
    }
   
}
break;
Twoja aplikacja wróci, ale nie pojawi się na ekranie, ponieważ aplikacja najpierw została zminimalizowana, później ukryta przez co SW_RESTORE (jak i każdy inny komunikat) przywróci aplikację do stanu zminimalizowanego, który raczej nie należy do pożądanych.
P-3057
Patzick
Temat założony przez niniejszego użytkownika
» 2008-12-29 00:18:09
boskie, działa super teraz :D
dzięki, że to znalazłeś :)
P-3060
« 1 »
  Strona 1 z 1