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

Aplikacja konsolowa - zamykanie

Ostatnio zmodyfikowano 2011-04-19 18:44
Autor Wiadomość
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"?
P-31205
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: » Kurs WinAPI, C++ » ZaawansowaneSubclassing i superclassing lekcja
P-31209
Elaine
» 2011-04-19 13:42:42
System na to nie pozwoli. Do takich rzeczy służy SetConsoleCtrlHandler.
P-31211
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ę.
P-31214
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ś?
P-31222
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".
P-31229
szyx_yankez
» 2011-04-19 17:59:50
Pokaż kod prezentujący w jaki sposób użyłeś funkcję 'SetConsoleCtrlHandler'.
P-31230
czarek1959
Temat założony przez niniejszego użytkownika
» 2011-04-19 18:44:29
Oto fragment kodu:
C/C++
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;
}
P-31235
« 1 »
  Strona 1 z 1