Postagem e envio de mensagens

Qualquer aplicativo pode postar e enviar mensagens. Como o sistema, um aplicativo envia uma mensagem por copiá-la para uma fila de mensagem e envia uma mensagem, passando os dados da mensagem como argumentos para um procedimento janela. Para postar mensagens, um aplicativo usa a função PostMessage . Um aplicativo pode enviar uma mensagem por chamado de SendMessage, BroadcastSystemMessage, SendMessageCallback, SendMessageTimeout, SendNotifyMessageou SendDlgItemMessage função.

Normalmente, um aplicativo envia uma mensagem para notificar uma janela específica para executar uma tarefa. PostMessage cria uma estrutura de MSG da mensagem e copia a mensagem para a fila de mensagens. Loop de mensagem do aplicativo finalmente recupera a mensagem e distribui-lo para o apropriado procedimento janela.

Um aplicativo normalmente envia uma mensagem para notificar um procedimento de janela para executar uma tarefa imediatamente. A função SendMessage envia a mensagem para o procedimento de janela correspondente para a janela determinada. A função espera até que o procedimento janela conclui processamento e retorna o resultado da mensagem. Pai e filho windows muitas vezes se comunicam enviando mensagens uns aos outros. Por exemplo, uma janela pai que tenha um Controlarar de Editarar como seu janela filho pode definir o texto do controle enviando uma mensagem para ele. O controle pode notificar o janela pai de alterações ao texto que são realizados pelo usuário através do envio de mensagens de volta para o pai.

A SendMessageCallback função também envia uma mensagem para o procedimento de janela correspondente para a janela determinada. No entanto, essa função retorna imediatamente. Após o procedimento janela processa a mensagem, o sistema chama o função callback especificado. Para obter mais informações sobre o função callback, consulte a função de SendAsyncProc.

Ocasionalmente, você pode querer enviar ou postar uma mensagem para todas as janelas de nível superior no sistema. Por exemplo, se o aplicativo altera a hora do sistema, ele deve notificar todas as janelas de nível superior sobre a alteração enviando um WM_TIMECHANGE mensagem. Um aplicativo pode enviar ou postar uma mensagem para todas as janelas de nível superior chamado de SendMessage ou PostMessage função e especificando a HWND_TOPMOST no parâmetro hwnd . Você também pode transmitir uma mensagem a todos os aplicativos, chamando a função BroadcastSystemMessage e especificando BSM_APPLICATIONS in a lpdwRecipients parâmetro.

Um aplicativo pode enviar uma mensagem sem especificar uma janela. Se o aplicativo fornece um NULL identificador janela quando chamar PostMessage, a mensagem está lançada para a fila associada ao thread atual. Porque nenhum identificador janela for especificado, o aplicativo deve processo a mensagem no loop de mensagem. Esta é uma maneira de criar uma mensagem que se aplica ao aplicativo inteiro, em vez de para uma janela específica.

Usando a função InSendMessage ou InSendMessageEx , um procedimento de janela pode determinar se ele está processando uma mensagem enviada por outro segmento. Esse recurso é útil quando o processamento da mensagem depende da origem da mensagem.

Um erro de programação comum é assumir que o PostMessage função sempre remete uma mensagem. Isto não é verdadeiro quando a fila de mensagens está cheia. Um aplicativo deve verificar o valor de retorno da função PostMessage para determinar se a mensagem foi postada e, se não foi, repost-lo.

Index