Modale dialoogvensters

Een modaal dialoogvenster moet een pop-up venster met een systeemmenu, een titelbalk en een dikke rand; dat is, moet het dialoogvenster vak sjabloon de WS_POPUP, DS_MODALFRAME, WS_CAPTION en WS_SYSMENU stijlen opgeven. Hoewel een toepassing de WS_VISIBLE stijl aanwijzen kunt, geeft het systeem altijd een modaal dialoogvenster ongeacht of het dialoogvenster vak sjabloon de WS_VISIBLE stijl geeft weer. Een toepassing moet niet een modaal dialoogvenster hebben de WS_CHILD stijl maken. Een modaal dialoogvenster met deze stijl schakelt zelf, voorkomen van enige latere input van het bereiken van de toepassing.

Een modaal dialoogvenster maakt een toepassing met behulp van de dialoogbox of de DialogBoxIndirect functie. DialogBox vereist de naam of het id van een resource met een dialoogvenster vak sjabloon; DialogBoxIndirect vereist het handvat van een geheugen-object met een dialoogvenster vak sjabloon. De functies DialogBoxParam en DialogBoxIndirectParam maken ook modale dialoogvensters; ze zijn identiek aan de eerder genoemde functies, maar een opgegeven parameter doorgeven aan het dialoogvenster vak procedure wanneer het dialoogvenster is gemaakt.

Bij het maken van het modale dialoogvenster, maakt het systeem het het actieve venster. Het dialoogvenster blijft actief totdat het dialoogvenster vak procedure de functie EndDialog roept of het systeem een venster in een andere toepassing activeert. De gebruiker noch de toepassing kan de eigenaar venster maken actief totdat het modale dialoogvenster wordt vernietigd.

Wanneer de eigenaar venster niet reeds is uitgeschakeld, schakelt het systeem automatisch het venster en eventuele onderliggende vensters die behoren tot het wanneer het modale dialoogvenster wordt gemaakt. Het venster eigenaar blijft uitgeschakeld totdat het dialoogvenster wordt vernietigd. Hoewel een dialoogvenster vak procedure potentieel de eigenaar venster op elk gewenst moment kunnen zou, waardoor de eigenaar nederlagen het doel van het modale dialoogvenster en niet wordt aanbevolen. Wanneer het dialoogvenster vak procedure is vernietigd, maakt het systeem de eigenaar venster weer, maar alleen als het modale dialoogvenster veroorzaakt de eigenaar worden uitgeschakeld.

Als het systeem wordt het modale dialoogvenster gemaakt, verzendt het bericht WM_CANCELMODE naar de venster (indien aanwezig) momenteel Muisinvoer vastleggen. Een toepassing die krijgt het volgende bericht moet de muis vangst vrijgeven, zodat de gebruiker de muis in het modale dialoogvenster bewegen kan. Omdat het systeem wordt uitgeschakeld het venster eigenaar, alle muis input is verloren als de eigenaar laat u de muisknop los nadat dit bericht is ontvangen.

Voor het verwerken van berichten voor het modale dialoogvenster, begint het systeem eigen bericht lus, nemen van tijdelijke controle van de berichtenwachtrij voor de gehele toepassing. Wanneer het systeem een bericht dat niet expliciet voor het dialoogvenster opgehaald, verzendt het bericht naar het juiste venster. Als het haalt dit bericht op een WM_QUIT , posten het van het bericht terug naar de berichtenwachtrij van de toepassing zodat de hoofdberichtlus van de toepassing kan uiteindelijk het bericht ophalen.

Het systeem stuurt het bericht WM_ENTERIDLE naar de eigenaar venster wanneer de toepassing berichtenwachtrij leeg is. De toepassing kan dit bericht uit te voeren een achtergrondtaak terwijl het dialoogvenster op het scherm blijft. Wanneer een toepassing gebruikt het bericht op deze manier, de toepassing moet vaak opbrengst controleren (bijvoorbeeld met behulp van de functie PeekMessage ) zo dat kunt het modale dialoogvenster ontvangen alle invoer van de gebruiker. Om te verhinderen dat het modale dialoogvenster in de WM_ENTERIDLE-berichten versturen, kunt de toepassing de DS_NOIDLEMSG stijl opgeven bij het maken van het dialoogvenster.

Een toepassing vernietigt een modaal dialoogvenster met behulp van de functie EndDialog . In de meeste gevallen roept het dialoogvenster vak procedure EndDialog wanneer de gebruiker de opdracht sluiten uit het systeemmenu van het dialoogvenster kiest of de knop OK of annuleren in het dialoogvenster kiest. Het dialoogvenster kan een retourwaarde via de functie DialogBox (of andere functies creatie) door een waarde op te geven bij het aanroepen van de functie EndDialog . Het systeem retourneert deze waarde na het vernietigen van het dialoogvenster. De meeste toepassingen gebruiken deze waarde om te bepalen of het dialoogvenster haar taak is voltooid of is geannuleerd door de gebruiker. Het systeem geeft geen besturingselement als resultaat van de functie waarmee het dialoogvenster totdat het dialoogvenster vak procedure heeft de functie EndDialog aangeroepen.

Index