Kiedy (i jak) rozłożyć dzieci okna Win32 w odpowiedzi na zmianę rozmiaru?
System Windows wysyła kilka wiadomości, gdy zmienia się rozmiar okna:
WM_GETMINMAXINFOWM_ENTERSIZEMOVEWM_EXITSIZEMOVEWM_NCCALCSIZEWM_SIZINGWM_SIZEWM_WINDOWPOSCHANGINGWM_WINDOWPOSCHANGEDi prawdopodobnie więcej.
Jeśli chciałbym zmienić położenie dzieci, gdy moje okno zostanie zmienione,gdzie iw jaki sposób powinienem to zrobić?
Szukam „najlepszej” metody - tj. Metody z najmniejszą ilością gotcha inajmniej migotać.
Mójobecny Metoda polega na wykonaniu wszystkich zmian położenia wewnątrzWM_NCCALCSIZE
, za pomocąDeferWindowPos
.
Jednak próbowałem też obsługiwać to w środkuWM_WINDOWPOSCHANGED
... ale bez względu na to, gdzie się tym zajmuję, wygląda na to, że tak jestzawsze przynajmniejjeden „moment”, gdy okno jest pomalowane w stanie pośrednim, w którym zmienił się rozmiar okna, ale jego zawartość nie została jeszcze zmieniona.
Jeszcze jeden efektrównież lubię unikać: przeprowadzania dzieckapo już się przeniósł. Nie chcę, aby użytkownik widział kontrolkę przesuwającą się w dół, a następniez powrotem z powodu mojej zmiany - powinno mieć jak najmniej przejściowych efektów.
Czy robię to poprawnie? Czy jest lepsze miejsce, w którym mogę rozłożyć dzieci okna?