|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
Posting and Sending Messages
Any application can post and send messages. Like the system, an application posts a message by copying it to a message queue and sends a message by passing the message data as arguments to a window procedure. To post messages, an application uses the PostMessage function. An application can send a message by calling the SendMessage, BroadcastSystemMessage, SendMessageCallback, SendMessageTimeout, SendNotifyMessage, or SendDlgItemMessage function.
An application typically posts a message to notify a specific window to perform a task. PostMessage creates an MSG structure for the message and copies the message to the message queue. The application's message loop eventually retrieves the message and dispatches it to the appropriate window procedure. An application typically sends a message to notify a window procedure to perform a task immediately. The SendMessage function sends the message to the window procedure corresponding to the given window. The function waits until the window procedure completes processing and then returns the message result. Parent and child windows often communicate by sending messages to each other. For example, a parent window that has an edit control as its child window can set the text of the control by sending a message to it. The control can notify the parent window of changes to the text that are carried out by the user by sending messages back to the parent.
The SendMessageCallback function also sends a message to the window procedure corresponding to the given window. However, this function returns immediately. After the window procedure processes the message, the system calls the specified callback function. For more information about the callback function, see the SendAsyncProc function. Occasionally, you may want to send or post a message to all top-level windows in the system. For example, if the application changes the system time, it must notify all top-level windows about the change by sending a WM_TIMECHANGE message. An application can send or post a message to all top-level windows by calling the SendMessage or PostMessage function and specifying HWND_TOPMOST in the hwnd parameter. You can also broadcast a message to all applications by calling the BroadcastSystemMessage function and specifying BSM_APPLICATIONS in the lpdwRecipients parameter.
An application can post a message without specifying a window. If the application supplies a NULL window handle when calling PostMessage, the message is posted to the queue associated with the current thread. Because no window handle is specified, the application must process the message in the message loop. This is one way to create a message that applies to the entire application, instead of to a specific window. By using the InSendMessage function, a window procedure can determine whether it is processing a message sent by another thread. This capability is useful when message processing depends on the origin of the message.
A common programming error is to assume that the PostMessage function always posts a message. This is not true when the message queue is full. An application should check the return value of the PostMessage function to determine whether the message has been posted and, if it has not been, repost it.
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Почтовое отправления Сообщений и Посылки
Любое приложение может послать и посылать сообщения. Подобно системе, приложение посылает сообщение копируя это в сообщение ставить в очередь и посылает сообщение передавая данные сообщения как аргументы в процедуру окна. Чтобы посылать сообщения, приложение использует функцию PostMessage. Приложение может послать сообщение вызывая SendMessage, BroadcastSystemMessage, SendMessageCallback, SendMessageTimeout, SendNotifyMessage, или функция SendDlgItemMessage.
Приложение обычно посылает сообщение, чтобы уведомлять специфическое окно, чтобы выполнять задачу. PostMessage СОЗДАЕТ структуру MSG для сообщения и копирует сообщение в очередь сообщения. Прикладной цикл сообщения в конечном счете извлекает сообщение и посылает это в подходящую процедуру окна. Приложение обычно посылает сообщение, чтобы уведомлять процедуру окна, чтобы выполнять задачу немедленно. Функция SendMessage посылает сообщение в процедуру окна, соответствуемую в данное окно. Функция ожидается пока процедура окна не завершит обработку затем возвращает результат сообщения. Родительское и окно ребенка часто передает посылая сообщения друг к другу. Например, родительское окно, которое имеет управление редактирования как окно ребенка может установить текст управления посылая сообщение этому. Управление может уведомить родительское окно об изменениях в текст, который выполнен пользователем возвращав сообщения родителю.
Функция SendMessageCallback также посылает сообщение в процедуру окна, соответствуемую в данное окно. Тем не менее, эта функция возвращается немедленно. После того, как процедура окна обработает сообщение, система вызывает определенную функцию возврата. Более подробно о функции возврата, смотри функцию SendAsyncProc. Случайно, Вы можете захотеть послать или посылать сообщение во все окно верхнего уровня в системе. Например, если приложение изменяет системное время, оно должно уведомить все окно верхнего уровня об изменении посылая сообщение WM_TIMECHANGE. Приложение может послать или посылать сообщение во все окно верхнего уровня вызывая SendMessage или функция PostMessage и определяя HWND_TOPMOST в параметре hwnd. Вы можете также транслировать сообщение во все приложения вызывая функцию BroadcastSystemMessage и определяя BSM_APPLICATIONS в параметре lpdwRecipients.
Приложение может послать сообщение не определяя окно. Если приложение поставляет НЕДЕЙСТВИТЕЛЬНОМУ окну ручку при разговоре PostMessage, сообщение объявлено в очередь связанную текущей резьбой. Поскольку никакая ручка окна не определена, приложение должно обработать сообщение в цикле сообщения. Это - один путь создавать сообщение, которое относится к целому приложению, а не в специфическое окно. Используя функцию InSendMessage, процедура окна может определить обрабатывает она сообщение посланное другой резьбой. Эта возможность полезная когда обработка сообщения зависит от начала сообщения.
Общее программирование ошибки должно допустить что функция PostMessage всегда посылает сообщение. Это - не истина когда очередь сообщения полная. Приложение должно проверять обратную величину функции PostMessage, чтобы определять объявлено сообщение и, если оно не было, repost это.
|
|
|
|
| |