Modalnych okien dialogowych

Modalne okno dialogowe powinno być okno wyskakujące menu systemowe, pasek tytułu i gruba krawędź; oznacza to, że szablon pole dialogowe należy określić style WS_POPUP, WS_SYSMENU, WS_CAPTION i DS_MODALFRAME. Chociaż aplikacji można określić styl WS_VISIBLE, system zawsze wyświetla pole modalnym niezależnie od tego, czy szablon pole dialogowe określa styl WS_VISIBLE. Aplikacja nie musi tworzyć modalnego okna dialogowego o stylu WS_CHILD. Modalne okno dialogowe z tego stylu wyłącza się, zapobieganie wszelkich kolejnych danych wejściowych od osiągnięcia wniosku.

Aplikacja tworzy modalnego okna dialogowego za pomocą funkcji DialogBox lub DialogBoxIndirect . DialogBox wymaga nazwa lub identyfikator zasobu zawierającego szablon pole dialogowe; DialogBoxIndirect wymaga uchwyt obiektu pamięci zawierającego szablon pole dialogowe. Funkcje DialogBoxParam i DialogBoxIndirectParam również utworzyć modalnych okien dialogowych; są one identyczne z wcześniej wymienionych funkcji, ale przekazać określony parametr do procedury pole dialogowe, gdy tworzone jest okno dialogowe.

Podczas tworzenia modalnego okna dialogowego, system pozwala aktywnego okna. Okno dialogowe pozostaje aktywna, dopóki procedura pole dialogowe wywołuje funkcję EndDialog lub systemu uaktywnia okno w innej aplikacji. Użytkownika ani aplikacji można uaktywnić okno właściciela do momentu zniszczenia modalnego okna dialogowego.

Po oknie właściciel nie jest już wyłączony, system automatycznie wyłącza okna i wszelkie okien podrzędnych należące do niego po utworzeniu modalnego okna dialogowego. Okno właściciel pozostaje wyłączona, dopóki okno dialogowe jest niszczony. Chociaż procedurę pole dialogowe potencjalnie umożliwiłyby okna właściciela w dowolnym czasie, umożliwiając pokonań właściciela celem modalnego okna dialogowego i nie jest zalecane. Podczas procedury pole dialogowe jest niszczony, system umożliwia okno właściciela ponownie, ale tylko jeśli modalnego okna dialogowego spowodowane właścicielowi wyłączony.

Jak system tworzy modalnego okna dialogowego, wysyła komunikat WM_CANCELMODE do okna (jeśli występują) obecnie przechwytywanie sygnału wejściowego myszy. Aplikację, która odbiera komunikat ten należy zwolnić przechwytywania myszy, tak, aby użytkownik może przechodzić myszy w oknie modalnym. Ponieważ system wyłącza okno właściciela, myszy wszystkie dane wejściowe są tracone, jeśli właściciel nie zdoła zwolnij przycisk myszy po otrzymaniu tej wiadomości.

Do przetwarzania komunikatów modalnego okna dialogowego, system uruchamia własnej pętli komunikatów, biorąc kontroli tymczasowej kolejki wiadomości dla całej aplikacji. Gdy system pobiera wiadomość, która nie jest wyraźnie okno dialogowe, wysyła wiadomości do odpowiedniego okna. Jeśli pobiera komunikat WM_QUIT , księguje wiadomości do kolejki wiadomości aplikacji, tak aby pętla wiadomości głównego aplikacji ostatecznie można pobrać wiadomości.

System wysyła komunikat WM_ENTERIDLE aby oknie właściciela, gdy kolejka komunikatów aplikacji jest pusta. Aplikację można użyć tej wiadomości do wykonywania zadania w tle, podczas gdy okno dialogowe pozostaje na ekranie. Kiedy używa aplikacji, które wiadomości w ten sposób stosowania muszą często dają sterowania (na przykład za pomocą funkcji PeekMessage ) tak, modalnego okna dialogowego można otrzymywać wszelkie dane wejściowe użytkownika. Aby uniemożliwić wysyłanie wiadomości WM_ENTERIDLE modalnego okna dialogowego, stosowania można określić styl DS_NOIDLEMSG, tworząc okno dialogowe.

Aplikacja niszczy modalnego okna dialogowego za pomocą funkcji EndDialog . W większości przypadków EndDialog wywołań procedur pole dialogowe, gdy użytkownik wybierze polecenie Zamknij okno dialogowe systemu menu lub wybiera przycisk OK albo przycisk Anuluj w oknie dialogowym. Okno dialogowe może zwracać wartości za pomocą funkcji DialogBox (lub inne funkcje tworzenia) określając wartość podczas wywoływania funkcji EndDialog . System zwraca wartość ta po niszczenia okna dialogowego. Większość aplikacji używa tej wartości zwracanej, aby ustalić, czy okno dialogowe pomyślnie wykonało swoje zadanie zostało anulowane przez użytkownika. System nie zwraca sterowania z funkcji, która tworzy okno dialogowe, dopóki procedura pole dialogowe wywołał funkcję EndDialog.

Index