Niestandardowe okna dialogowe

Aplikację można tworzyć niestandardowych okien dialogowych przy użyciu klasy zdefiniowane przez aplikację okna dla okien dialogowych zamiast przy użyciu klasy pole dialogowe wstępnie zdefiniowanych. Aplikacje zwykle Użyj tej metody, jeśli okno dialogowe jest ich główne okno, ale również jest przydatne przy tworzeniu modalnym i niemodalny okien dialogowych dla aplikacji, które mają standardowe nakładających się okien.

Klasy zdefiniowane przez aplikację okno pozwala wniosku w celu określenia procedury okno dialogowe pole i proces wiadomości przed wysłaniem ich do procedury pole dialogowe. Umożliwia również stosowanie zdefiniować ikonę klasy, Pędzel tła klasy i menu klasy okna dialogowego. Aplikacja musi zarejestrować klasy okna przed próbą utworzenia okno dialogowe i musi dostarczyć szablonu pole dialogowe atomu wartości lub nazwy klasy okno.

Wiele aplikacji utwórz nową klasę pole dialogowe pierwszy pobieranie informacji klasy dla klasy pole dialogowe wstępnie zdefiniowanych i przekazaniem go do funkcji GetClassInfo , która wypełnia strukturą WNDCLASS informacje. Stosowanie modyfikuje poszczególnych członków strukturze, takich jak nazwa klasy, Pędzel i ikony, a następnie rejestruje nowe klasy przy użyciu funkcji RegisterClass . Jeżeli aplikacji wypełni strukturę WNDCLASS w jej postaci własnej, musi on ustawiony element cbWndExtra DLGWINDOWEXTRA, który jest liczbą nadmiarowych bajtów, które system wymaga w każdym oknie dialogowym. Jeśli aplikacja używa również dodatkowych bajtów w każdym oknie dialogowym, muszą one poza nadmiarowych bajtów wymaganych przez system.

Procedury okna w niestandardowym oknie dialogowym ma te same parametry i wymagania jak wszelkie inne procedury okna. W przeciwieństwie do innych procedur okna jednak procedury okna tego okna dialogowego powinna wywołać funkcję DefDlgProc zamiast funkcji DefWindowProc dla wiadomości, które nie przetwarzają. DefDlgProc wykonuje tę samą wiadomość domyślną przetwarzanie jako procedury okna w oknie dialogowym predefiniowane, który zawiera wywołanie procedury pole dialogowe.

Aplikację można także utworzyć niestandardowe okna dialogowe instacji procedurę okna, okna dialogowego predefiniowane. Funkcja SetWindowLong umożliwia aplikacji ustawić adres procedury okna dla danego okna. Aplikacja może również próbować podklasy przy użyciu funkcji SetClassLong , ale czyniąc to tak dotyczy wszystkich oknach dialogowych w systemie, nie tylko tych należących do aplikacji.

Aplikacje, które czasami tworzenia niestandardowych okien dialogowych przewidują interfejs alternatywnej klawiatury w oknach dialogowych. Niemodalny okien dialogowych może to oznaczać aplikacji nie wywołuje funkcję IsDialogMessage i zamiast tego przetwarza wszystkie klawiatury w procedurze niestandardowe okna. W takich przypadkach aplikacji można użyć wiadomości WM_NEXTDLGCTL aby zminimalizować kod potrzebne aby przenieść fokus między formantami. Ten komunikat, gdy dane są przekazywane do DefDlgProc, przenosi fokus do formantu określonej i aktualizuje wygląd formantów, takich jak przenoszenie granicy przycisk domyślny lub ustawienie automatycznego przycisków.