Skocz do zawartości

Były sobie dwa komunikaty jeden duzy drugi mały


Gering

Recommended Posts

Cze!
WM_DESTROY oznacza, ze win niszczy okno na polecenie uzytkownika, komunikat ten jest wynikiem klikniecia przez uzytkownika przycisku zamknij albo zamknij z menu systemowego programu, [za Petzoldem, Programowanie Windows s. 62, 2 polska edycja ]
mozesz go przechwycic, a nastepnie

case WM_DESTROY:
return 0;

//edit

A teraz o WM_CLOSE

Gdy uzytkownik wybierze zamknij z menu systemowego jest generowany komunikat WM_SYSCOMMAND z w wParam rownym SC_CLOSE, procedura okna przekazuje go do DefWindowProc, a on wysyła komunikat do funkcji okna WM_CLOSE, Mozna WM_CLOSE przechwycic, i np. zapytac uzytkownika o potwierdzenie zamkniecia, aby nic on nie robił

case WM_CLOSE:
return 0;

Jeśli się mylę to prosze o poprawienie mnie :$ .

Link do komentarza
Udostępnij na innych stronach

I jescze jedno, jeśli nie chcesz, aby ci się programik zamknął to

case CLOSE:
case DESTROY:
return 0;

wtedy bydlaka nie zamkniesz :D , chyba są też inne sposoby na niepozwolenie uzytkownikowi zamkniecie progaramu, ale ja jestem n00bem jesli chodzi o winapi 9_9 ;)

p.s. aby zamknac ten programik, alt + ctrl + del, pare razy zakonczyc zadanie, prog sie zwiesi i mozna go bedzie zamknac tj, to zrobi win :S

Link do komentarza
Udostępnij na innych stronach

Dzięki , ja sonie poradziłęm w ten sposób :

case WM_SYSCOMMAND:
                                if(wParam == SC_CLOSE)
                                {
                                        int Pytanie = MessageBox(NULL,"Czy chesz zakończyc ?","",MB_YESNO);
                                        
                                        if(Pytanie == IDNO)
                                        {
                                                return DefWindowProc(Okno,NULL,0,0);
                                        }

                                }

                        break;

Jak by ktos nie wiedział :) 

Link do komentarza
Udostępnij na innych stronach

Mozna zrobic to tak:

     int fEndp;
     switch (message)
     {
     case WM_CLOSE:
         fEndp = MessageBox(NULL,"Czy chesz zakończyc ?","",MB_YESNO);

          if(fEndp == IDNO)
          {
                 return DefWindowProc(hWnd,NULL,0,0);
          }
         
     case WM_DESTROY:
          PostQuitMessage (0) ;
          break ;
     default:
                return DefWindowProc (hWnd, message, wParam, lParam) ;
     }

WM_DESTROY musi znalezdz sie bezposrednio pod WM_CLOSE. :)

Mam nadzieje ze nie popelnilem bledów

Link do komentarza
Udostępnij na innych stronach

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