Sperrende dialogbokser

En sperrende dialogboks bør være et popup-vindu å ha en systemmeny, en tittellinje og en tykk kantlinje; det vil si bør malen i boksen i dialogboksen Angi stilene WS_POPUP, WS_SYSMENU, WS_CAPTION og DS_MODALFRAME. Selv om et program kan angi stilen WS_VISIBLE, viser systemet alltid en sperrende dialogboks uavhengig av om malen i boksen i dialogboksen angir WS_VISIBLE-stilen. Et program må ikke opprette en modal dialogboks som har stilen WS_CHILD. En sperrende dialogboks med denne stilen deaktiverer selv, å hindre noen påfølgende inndata fra å nå programmet.

Et program oppretter en sperrende dialogboks ved hjelp av DialogBox - eller DialogBoxIndirect -funksjonen. DialogBox krever navnet eller identifikator for en ressurs som inneholder en dialog boks mal; DialogBoxIndirect krever håndtaket av en minne-objekt som inneholder en mal for dialogboksen-boksen. Funksjonene DialogBoxParam og DialogBoxIndirectParam også opprette sperrende dialogbokser; de er identiske med de tidligere nevnte funksjonene, men sender en angitt parameter i dialogboksen boksen prosedyren når dialogboksen er opprettet.

Når du oppretter den modale dialogboksen, gjør systemet det aktive vinduet. Dialogboksen forblir aktive til dialogboksen boksen prosedyre kaller funksjonen EndDialog eller systemet aktiverer et vindu i et annet program. Verken brukeren eller programmet kan gjøre eiervinduet aktiv før den modale dialogboksen er ødelagt.

Når eiervinduet ikke allerede er deaktivert, deaktiveres systemet automatisk vinduet og eventuelle underordnede vinduer som hører til det når det oppretter den modale dialogboksen. Eiervinduet som forblir deaktivert til dialogboksen er ødelagt. Selv om en dialog boks prosedyre kan gjøre det mulig eiervinduet når som helst, slik at de eier nederlagene formålet med den modale dialogboksen og er ikke anbefalt. Når dialogboksen boksen prosedyren er ødelagt, muliggjør systemet eiervinduet igjen, men bare hvis den modale dialogboksen forårsaket eieren skal deaktiveres.

Som programmet oppretter den modale dialogboksen, WM_CANCELMODE meldingen sendes til vinduet (Hvis noen) for øyeblikket registrerer mus input. Et program som mottar denne meldingen bør slipper musen fangst, slik at brukeren kan flytte musen i den modale dialogboksen. Fordi systemet deaktiverer eiervinduet, alle mus input går tapt hvis eieren ikke slipp museknappen ved mottak av denne meldingen.

Behandle meldinger for den modale dialogboksen, starter systemet sin egen meldingsløkke, å ta midlertidig kontroll over meldingskøen for hele programmet. Når en melding som ikke er eksplisitt for dialogboksen henter systemet, sender ut meldingen til vinduet riktig. Hvis den henter en melding med WM_QUIT , bokfører det meldingen tilbake til meldingskøen programmet slik at programmets hovedmeldingsløkke kan til slutt hente meldingen.

Systemet sender meldingen WM_ENTERIDLE til eiervinduet når programmet meldingskøen er tom. Programmet kan bruke denne meldingen til å utføre en bakgrunnsoppgave mens dialogboksen forblir på skjermen. Når et program bruker meldingen på denne måten programmet må ofte gi kontroll (for eksempel ved hjelp av funksjonen PeekMessage ) så som kan den modale dialogboksen motta eventuelle brukerinndata. Du hindrer at den modale dialogboksen sender WM_ENTERIDLE-meldinger, kan programmet angi DS_NOIDLEMSG stilen når du oppretter dialogboksen.

Et program ødelegger en sperrende dialogboks ved hjelp av funksjonen EndDialog . I de fleste tilfeller kaller dialogboksen boksen prosedyre EndDialog når brukeren velger kommandoen Lukk i dialogboksen System-menyen eller velger OK- eller Avbryt-knappen i dialogboksen. Dialogboksen kan returnere en verdi gjennom funksjonen DialogBox (eller andre funksjoner for oppretting) ved å angi en verdi når du kaller opp funksjonen EndDialog . Systemet returnerer denne verdien etter å ha ødelagt i dialogboksen. De fleste programmer har denne returverdien for å avgjøre om dialogboksen fullført sin oppgave eller ble avbrutt av brukeren. Systemet returnerer ikke kontrollen fra funksjonen som skaper dialogboksen før dialogboksen boksen prosedyren har kalt EndDialog -funksjonen.

Index