Partilhar via


Visão geral da entrada do mouse

O mouse é um dispositivo de entrada do usuário importante, mas opcional, para aplicativos. Um aplicativo bem escrito deve incluir uma interface de mouse, mas não deve depender apenas do mouse para adquirir a entrada do usuário. O aplicativo deve fornecer suporte total ao teclado também.

Um aplicativo recebe a entrada do mouse na forma de mensagens que são enviadas ou postadas em suas janelas.

Esta secção abrange os seguintes tópicos:

Cursor do Rato

Quando o utilizador move o rato, o sistema move uma imagem de bitmap no ecrã chamada cursor do rato. O cursor do mouse contém um único píxel chamado ponto de foco , um ponto que o sistema rastreia e reconhece como a posição do cursor. Quando ocorre um evento de mouse, a janela que contém a área ativa normalmente recebe a mensagem do mouse resultante do evento. A janela não precisa estar ativa ou ter o foco do teclado para receber uma mensagem do mouse.

O sistema mantém uma variável que controla a velocidade do mouse, ou seja, a distância que o cursor se move quando o usuário move o mouse. Você pode usar a função SystemParametersInfo com o sinalizador SPI_GETMOUSE ou SPI_SETMOUSE para recuperar ou definir a velocidade do mouse. Para obter mais informações sobre cursores do mouse, consulte cursores.

Captura do mouse

O sistema normalmente envia uma mensagem do rato para a janela que contém o ponto sensível do cursor quando ocorre um evento do rato. Um aplicativo pode alterar esse comportamento usando a função SetCapture para rotear mensagens do mouse para uma janela específica. A janela recebe todas as mensagens do mouse até que o aplicativo chame a função ReleaseCapture do ou especifique outra janela de captura, ou até que o usuário clique em uma janela criada por outro thread.

Quando a captura do mouse muda, o sistema envia uma mensagem WM_CAPTURECHANGED para a janela que está perdendo a captura do mouse. O parâmetro lParam da mensagem especifica um handle para a janela que está obtendo a captura do rato.

Somente a janela de primeiro plano pode capturar a entrada do mouse. Quando uma janela em segundo plano tenta capturar a entrada do mouse, ela recebe mensagens apenas para eventos do mouse que ocorrem quando o ponto de acesso do cursor está dentro da parte visível da janela.

Capturar a entrada do mouse é útil se uma janela deve receber todas as entradas do mouse, mesmo quando o cursor se move para fora da janela. Por exemplo, um aplicativo normalmente rastreia a posição do cursor após um evento de botão do mouse para baixo, seguindo o cursor até que ocorra um evento de botão do mouse para cima. Se uma aplicação não capturou a entrada do rato e o utilizador solta o botão do rato fora da janela, a janela não recebe a mensagem de liberação do botão.

Um thread pode usar a função GetCapture para determinar se uma de suas janelas capturou o mouse. Se uma das janelas de um thread tiver capturado o rato, GetCapture obterá um identificador para a janela.

Trava de Clique do Rato

O recurso de acessibilidade Mouse ClickLock permite que um usuário bloqueie o botão principal do mouse após um único clique. Para uma aplicação, o botão continua a parecer estar pressionado. Para desbloquear o botão, um aplicativo pode enviar qualquer mensagem do mouse ou o usuário pode clicar em qualquer botão do mouse. Esse recurso permite que um usuário faça combinações complexas de mouse de forma mais simples. Por exemplo, aqueles com certas limitações físicas podem realçar texto, arrastar objetos ou abrir menus mais facilmente. Para obter mais informações, consulte os seguintes sinalizadores e os comentários em SystemParametersInfo:

  • SPI_GETMOUSECLICKLOCK
  • SPI_SETMOUSECLICKLOCK
  • SPI_GETMOUSECLICKLOCKTIME
  • SPI_SETMOUSECLICKLOCKTIME

Configuração do mouse

Embora o mouse seja um dispositivo de entrada importante para aplicativos, nem todo usuário necessariamente tem um mouse. Um aplicativo pode determinar se o sistema inclui um mouse passando o valor SM_MOUSEPRESENT para a função GetSystemMetrics .

O Windows suporta um rato com até três botões. Em um mouse de três botões, os botões são designados como os botões esquerdo, médio e direito. As mensagens e constantes nomeadas relacionadas aos botões do mouse usam as letras L, M e R para identificar os botões. O botão em um único botão do mouse é considerado o botão esquerdo. Embora o Windows suporte um mouse com vários botões, a maioria dos aplicativos usa o botão esquerdo principalmente e os outros minimamente, se for o caso.

Os aplicativos também podem suportar uma roda do mouse. A roda do mouse pode ser pressionada ou girada. Quando a roda do mouse é pressionada, ela atua como o botão do meio (terceiro), enviando mensagens normais do botão do meio para o seu aplicativo. Quando a roda é girada, uma mensagem é enviada para a sua aplicação. Para obter mais informações, consulte a secção A roda do mouse.

Os aplicativos podem suportar botões de comando do aplicativo. Esses botões, chamados de XBUTTON1 ou XBUTTON2, são projetados para permitir um acesso mais fácil a um navegador da Internet, correio eletrônico e serviços de mídia. Quando XBUTTON1 ou XBUTTON2 é premido, uma mensagem WM_APPCOMMAND é enviada para a sua aplicação. Para obter mais informações, consulte a descrição no WM_APPCOMMAND mensagem.

Um aplicativo pode determinar o número de botões no mouse passando o valor SM_CMOUSEBUTTONS para a função GetSystemMetrics. Para configurar o rato para um utilizador canhoto, o aplicativo pode usar a função SwapMouseButton para inverter o significado dos botões esquerdo e direito do rato. Passar o valor SPI_SETMOUSEBUTTONSWAP para a função SystemParametersInfo é outra maneira de reverter o significado dos botões. Note, no entanto, que o mouse é um recurso compartilhado, portanto, reverter o significado dos botões afeta todos os aplicativos.

XBUTTONs

O Windows suporta ratos com até cinco botões: esquerdo, médio e direito, além de dois botões adicionais chamados XBUTTON1 e XBUTTON2. Os botões XBUTTON1 e XBUTTON2 geralmente estão localizados nas laterais do mouse, perto da base. Esses botões extras não estão presentes em todos os mouses. Se estiverem presentes, os botões XBUTTON1 e XBUTTON2 geralmente são mapeados para uma função do aplicativo, como navegação para frente e para trás em um navegador da Web.

O gestor de janelas suporta XBUTTON1 e XBUTTON2 através das mensagens WM_XBUTTON* e WM_NCXBUTTON*. O HIWORD do WPARAM nestas mensagens contém um sinalizador indicando qual XBUTTON foi pressionado. Como essas mensagens do mouse também se ajustam entre as constantes WM_MOUSEFIRST e WM_MOUSELAST, um aplicativo pode filtrar todas as mensagens do mouse com GetMessage ou PeekMessage.

Os seguintes suportam XBUTTON1 e XBUTTON2:

As seguintes APIs foram modificadas para suportar esses botões:

É improvável que uma janela filha num aplicativo componente seja capaz de implementar comandos diretamente para o XBUTTON1 e XBUTTON2. Assim, DefWindowProc envia uma mensagem WM_APPCOMMAND para uma janela quando XBUTTON1 ou XBUTTON2 é clicado. DefWindowProc também envia a mensagem WM_APPCOMMAND para a sua janela mãe. Isso é semelhante à forma como os menus de contexto são invocados com um clique direito —DefWindowProc envia uma mensagem WM_CONTEXTMENU para o menu e também a envia para seu elemento pai. Além disso, se DefWindowProc receber uma mensagem WM_APPCOMMAND para uma janela de nível superior, ele chamará um gancho de shell com código HSHELL_APPCOMMAND.

Há suporte para os teclados que têm teclas extras para funções do navegador, funções de mídia, inicialização de aplicativos e gerenciamento de energia. Para mais informações, consulte Teclas do Teclado para Navegação e Outras Funções.

Mensagens do mouse

O mouse gera um evento de entrada quando o usuário move o mouse ou pressiona ou libera um botão do mouse. O sistema converte eventos de entrada do mouse em mensagens e os publica na fila de mensagens do thread apropriado. Quando as mensagens do mouse são postadas mais rápido do que um thread pode processá-las, o sistema descarta todas, exceto a mensagem mais recente do mouse.

Uma janela recebe uma mensagem do mouse quando ocorre um evento do mouse enquanto o cursor está dentro das bordas da janela ou quando a janela capturou o mouse. As mensagens do mouse são divididas em dois grupos: mensagens da área do cliente e mensagens da área do não-cliente. Normalmente, um aplicativo processa mensagens de área do cliente e ignora mensagens de área não cliente.

Esta secção abrange os seguintes tópicos:

Mensagens do mouse da área do cliente

Uma janela recebe uma mensagem do mouse da área do cliente quando ocorre um evento do mouse dentro da área do cliente da janela. O sistema posta a mensagem WM_MOUSEMOVE na janela quando o usuário move o cursor dentro da área do cliente. Ele posta uma das seguintes mensagens quando o usuário pressiona ou libera um botão do mouse enquanto o cursor está dentro da área do cliente.

Mensagem Significado
WM_LBUTTONDBLCLK O botão esquerdo do mouse foi clicado duas vezes.
WM_LBUTTONDOWN O botão esquerdo do mouse foi pressionado.
WM_LBUTTONUP O botão esquerdo do mouse foi liberado.
WM_MBUTTONDBLCLK O botão do meio do mouse foi clicado duas vezes.
WM_MBUTTONDOWN O botão do meio do mouse foi pressionado.
WM_MBUTTONUP O botão do meio do mouse foi liberado.
WM_RBUTTONDBLCLK O botão direito do mouse foi clicado duas vezes.
WM_RBUTTONDOWN O botão direito do mouse foi pressionado.
WM_RBUTTONUP O botão direito do mouse foi liberado.
WM_XBUTTONDBLCLK Um botão X do mouse foi clicado duas vezes.
WM_XBUTTONDOWN Um botão X do mouse foi pressionado.
WM_XBUTTONUP Um botão X do mouse foi liberado.

 

Além disso, um aplicativo pode chamar a função TrackMouseEvent para que o sistema envie duas outras mensagens. Ele posta a mensagem WM_MOUSEHOVER quando o cursor passa sobre a área do cliente por um determinado período de tempo. Ele posta a mensagem WM_MOUSELEAVE quando o cursor sai da área do cliente.

Parâmetros de mensagem

O parâmetro lParam de uma mensagem do rato na área de cliente indica a posição do ponto de foco do cursor. A palavra de ordem baixa indica a coordenada x do ponto de acesso e a palavra de ordem alta indica a coordenada y. As coordenadas são especificadas em coordenadas do cliente. No sistema de coordenadas do cliente, todos os pontos na tela são especificados em relação às coordenadas (0,0) do canto superior esquerdo da área do cliente.

O parâmetro wParam contém sinalizadores que indicam o status dos outros botões do mouse e as teclas CTRL e SHIFT no momento do evento do mouse. Você pode verificar esses sinalizadores quando o processamento de mensagens do mouse depende do estado de outro botão do mouse ou da tecla CTRL ou SHIFT. O parâmetro wParam pode ser uma combinação dos seguintes valores.

Valor Descrição
MK_CONTROL A tecla CTRL está inativa.
MK_LBUTTON O botão esquerdo do rato está inativo.
MK_MBUTTON O botão do meio do mouse está para baixo.
MK_RBUTTON O botão direito do rato está inativo.
MK_SHIFT A tecla SHIFT está inativa.
MK_XBUTTON1 O XBUTTON1 está em baixa.
MK_XBUTTON2 O XBUTTON2 está inativo.

 

Double-Click Mensagens

O sistema gera uma mensagem de duplo clique quando o usuário clica em um botão do mouse duas vezes em rápida sucessão. Quando o usuário clica em um botão, o sistema estabelece um retângulo centralizado em torno do ponto de acesso do cursor. Também marca a hora em que o clique ocorreu. Quando o usuário clica no mesmo botão uma segunda vez, o sistema determina se o ponto de acesso ainda está dentro do retângulo e calcula o tempo decorrido desde o primeiro clique. Se o ponto de acesso ainda estiver dentro do retângulo e o tempo decorrido não exceder o valor de tempo limite de clique duplo, o sistema gerará uma mensagem de clique duplo.

Um aplicativo pode obter e definir valores de tempo limite de clique duplo usando as funções GetDoubleClickTime e SetDoubleClickTime, respectivamente. Como alternativa, o aplicativo pode definir o valor de tempo limite de clique duplo usando o sinalizador SPI_SETDOUBLECLICKTIME com a função SystemParametersInfo. Ele também pode definir o tamanho do retângulo que o sistema usa para detetar cliques duplos, passando os sinalizadores SPI_SETDOUBLECLKWIDTH e SPI_SETDOUBLECLKHEIGHT para SystemParametersInfo. Observe, no entanto, que a configuração do valor de tempo limite de clique duplo e retângulo afeta todos os aplicativos.

Uma janela definida pelo aplicativo não recebe, por padrão, mensagens de clique duplo. Devido à sobrecarga do sistema envolvida na geração de mensagens de clique duplo, essas mensagens são geradas apenas para janelas pertencentes a classes que têm o estilo de classe CS_DBLCLKS. Seu aplicativo deve definir esse estilo ao registrar a classe window. Para obter mais informações, consulte Window Classes.

Uma mensagem de clique duplo é sempre a terceira mensagem de uma série de quatro mensagens. As duas primeiras mensagens são as mensagens de pressionar botão e de soltar botão geradas pelo primeiro clique. O segundo clique gera a mensagem de clique duplo seguida por outra mensagem de botão para cima. Por exemplo, clicar duas vezes no botão esquerdo do mouse gera a seguinte sequência de mensagens:

  1. WM_LBUTTONDOWN
  2. WM_LBUTTONUP
  3. WM_LBUTTONDBLCLK
  4. WM_LBUTTONUP

Como uma janela sempre recebe uma mensagem de pressionamento de botão antes de receber uma mensagem de clique duplo, uma aplicação utiliza normalmente a mensagem de clique duplo para prolongar uma tarefa iniciada durante uma mensagem de pressionamento de botão. Por exemplo, quando o usuário clica em uma cor na paleta de cores do Microsoft Paint, o Paint exibe a cor selecionada ao lado da paleta. Quando o usuário clica duas vezes em uma cor, o Paint exibe a cor e abre a caixa de diálogo Editar cores.

Mensagens do mouse de área não cliente

Uma janela recebe uma mensagem de mouse de área não cliente quando um evento de mouse ocorre em qualquer parte de uma janela, exceto na área do cliente. A área não cliente de uma janela consiste em sua borda, barra de menus, barra de título, barra de rolagem, menu de janela, botão minimizar e botão maximizar.

O sistema gera mensagens de área não cliente principalmente para seu próprio uso. Por exemplo, o sistema usa mensagens de área não cliente para alterar o cursor para uma seta de duas pontas quando o ponto de acesso do cursor se move para a borda de uma janela. Uma janela deve enviar mensagens de rato da área não cliente para a função DefWindowProc do para tirar proveito da interface integrada do rato.

Há uma mensagem de mouse de área não cliente correspondente para cada mensagem de mouse de área do cliente. Os nomes dessas mensagens são semelhantes, exceto que as constantes nomeadas para as mensagens de área não cliente incluem as letras NC. Por exemplo, mover o cursor na área não cliente gera uma mensagem WM_NCMOUSEMOVE e pressionar o botão esquerdo do mouse enquanto o cursor está na área não cliente gera uma mensagem WM_NCLBUTTONDOWN.

O parâmetro lParam de uma mensagem de rato de área não cliente é uma estrutura que contém as coordenadas x e y do ponto ativo do cursor. Ao contrário das coordenadas das mensagens do mouse da área do cliente, as coordenadas são especificadas em coordenadas de tela em vez de coordenadas do cliente. No sistema de coordenadas da tela, todos os pontos na tela são relativos às coordenadas (0,0) do canto superior esquerdo da tela.

O parâmetro wParam contém um valor hit-test, um valor que indica onde ocorreu o evento do mouse na área não cliente. A seção a seguir explica a finalidade dos valores de teste de colisão.

A mensagem WM_NCHITTEST

Sempre que ocorre um evento de rato, o sistema envia uma mensagem WM_NCHITTEST para a janela que contém a posição ativa do cursor ou para a janela que capturou o rato. O sistema usa esta mensagem para determinar se deve enviar uma mensagem de rato para a área do cliente ou para a área não cliente. Um aplicação que deve receber o movimento do rato e mensagens de botão do rato deve passar a mensagem WM_NCHITTEST para a função DefWindowProc.

O parâmetro lParam da mensagem WM_NCHITTEST contém as coordenadas de tela do ponto de acesso do cursor. A função DefWindowProc examina as coordenadas e retorna um valor de teste de colisão que indica a localização do ponto sensível. O valor de hit-test pode ser um dos seguintes valores.

Valor Localização do ponto quente
HTBORDER Na borda de uma janela que não tem uma moldura redimensionável.
HTBOTTOM Na borda horizontal inferior de uma janela.
HTBOTTOMLEFT No canto inferior esquerdo de uma borda de janela.
HTBOTTOMRIGHT No canto inferior direito de uma borda de janela.
HTCAPTION Numa barra de título.
HTCLIENT Numa área de cliente.
HTCLOSE Em botão Fechar.
HTERROR No fundo da tela ou em uma linha divisória entre janelas (o mesmo que HTNOWHERE, exceto que o função DefWindowProc produz um sinal sonoro do sistema para indicar um erro).
HTGROWBOX Numa caixa de tamanho (igual a HTSIZE).
HTHELP Num botão Ajuda.
HTHSCROLL Numa barra de rolagem horizontal.
HTLEFT Na borda esquerda de uma janela.
HTMENU Num menu.
HTMAXBUTTON Em botão Maximizar.
HTMINBUTTON No botão Minimizar.
HTNOWHERE No fundo do ecrã ou numa linha divisória entre janelas.
HTREDUCE No botão Minimizar.
HTRIGHT Na borda direita de uma janela.
HTSIZE Em uma caixa de tamanho (o mesmo que HTGROWBOX).
HTSYSMENU Em um menu Sistema ou em um botão Fechar em uma janela filha.
HTTOP Na borda horizontal superior de uma janela.
HTTOPLEFT No canto superior esquerdo de uma borda de janela.
HTTOPRIGHT No canto superior direito de uma borda de janela.
HTTRANSPARENT Numa janela atualmente coberta por outra janela na mesma thread.
HTVSCROLL Na barra de rolagem vertical.
HTZOOM Em botão Maximizar.

 

Se o cursor estiver na área do cliente de uma janela, DefWindowProc retornará o valor de hit-test HTCLIENT para o procedimento da janela. Quando o procedimento da janela retorna este código para o sistema, o sistema converte as coordenadas da tela do ponto sensível do cursor em coordenadas do cliente e depois posta a mensagem apropriada do mouse da área do cliente.

A função DefWindowProc retorna um dos outros valores de teste de acerto quando o ponto de acesso do cursor está na área não cliente de uma janela. Quando o procedimento de janela retorna um desses valores de hit-test, o sistema publica uma mensagem de rato de área não cliente, colocando o valor de hit-test no parâmetro wParam da mensagem e as coordenadas do cursor no parâmetro lParam .

Sonar do rato

O recurso de acessibilidade Sonar do mouse mostra brevemente vários círculos concêntricos ao redor do ponteiro quando o usuário pressiona e libera a tecla CTRL. Esse recurso ajuda o usuário a localizar o ponteiro do mouse em uma tela desordenada ou com resolução definida como alta, em um monitor de baixa qualidade ou para usuários com deficiência visual. Para obter mais informações, consulte os seguintes sinalizadores no SystemParametersInfo:

SPI_GETMOUSESONAR

SPI_SETMOUSESONAR

Rato Desaparecer

O recurso de acessibilidade Mouse Vanish oculta o ponteiro quando o usuário está digitando. O ponteiro do mouse reaparece quando o usuário move o mouse. Esse recurso impede que o ponteiro obscureça o texto que está sendo digitado, por exemplo, em um e-mail ou outro documento. Para obter mais informações, consulte os seguintes sinalizadores no SystemParametersInfo:

SPI_GETMOUSEVANISH

SPI_SETMOUSEVANISH

A Roda do Rato

A roda do mouse combina as características de uma roda e um botão do mouse. A roda tem entalhes discretos e uniformemente espaçados. Quando você gira a roda, uma mensagem de roda é enviada para seu aplicativo à medida que cada entalhe é encontrado. O botão de roda também pode funcionar como um botão normal do meio (terceiro) do Windows. As mensagens padrão enviadas ao pressionar e soltar a roda do rato são WM_MBUTTONUP e WM_MBUTTONDOWN. Clicar duas vezes no terceiro botão envia a mensagem WM_MBUTTONDBLCLK padrão.

A roda do mouse é suportada através da mensagem WM_MOUSEWHEEL.

Girar o mouse envia a mensagem WM_MOUSEWHEEL para a janela de foco. A função DefWindowProc propaga a mensagem para o pai da janela. Não deve haver encaminhamento interno da mensagem, uma vez que DefWindowProc a propaga pela cadeia pai até que uma janela que a processa seja encontrada.

Determinando o número de linhas de rolagem

Os aplicativos devem usar a função SystemParametersInfo para recuperar o número de linhas que um documento rola para cada operação de rolagem (entalhe de roda). Para recuperar o número de linhas, um aplicativo faz a seguinte chamada:

SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, pulScrollLines, 0)

A variável "pulScrollLines" aponta para um valor inteiro não assinado que recebe o número sugerido de linhas para rolar quando a roda do mouse é girada sem teclas modificadoras:

  • Se esse número for 0, nenhuma rolagem deve ocorrer.
  • Se este número for WHEEL_PAGESCROLL, uma rotação da roda deve ser interpretada como um clique nas regiões da página acima ou abaixo da barra de rolagem.
  • Se o número de linhas a serem roladas for maior do que o número de linhas visíveis, a operação de rolagem também deverá ser interpretada como uma operação de página para baixo ou página para cima.

O valor padrão para o número de linhas de rolagem será 3. Se um usuário alterar o número de linhas de rolagem, usando a folha Propriedades do mouse no Painel de controle, o sistema operacional transmitirá uma mensagem WM_SETTINGCHANGE para todas as janelas de nível superior com SPI_SETWHEELSCROLLLINES especificado. Quando um aplicativo recebe a mensagem WM_SETTINGCHANGE, ele pode obter o novo número de linhas de rolagem chamando:

SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, pulScrollLines, 0)

Controles que deslizam

A tabela abaixo lista os controles com funcionalidade de rolagem (incluindo linhas de rolagem definidas pelo usuário).

Controlo Rolagem
Editar Controlo Vertical e horizontal.
Controle de caixa de listagem Vertical e horizontal.
Caixa de combinação Quando não estiver suspensa, cada rolagem recuperará o item seguinte ou anterior. Quando suspensa, cada rolagem encaminha a mensagem para a caixa de listagem, que rola de acordo.
CMD (linha de comando) Vertical.
Vista da árvore Vertical e horizontal.
Visualização de lista Vertical e horizontal.
Rolagem para cima/para baixo Um item de cada vez.
Rolagem da barra de deslocamento Um item de cada vez.
Microsoft Rich Edit 1.0 Vertical. Observe que o cliente Exchange tem as suas próprias versões da vista de lista e dos controlos de vista em árvore que não têm suporte para roda.
Microsoft Rich Edit 2.0 Vertical.

 

Detetando um mouse com uma roda

Para determinar se um mouse com uma roda está conectado, chame GetSystemMetrics com SM_MOUSEWHEELPRESENT. Um valor de retorno de TRUE indica que o mouse está conectado.

O exemplo a seguir é do procedimento de janela para um controle de edição de várias linhas:

BOOL ScrollLines(
     PWNDDATA pwndData,   //scrolls the window indicated
     int cLinesToScroll); //number of times

short gcWheelDelta; //wheel delta from roll
PWNDDATA pWndData; //pointer to structure containing info about the window
UINT gucWheelScrollLines=0;//number of lines to scroll on a wheel rotation

gucWheelScrollLines = SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 
                             0, 
                             pulScrollLines, 
                             0);

case WM_MOUSEWHEEL:
    /*
     * Do not handle zoom and datazoom.
     */
    if (wParam & (MK_SHIFT | MK_CONTROL)) {
        goto PassToDefaultWindowProc;
    }

    gcWheelDelta -= (short) HIWORD(wParam);
    if (abs(gcWheelDelta) >= WHEEL_DELTA && gucWheelScrollLines > 0) 
    {
        int cLineScroll;

        /*
         * Limit a roll of one (1) WHEEL_DELTA to
         * scroll one (1) page.
         */
        cLineScroll = (int) min(
                (UINT) pWndData->ichLinesOnScreen - 1,
                gucWheelScrollLines);

        if (cLineScroll == 0) {
            cLineScroll++;
        }

        cLineScroll *= (gcWheelDelta / WHEEL_DELTA);
        assert(cLineScroll != 0);

        gcWheelDelta = gcWheelDelta % WHEEL_DELTA;
        return ScrollLines(pWndData, cLineScroll);
    }

    break;

Ativação da janela

Quando o utilizador clica numa janela de nível superior inativa ou na janela secundária de uma janela de nível superior inativa, o sistema envia a mensagem WM_MOUSEACTIVATE (entre outras) para a janela de nível superior ou secundária. O sistema envia esta mensagem após postar a mensagem WM_NCHITTEST na janela, mas antes de postar a mensagem de pressionar botão. Quando WM_MOUSEACTIVATE é passado para a função DefWindowProc, o sistema ativa a janela de nível superior e, em seguida, publica a mensagem de pressionamento do botão na janela de nível superior ou filho.

Ao processar WM_MOUSEACTIVATE, uma janela pode controlar se a janela de nível superior se torna a janela ativa como resultado de um clique do mouse e se a janela que foi clicada recebe a mensagem subsequente de botão para baixo. Ele faz isso retornando um dos seguintes valores após o processamento WM_MOUSEACTIVATE.

Valor Significado
MA_ACTIVATE Ativa a janela e não descarta a mensagem do mouse.
MA_NOACTIVATE Não ativa a janela e não descarta a mensagem do mouse.
MA_ACTIVATEANDEAT Ativa a janela e descarta a mensagem do mouse.
MA_NOACTIVATEANDEAT Não ativa a janela, mas descarta a mensagem do mouse.

Ver também

Aproveitando o High-Definition movimento do mouse