[WinAPI] Problem z przywracaniem okna z traya
Ostatnio zmodyfikowano 2008-12-29 00:18
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 ;) |
|
DejaVu |
» 2008-12-28 22:10:36 |
|
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ć: 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: case WM_SIZE: { if( wParam == SIZE_MINIMIZED ) { ShowWindow( hwnd, SW_HIDE ); } else { ShowWindow( hwnd, SW_SHOW ); } }
3. Przy przywracaniu aplikacji 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. |
|
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ś :) |
|
« 1 » |