zamykanie okna? to nie jest takie latwe ;/

0

Czesc, mam pytanie jak zamknac okno jeszcze w funkcji OnInitDialog.
Oczywiscie tak: CDialog::OnClose() a potem return 1;
Tak ale jesli ja nie moge dac tego return 1; w OnInit Dialog??

Mam sobie kilkanascie funkcji wywolywanych w OnInitDialog i kazda z nich spelnia pewien warunek. Jesli nie jest spelniony to powinna zamknac program, ale BEZ DALSZEGO WCHODZENIA DO OnInitDialog()!!
I jesli ten warunek sie spelni to wywoluje CDialog::OnClose, nawet CDialog::DestroyWindow(), kazda z tych funkcji zamknie mi program ale po dojsci do konca OnInitDialog ;(
A ja nie chce juz sprawdzac kolejnych warunkow bo jesli jeden nie spelnia to dalsze sprawdzanie sie sypie, powiedzmy.
Oczywiscie moge kazda z tych funkcji zwracac wartosc powiedzmy
NULL jesli warunek niespelniony. I potem w OnInitDialog sprawdzac, ze jesli NULL to CDialog::OnClose() oraz OnInitDialog ::return 1; i wetedy by mi zamknelo.
No ale lenistwo, ni chec mi sie przerabiac tych kilkunastu funkcji.
Tak jak przegladalem msdn na plycie (niestety do netu nie mam dostepu jako tako) to cos mi sie wydaje ze ten OnInitDialog musi sie wykonac do konca (czyt. do pierwszego returna).
Wiec
Jak zamknac program w OnInitDialog() nie dochodzac do lini return w OnInitDialog??

//mam nadzieje ze nie zamotalem

0
markoot napisał(a)

Jak zamknac program w OnInitDialog() nie dochodzac do lini return w OnInitDialog??

jeśli chcesz go kompletnie zabić, spróbuj "PostQuitMessage(0);" , żeby poinformować system, że może zamknąć wątek - jednak sterowanie wróci do aplikacji. Poczekanie na reakcje systemu można osiągnąć przez np. "for( ; ; ) ;" :)

Nie sprawdzałem, ale powinno zadziałać ;)

0

Oczywiscie moge kazda z tych funkcji zwracac wartosc powiedzmy
NULL jesli warunek niespelniony. I potem w OnInitDialog sprawdzac, ze jesli NULL to CDialog::OnClose() oraz OnInitDialog ::return 1; i wetedy by mi zamknelo.
No ale lenistwo, ni chec mi sie przerabiac tych kilkunastu funkcji.

O takich rzeczach trzeba było pamiętać wcześniej ;). Możesz spróbować coś zrobić z

try

, catch

 i <code class="cpp">throw

.

revo napisał(a)

jeśli chcesz go kompletnie zabić, spróbuj "PostQuitMessage(0);" , żeby poinformować system, że może zamknąć wątek - jednak sterowanie wróci do aplikacji. Poczekanie na reakcje systemu można osiągnąć przez np. "for( ; ; ) ;"

To nie przejdzie - żeby WM_QUIT było obsłużone proces musi zakończyć obsługę komunikatu WM_INITDIALOG. No ale zawsze zostaje hardcore'owe rozwiązanie - ExitProcess(0):D

1 użytkowników online, w tym zalogowanych: 0, gości: 1