Skocz do zawartości

Recommended Posts

Napisano

WM_CLOSE wysyla WM_DESTROY
jesli masz w WM_DESTROY wpisane PostQuitMessage (0) ; to nic dziwnego ze zamyka caly program
trzeba sprawdzic od ktorego okna ten WM_DESTROY i jesli od glownego to wyslac PostQuitMessage (0) jesli nie to nie wysylac

Napisano

Trudno się dziwić, ze funkcje ShowWindow(hWindow,SW_HIDE); i SendMessage(hWindow,WM_CLOSE,0,0); ukrywają lub zamykają Ci okno aplikacji bo... właśnie do niego wysyłasz te komunikaty. Podajesz do nich, jako pierwszy parametr, uchwyt do głównego okna aplikacji, a musisz tam zamiast tego podać uchwyt do swojego edita lub buttona.
Zeby uzyskac ten uchwytm masz 2 sposoby:
1. Jezeli tworzyles button lub edit funkcją CreateWindow(); lub CreateWindowEx(); to zwracaja one uchwyty do okna, które stworzą, więc możesz sobie zrobić globalną zmienną typu HWND i w niej przechowywac uchwyt.
2. Jezeli tworzyles DialogBox korzystając z szablonu w pliku zasobów (.rc), a takze w każdym przypadku kiedy znasz identyfikator kontrolki którą chcesz usunąć, możesz posłużyć się funkcją GetDlgItem();, która również zwraca uchwyt do okna kontrolki. Jako pierwszy parametr podajesz jej uchwyt do rodzica kontrolki, a jako drugi jej identyfikator.

Napisano

Ad 2. Zarówno hKontrolki, jak i hRodzica muszą być typu HWND. Właśnie to hKontrolki wstawiasz jako pierwszy parametr do funkcji ShowWindow(); i SendMessage();.
Ad 1. Chodziło mi o to, że te dwie funkcje również zwracają "hKontrolki" (czyli uchwyt do jej okna).( :-) Pewnie Ci za wiele nie wyjaśniłem, ale jakoś jaśniej nie potrafię - za bardzo jestrem niewyspany.)

Napisano

nie wiem co ty kobinujesz czlowieku ale ja wyslalem do Buttona komunikat WM_CLOSE i bez problemu go zamknol.

Aha. Napisz czy chchesz zamknac tego edita w okienku dialogowym czy nie ( w sumie chyba nie gra roznicy :? )

Napisano

Ja sam nie próbowałem (lenistwo ;)) ale to co mówi Piasiu ma sens. Windows sam odpowiednio obsługuje komunikaty wysyłane do kontrolek i WM_CLOSE wysłany do kontrolki powinien działać. Ewentualnie spróbuj subclassingu kontrolki (tutorial na stronce), przechwyć komunikat WM_DESTROY i sam wyślij jej PostQuitMessage(0). Spróbuj tak, a jak nie podziała, to mnie się kończą pomysły.
Powodzenia :)

Napisano

Ja tez sprawdzalem i na 100% dziala ! Zarowno WM_CLOSE, jak i DestroyWindow. Mysle, ze nie nalezy tego dodatkowo komplikowac subclassingiem, bo te metody na pewno sa dobrze. Problem musi lezec w innym miejscu. Wklej odrobine swojego kodu to zobaczymy na czym polega błąd.

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