הצבת ושליחה של הודעות

כל יישום יכולים לכתוב ולשלוח הודעות. כמו במערכת, יישום הצבות הודעה על-ידי העתקתה לתור ההודעה ושולח הודעה על-ידי העברת נתוני ההודעה בתור ארגומנטים להליך חלון. כדי להציב הודעות, יישום משתמש בפונקציה PostMessage . יישום לשלוח הודעה על-ידי קריאה SendMessage, BroadcastSystemMessage, SendMessageCallback, SendMessageTimeout, SendNotifyMessageאו פונקציה SendDlgItemMessage.

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

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

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

לעתים, ייתכן שתרצה לשלוח או לפרסם הודעה בכל חלונות ברמה העליונה במערכת. לדוגמה, אם היישום משנה את שעת המערכת, עליך היא להודיע כל חלונות ברמה אודות השינוי על-ידי שליחת WM_TIMECHANGE ההודעה. יישום לשלוח או לפרסם הודעה על כל חלונות ברמה על-ידי קריאה לפונקציה SendMessage או PostMessage וציון HWND_TOPMOST בפרמטר hwnd . באפשרותך גם לשדר הודעה על כל היישומים על-ידי קריאה לפונקציה BroadcastSystemMessage וציון BSM_APPLICATIONS בפרמטר lpdwRecipients.

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

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

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

Index