Розміщення та надсилання повідомлень

Будь-який додаток можна розмістити та надсилати повідомлення. Як система програма посади повідомлення скопіювавши її черга повідомлень і посилає повідомлення, проходячи як аргументи дані повідомлень до вікна процедури. Щоб помістити повідомлення, застосунок функція PostMessage . Заявку можна надсилати повідомлення за номером SendMessage, BroadcastSystemMessage, SendMessageCallback, SendMessageTimeout, SendNotifyMessageабо SendDlgItemMessage функції.

Застосування зазвичай повідомлень повідомлення повідомити конкретного вікна для виконання завдання. PostMessage створює структуру MSG повідомлення та копіювання повідомлення до черги поточного повідомлення. Програми повідомлення циклу в кінцевому підсумку отримує повідомлення і вбиває його у відповідне вікно порядку.

Застосування зазвичай надсилає повідомлення повідомити вікно процедуру, щоб виконати завдання негайно. SendMessage функцію надсилання повідомлення до вікна процедури, що відповідає даного вікна. Функція чекає, поки вікно процедура завершує обробку і потім повертає результат повідомлення. Батько та дитина windows часто спілкуватися за допомогою надсилання повідомлення один з одним. Наприклад, батьків вікно, яке містить текстове поле вікна, що його дитина можна встановити текст елемента керування за допомогою надсилання повідомлення до нього. Елемент керування можна повідомити батьківського вікна змін до тексту, які виконуються користувачем надсилання повідомлень назад до батьківського.

SendMessageCallback функція також надсилає повідомлення до вікна процедури, що відповідає даного вікна. Однак, ця функція повертає негайно. Після процедури вікно обробляє повідомлення, система викликає функцію вказаного зворотного виклику. Щоб отримати додаткові відомості про функцію зворотного виклику перегляньте SendAsyncProc функції.

Іноді може знадобитися надіслати або надіслати повідомлення до всіх вікон верхнього рівня в системі. Наприклад, у разі застосування зміни системного часу, необхідно попередити всіх вікон верхнього рівня про зміну відправивши на WM_TIMECHANGE повідомлення. Заявку можна надсилати або надіслати повідомлення для всіх верхнього рівня windows виклику SendMessage або PostMessage функції та вказавши HWND_TOPMOST в параметрі hwnd . Можна також передавати повідомлення для всіх програм, виклику функції BroadcastSystemMessage та вказавши BSM_APPLICATIONS в параметрі lpdwRecipients.

Застосунок може опублікувати повідомлення без зазначення вікно. Якщо застосунок поставок дескриптор NULL вікна при дзвінках PostMessage, повідомлення Опубліковано в черзі, пов'язаних з поточного потоку. Тому що немає дескриптор вікна вказано, застосування необхідно обробити повідомлення в циклі повідомлення. Це єдиний спосіб створити повідомлення, яке застосовується до всі програми, а не до конкретного вікна.

За допомогою функції InSendMessage або InSendMessageEx , вікна процедуру можна визначити, чи вона обробляє повідомлення, надіслані на інший потік. Ця можливість є корисним, коли повідомлення обробки залежить від походження повідомлення.

Поширені помилки програмування є припустити, що PostMessage функції завжди повідомлення повідомлення. Це не так, коли чергу повідомлень заповнено. Заяву слід перевірити значення, що повертається функцією PostMessage , щоб визначити, чи повідомлення були розміщені і, якщо вона не була, repost його.

Index