czarek1959 Temat założony przez niniejszego użytkownika |
Aplikacja konsolowa - zamykanie » 2011-04-19 12:25:44 Witam,
Ponownie prośba o pomoc/podpowiedź. Jak postąpić aby przy zamykaniu aplikacji konsolowej za pomocą "krzyżyka" na pasku zadań, zamknąć poprawnie aplikację i otrzymać np. komunikat "Bye, Bye". Innymi słowy jak obsłużyć to zdarzenie, czy konsolę należy potraktować jak okno WinApi i zastosować funkcję "LRESULT CALLBACK WindowProcedure"? |
|
DejaVu |
» 2011-04-19 13:36:18 Musisz zmodyfikować procedurę obsługi okna konsoli. Chyba w rozdziale o subclassingu jest opisane jak to można zrobić (choć to może być strzał jak kulą w płot). Mowa o: Subclassing i superclassing |
|
Elaine |
» 2011-04-19 13:42:42 |
|
czarek1959 Temat założony przez niniejszego użytkownika |
» 2011-04-19 14:31:20 Wielkie dzięki Iname !!!. SetConsoleCtrlHandler działa. Zastanawiam się tylko, dlaczego po zakończeniu wykonania procedury obsługi zamknięcia konsoli z paska, która kończy się "return 0;" otrzymuję zakończenie aplikacji zawsze z jakimś błędem systemowym. Poza tym wszystko działa, wyświetla mi się komunikat pożegnalny i aplikacja zamyka się. |
|
szyx_yankez |
» 2011-04-19 17:18:45 Błąd otrzymujesz po tym jak dodałeś do programu ' SetConsoleCtrlHandler' czy wcześniej też go miałeś? |
|
czarek1959 Temat założony przez niniejszego użytkownika |
» 2011-04-19 17:49:58 Wcześniej ten błąd też był - spowodowany wymuszeniem niekontrolowanego zamknięcia konsoli, a sądziłem, że korzystając z handlera aplikacja/konsola zamknie się bez błędu, bo jest prawidłowo "obsłużona". |
|
szyx_yankez |
» 2011-04-19 17:59:50 Pokaż kod prezentujący w jaki sposób użyłeś funkcję 'SetConsoleCtrlHandler'. |
|
czarek1959 Temat założony przez niniejszego użytkownika |
» 2011-04-19 18:44:29 Oto fragment kodu:
BOOL WINAPI ConsoleHandler( DWORD CEvent ) { switch( CEvent ) { case CTRL_C_EVENT: MessageBox( NULL, "CTRL+C!", "CEvent", MB_OK ); break; case CTRL_BREAK_EVENT: MessageBox( NULL, "CTRL+BREAK!", "CEvent", MB_OK ); break; case CTRL_CLOSE_EVENT: MessageBox( NULL, "Zamykanie", "CEvent", MB_OK ); break; case CTRL_LOGOFF_EVENT: MessageBox( NULL, "Wylogowanie", "CEvent", MB_OK ); break; case CTRL_SHUTDOWN_EVENT: MessageBox( NULL, "System Shutdown", "CEvent", MB_OK ); break; } return 0; }
int main() { SetConsoleCtrlHandler( ConsoleHandler, true ); return 0; } |
|
« 1 » |