Mensagens em fila

O sistema pode exibir qualquer número de janelas em um tempo. A rota do mouse e entrada do teclado para a janela apropriada, o sistema usa filas de mensagens.

o sistema mantém uma fila de mensagens de sistema único e qualquer número de filas de Mensagemens do thread, uma para cada thread de GUI. Para evitar a sobrecarga da criação de uma fila de mensagens não-GUI threads, todos os threads são criados inicialmente sem uma fila de mensagens. O sistema cria fila de mensagens do segmento somente quando o thread faz sua primeira chamada para uma das funções de usuário Win32 ou GDI.

Sempre que o usuário move o mouse, clica nos botões do mouse ou digita no teclado, o driver de dispositivo para o mouse ou teclado converte a entrada em mensagens e coloca-los na fila de mensagens do sistema. O sistema remove as mensagens, um de cada vez, a fila de mensagens do sistema, analisa-os para determinar a janela de destino e, em seguida, envia-los para a fila de mensagens do segmento que criou a janela de destino. Fila de mensagem do thread recebe todas as mensagens de mouse e teclado para os windows criados pelo thread. O thread remove as mensagens da fila e direciona o sistema para enviá-los para o apropriado procedimento janela para processamento.

Com exceção do WM_PAINT mensagem, o sistema sempre envia mensagens no final de uma fila de mensagens. Isso garante que uma janela recebe as mensagens de entrada no first-in, First-Out (FIFO) seqüência apropriada. A mensagem WM_PAINT, no entanto, é mantida na fila e é encaminhada para o procedimento janela somente quando a fila contiver há outras mensagens. Várias mensagens WM_PAINT para a mesma janela são combinadas em uma única mensagem WM_PAINT, consolidando todas as partes inválidas da área do cliente em uma única área. Combinar mensagens WM_PAINT reduz o número de vezes que uma janela deve redesenhar o conteúdo da sua área de cliente.

O sistema envia uma mensagem para fila de mensagens do segmento preenchendo uma estrutura de MSG e, em seguida, copiá-lo para a fila de mensagens. Informações de MSG incluem: o identificador da janela para que a mensagem é destinado, o identificador de mensagem, os dois parâmetros de mensagem, o tempo que a mensagem foi postada e a posição do cursor do mouse. Um thread pode postar uma mensagem para sua própria fila de mensagens ou a fila de outro segmento usando a função PostMessage ou PostThreadMessage.

Um aplicativo pode remover uma mensagem da sua fila usando o GetMessage função. Para examinar uma mensagem sem removê-lo da sua fila, um aplicativo pode usar a função de PeekMessage . Essa função preenche a MSG com informações sobre a mensagem.

Depois de remover uma mensagem da sua fila, um aplicativo pode usar o DispatchMessage função para direcionar o sistema para enviar a mensagem para um procedimento de janela para processamento. DispatchMessage leva um ponteiro a MSG que foi preenchido por um chamar anterior para o GetMessage ou PeekMessage função. DispatchMessage passa o identificador de janela, o identificador de mensagem e os dois parâmetros de mensagem para o procedimento de janela, mas não passar o tempo que a mensagem foi postada ou posição do cursor de mouse. Um aplicativo pode recuperar essas informações, chamando as funções GetMessageTime e GetMessagePos durante o processamento de uma mensagem.

Um thread pode usar a função WaitMessage a ceder o controle para outros segmentos quando não tem nenhum mensagens em sua fila de mensagens. A função suspende o thread e não retorna até que uma nova mensagem é colocada na fila de mensagem do thread.

Você pode chamar a função SetMessageExtraInfo para associar um valor de 32 bits a fila de mensagem do thread atual. Em seguida, chamar a função GetMessageExtraInfo para obter o valor associado com a última mensagem recuperada pela GetMessage ou PeekMessage função.

Index