Compartilhar via


Mensagens de controle

Esta seção contém informações sobre como as mensagens do Windows são usadas para se comunicar com controles.

Os tópicos a seguir são discutidos.

Mensagens para controles comuns

Como os controles comuns são janelas, um aplicativo pode se comunicar com eles usando mensagens comuns do Microsoft Win32, como WM_GETFONT ou WM_SETTEXT. Além disso, a classe de janela de cada controle comum oferece suporte a um conjunto de mensagens específicas do controle. Normalmente, um aplicativo usa SendMessage ou SendDlgItemMessage para passar mensagens para o controle (geralmente recebendo informações no valor de retorno).

Alguns controles comuns também têm um conjunto de macros que um aplicativo pode usar em vez de SendMessage. As macros são normalmente mais fáceis de usar do que as funções. O código de exemplo a seguir recupera o texto do item de exibição em árvore selecionado, primeiro usando as mensagens brutas e segundo usando as macros equivalentes. Suponha que hwnd é o identificador da janela de controle.

BOOL fSuccess;
WCHAR itemText[99];
TVITEM tvItem = { 0 };
tvItem.mask = TVIF_TEXT;
tvItem.cchTextMax = ARRAYSIZE(itemText);
tvItem.pszText = itemText;

// This...
tvItem.hItem = (HTREEITEM)SendMessage(hwnd, TVM_GETNEXTITEM, TVGN_CARET, NULL);
fSuccess = SendMessage(hwnd, TVM_GETITEM, 0, (LPARAM)&tvItem);

// ... is equivalent to this.
tvItem.hItem = TreeView_GetSelection(hwnd);
fSuccess = TreeView_GetItem(hwnd, &tvItem);

Quando uma alteração é feita nas configurações de cor do sistema, o Windows envia uma mensagem de WM_SYSCOLORCHANGE para todas as janelas de nível superior. Sua janela de nível superior deve encaminhar a mensagem WM_SYSCOLORCHANGE para seus controles comuns, caso contrário, os controles não serão notificados da mudança de cor. O encaminhamento da mensagem garante que as cores usadas pelos controles comuns sejam consistentes com as usadas por outros objetos da interface do usuário. Por exemplo, um controle de barra de ferramentas usa a cor "Objetos 3D" para desenhar seus botões. Se o usuário alterar a cor do objeto 3D, mas a mensagem WM_SYSCOLORCHANGE não for encaminhada para a barra de ferramentas, os botões da barra de ferramentas permanecerão em sua cor original (ou até mesmo mudarão para uma combinação de cores antigas e novas) enquanto a cor de outros botões no sistema muda.

Notificações de controles

Controles são janelas filhas que enviam mensagens de notificação para a janela pai quando eventos, geralmente acionados pela entrada do usuário, ocorrem no controle. O aplicativo depende dessas mensagens de notificação para determinar qual ação o usuário quer que execute. Com exceção das barras de controle, que usam as mensagens WM_HSCROLL e WM_VSCROLL para notificar seus pais sobre alterações, os controles comuns enviam notificações como mensagens WM_COMMAND ou WM_NOTIFY, conforme especificado no tópico de referência da notificação. Normalmente, as notificações mais antigas (aquelas que estão na API há muito tempo) usam WM_COMMAND.

O parâmetro lParam de WM_NOTIFY é o endereço de uma estrutura NMHDR ou o endereço de uma estrutura maior que inclui NMHDR como seu primeiro membro. A estrutura contém o código de notificação e identifica o controle comum que enviou a mensagem de notificação. O significado dos membros restantes da estrutura, se houver, varia dependendo do código de notificação.

Cada tipo de controle comum tem um conjunto correspondente de códigos de notificação. A biblioteca de controle comum também fornece códigos de notificação que podem ser enviados por mais de um tipo de controle comum. Consulte a documentação para o controle de interesse para determinar quais códigos de notificação ele enviará e qual formato eles tomarão.

Para obter um código de exemplo mostrando como manipular mensagens WM_NOTIFY , consulte o tópico de referência dessa mensagem.

Referência de Controle Geral