תיבות דו-שיח מודאליות

תיבת דו-שיח מודאלית צריך להיות חלון מוקפץ עם תפריט מערכת פס כותרת, גבול עבה יותר; כלומר, התבנית בתיבת הדו-שיח, עליך לציין את הסגנונות WS_POPUP, WS_SYSMENU, WS_CAPTION, DS_MODALFRAME. למרות יישום לייעד את סגנון WS_VISIBLE, המערכת מציגה תמיד תיבת דו-שיח מודאלית להתחשב אם התבנית בתיבת הדו-שיח מציין את סגנון WS_VISIBLE. יישום לא חייב ליצור תיבת דו-שיח מודאלית נתקל את סגנון WS_CHILD. תיבת דו-שיח מודאלית בסגנון זה מבטל עצמו, מניעת כל קלט עוקבות מלהגיע היישום.

יישום יוצר תיבת דו-שיח מודאלית על-ידי שימוש בפונקציה ' DialogBox ' או ' DialogBoxIndirect . DialogBox דורש את השם או את מזהה המשאב המכיל תבנית בתיבת הדו-שיח; DialogBoxIndirect מחייב את נקודת האחיזה האובייקט זיכרון המכיל תבנית בתיבת הדו-שיח. הפונקציות DialogBoxParam ו- DialogBoxIndirectParam גם ליצור תיבות דו-שיח מודאליות; הן זהות לפונקציות שהוזכרו לעיל, אלא עוברות הפרמטר שצוין להליך תיבת דו-שיח בעת יצירת תיבת הדו-שיח.

בעת יצירת תיבת דו-שיח מודאלית, המערכת הופכת את החלון הפעיל. תיבת הדו-שיח תישאר פעילה עד הפרוצדורה תיבת הדו-שיח קוראת לפונקציה EndDialog או לחלון ביישום אחר מפעיל המערכת. לא המשתמש ולא היישום להפוך חלון בעלים פעיל עד תיבת דו-שיח מודאלית מושמד.

כאשר חלון הבעלים אינו זמין כבר, המערכת מבטלת באופן אוטומטי את החלון כל החלונות הצאצא השייכות אליו כאשר הוא יוצר תיבת דו-שיח מודאלית. חלון בעלים נשאר לא זמין עד הרסו את תיבת הדו-שיח. למרות שגרה תיבת הדו-שיח עלולה לאפשר את חלון הבעלים בכל עת, הפעלת הפסדי הבעלים מטרתה של תיבת דו-שיח מודאלית ואינה מומלצת. כאשר הפרוצדורה תיבת הדו-שיח מושמד, המערכת מאפשרת את חלון הבעלים שוב, אך רק אם תיבת דו-שיח מודאלית נגרמת הבעלים ללא זמינות.

כ המערכת יוצרת תיבת דו-שיח מודאלית, הוא שולח את ההודעה WM_CANCELMODE אל החלון (אם בכלל) כעת לכידת קלט עכבר. יישום שאינו מקבל הודעה זו יש לשחרר את לכידת העכבר כך המשתמש יכול להזיז את העכבר בתיבת דו-שיח מודאלית. מכיוון המערכת מבטלת את חלון הבעלים, כל עכבר קלט יאבד אם הבעלים אינו מצליח שחרר את לחצן העכבר עם קבלת הודעה זו.

כדי לעבד הודעות עבור תיבת דו-שיח מודאלית, המערכת תפעיל לולאת הודעה משלו, ההשתלטות הזמני של תור ההודעות עבור היישום כולו. כאשר המערכת מאחזר הודעה שאינו מפורש עבור תיבת הדו-שיח, ומשגר את ההודעה בחלון המתאים. אם זה מאחזר הודעה WM_QUIT , אותו הצבות ההודעה בחזרה אל התור של היישום כך לולאה המסר העיקרי של היישום בסופו של דבר ניתן לאחזר את ההודעה.

המערכת שולחת את הודעת WM_ENTERIDLE חלון בעלים בכל פעם התור של יישום ריקה. היישום להשתמש הודעה זו לביצוע משימה ברקע תיבת הדו-שיח נשאר על המסך. כאשר משתמש יישום ההודעה בדרך זו, היישום יש לעתים קרובות תשואות לשלוט (לדוגמה, על-ידי שימוש בפונקציה PeekMessage ) אז כי תיבת דו-שיח מודאלית לקבל קלט משתמש כלשהו. כדי למנוע את תיבת דו-שיח מודאלית שליחת הודעות WM_ENTERIDLE, היישום יכול לציין את סגנון DS_NOIDLEMSG בעת יצירת תיבת הדו-שיח.

יישום הורס תיבת דו-שיח מודאלית באמצעות הפונקציה EndDialog . ברוב המקרים, קריאות השגרה בתיבת הדו-שיח EndDialog כאשר המשתמש בוחר בפקודה סגור מתפריט המערכת תיבת הדו-שיח או בוחר בלחצן אישור או על ביטול בתיבת הדו-שיח. תיבת הדו-שיח להחזיר ערך באמצעות הפונקציה DialogBox (או פונקציות אחרות של היצירה) על-ידי ציון ערך בעת קריאה לפונקציה EndDialog . המערכת מחזירה ערך זה לאחר השמדת את תיבת הדו-שיח. רוב היישומים להשתמש ערך החזרה זה כדי לקבוע אם תיבת הדו-שיח הושלמה פעילות שלה בהצלחה או בוטלה על ידי המשתמש. המערכת לא להחזיר את השליטה מהפונקציה היוצרת את תיבת הדו-שיח עד הפרוצדורה תיבת הדו-שיח נקראת הפונקציה EndDialog.

Index