הודעות בתור

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

המערכת שומרת תור הודעות מערכת אחת ומספר כלשהו של תורי הודעות של הליך משנה, אחד עבור כל הליכי המשנה של GUI. כדי למנוע את התקורה של יצירת תור הודעות עבור הליכי משנה-GUI, כל הליכי המשנה נוצרים בתחילה ללא תור הודעות. המערכת יוצרת תור הודעות של הליך משנה רק כאשר הליך המשנה הופך את הקריאה הראשונה לאחד הפונקציות Win32 משתמש או GDI.

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

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

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

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

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

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

ניתן לבצע קריאה לפונקציה SetMessageExtraInfo כדי לשייך ערך של 32 סיביות תור הודעות של הליך המשנה הנוכחי. לפונקציה GetMessageExtraInfo כדי לקבל את הערך המקושר להודעה האחרון שאוחזר על-ידי הפונקציה GetMessage או PeekMessage.

Index