שליחת הודעה

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

ניתן לשלוח הודעה בכל חלון במערכת; כל שנדרש הוא מטפל בחלון. המערכת משתמשת את נקודת האחיזה כדי לקבוע אילו הליך החלון אמור לקבל את ההודעה.

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

מקרה WM_USER + 5: אם (InSendMessage()) ReplyMessage(TRUE); 
 
    DialogBox (hInst, "MyDialogBox", hwndMain, MyDlgProc (DLGPROC)); 
    מעבר 

 

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

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

HWND hwndCombo; 
int cTxtLen; 
PSTR pszMem; 
 
מתג (uMsg) {מקרה WM_COMMAND: מעבר (LOWORD(wParam)) {מקרה IDD_ADDCBITEM: / / לקבל את נקודת האחיזה של התיבה המשולבת ו / / לשלוט אורך המחרוזת בתיבה ערוך / / של התיבה המשולבת. 
 
                hwndCombo = GetDlgItem (hwndDlg, IDD_COMBO); 
                cTxtLen = GetWindowTextLength(hwndCombo); 
 
                / / להקצות זיכרון עבור מחרוזת ולהעתיק / / המחרוזת לתוך הזיכרון. 
 
                pszMem = (PSTR) VirtualAlloc((LPVOID) NULL, (DWORD) (cTxtLen + 1), MEM_COMMIT, PAGE_READWRITE); 
                GetWindowText (hwndCombo, pszMem, cTxtLen + 1); 
 
                / / להוסיף את המחרוזת בתיבת הרשימה של / / משולבת תיבת ולהסיר את המחרוזת מ / / עריכה של פקד של התיבה המשולבת. 
 
                אם (* pszMem! = NULL) {SendDlgItemMessage (hwndDlg, IDD_COMBO, CB_ADDSTRING, 0, (DWORD) (pszMem (כלי שירות))); 
                    SetWindowText (hwndCombo, NULL (כלי שירות)); 
                } / / לפנות את הזיכרון ולחזור. 
 
                VirtualFree (pszMem / 0, MEM_RELEASE); 
                החזרת TRUE; 
            / / / / לעבד פקודות אחרות של תיבת הדו-שיח. 
            / /} / / / / לעבד הודעות אחרות של תיבת הדו-שיח. 
    // 
 
} 

 

Index