Casetele de Dialog modale

O casetă de dialog modale ar trebui să fie o fereastră pop-up cu un sistem de meniu, o bară de titlu, un chenar gros; care este, șablonul de caseta de dialog ar trebui să specificați stilurile WS_POPUP WS_SYSMENU, WS_CAPTION ?i DS_MODALFRAME. Deși cererea poate desemna stilul WS_VISIBLE, sistemul afișează întotdeauna o casetă de dialog modale indiferent de dacă șablonul de caseta de dialog specifică stilul WS_VISIBLE. Cererea nu trebuie să creeze o casetă de dialog modale având stilul WS_CHILD. O casetă de modal dialog cu acest stil dezactivează sine, prevenirea orice intrare ulterioare la a ajunge aplicarea.

O cerere creează o casetă de dialog modale utilizând funcția fie DialogBox sau DialogBoxIndirect . DialogBox necesită numele sau identificatorul de o resursă care con?in un șablon de caseta de dialog; DialogBoxIndirect necesită ghidajul de un obiect de memorie care con?in un șablon de caseta de dialog. Funcții DialogBoxParam și DialogBoxIndirectParam , de asemenea, crea casete de dialog modale; ele sunt identice cu funcțiile menționate anterior, dar trece un parametru specificate la procedura de caseta de dialog atunci când se creează caseta de dialog.

Când se creează caseta de dialog modale, sistemul permite fereastra activă. Caseta de dialog rămâne activă până când caseta de dialog procedura apelează funcția EndDialog sau sistem activează o fereastră din altă aplicație. Utilizatorul nici aplicarea face fereastra proprietarul activă până când este distrusă din caseta de dialog modale.

Când fereastra proprietarul nu este deja dezactivată, sistemul dezactivează automat fereastra și orice copil windows apar?inând când creează caseta de modal dialog. Fereastra proprietarul rămâne cu handicap, până când este distrusă din caseta de dialog. Deși o procedură de caseta de dialog ar putea potențial permite fereastra proprietar în orice moment, care să permită înfrângeri proprietarul scopul caseta de modal dialog și nu este recomandată. Atunci când procedura de caseta de dialog este distrus, sistemul permite fereastra proprietarul din nou, dar numai dacă caseta de dialog modale cauzate proprietarului să fi dezactivat.

Ca sistemul creează caseta de dialog modale, trimite mesajul WM_CANCELMODE fereastra (dacă există) în prezent capturarea intrare mouse-ul. O aplicație care prime?te acest mesaj ar trebui să elibereze capturarea mouse-ul astfel încât utilizatorul poate muta mouse-ul în caseta de dialog modale. Deoarece sistemul dezactivează fereastra proprietar, toate mouse-ul de intrare este pierdut în cazul în care proprietarul nu reușește să eliberați mausul la primirea acest mesaj.

Pentru a procesa mesaje pentru caseta de dialog modale, sistemul începe propria bucla de mesaj, luând control temporar din coada de mesaje pentru întreaga aplicație. Atunci când sistemul preia un mesaj care nu este în mod explicit pentru caseta de dialog, acesta ac?ionează mesajul în fereastra corespunzătoare. Dacă se regăsește un mesaj WM_QUIT , posturi mesaj înapoi la coada mesaj cerere astfel încât aplicației mesajul principal buclă în cele din urmă poate prelua mesajul.

Sistemul trimite mesajul WM_ENTERIDLE la fereastra de proprietar, ori de câte ori aplicarea mesaj coada este gol. Cererea poate utiliza acest mesaj pentru a exercita o activitate de fundal în timp ce caseta de dialog rămâne pe ecran. Atunci când o cerere utilizări mesaj în acest fel, aplicarea frecvent trebuie să realizeze controlează (de exemplu, utilizând funcția PeekMessage ) atât care caseta de dialog modale pot primi orice intrare de la utilizator. Pentru a împiedica trimiterea de mesaje WM_ENTERIDLE caseta de dialog modale, aplicarea specificați stilul de DS_NOIDLEMSG când se creează caseta de dialog.

O cerere de a distruge o casetă de dialog modale utilizând funcția EndDialog . În majoritatea cazurilor, procedura de caseta de dialog solicită EndDialog atunci când utilizatorul alege comanda Închidere din caseta de dialog sistem meniul sau alege butonul OK sau pe Revocare în caseta de dialog. Caseta de dialog poate returna o valoare prin funcția DialogBox (sau alte funcții crearea) specificând o valoare atunci când funcția EndDialog de asteptare. Sistemul întoarce această valoare după distrugerea din caseta de dialog. Cele mai multe aplicații utilizează această valoare pentru a stabili dacă caseta de dialog sarcina a terminat cu succes sau a fost revocată de utilizator. Sistemul nu se întoarce controlul la funcția care creează caseta de dialog până când procedura caseta de dialog a numit funcția EndDialog.

Index