Controlar mensagens
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
- Notificações de controles
- tópicos relacionados
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 dá suporte a um conjunto de mensagens específicas de controle. Normalmente, um aplicativo usa SendMessage ou SendDlgItemMessage para passar mensagens para o controle (geralmente recebendo informações no valor retornado).
Alguns controles comuns também têm um conjunto de macros que um aplicativo pode usar em vez de SendMessage. Normalmente, as macros são 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 de árvore selecionado, primeiro usando as mensagens brutas e o 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 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 sobre a alteração de cor. O encaminhamento da mensagem garante que as cores usadas pelos controles comuns sejam consistentes com as usadas por outros objetos de 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 na 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 for alterada.
Notificações de controles
Os controles são janelas filho que enviam mensagens de notificação para a janela pai quando eventos, geralmente disparados pela entrada do usuário, ocorrem no controle. O aplicativo depende dessas mensagens de notificação para determinar qual ação o usuário deseja que ele tome. Com exceção das barras de controle, que usam as mensagens WM_HSCROLL e WM_VSCROLL para notificar o pai das 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 estruturaNMHDRou 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 do controle de interesse para determinar quais códigos de notificação ele enviará e qual formato eles tomarão.
Por exemplo, código mostrando como lidar com mensagens de WM_NOTIFY, consulte o tópico de referência dessa mensagem.
Tópicos relacionados