Mensagens de controle
Esta seção contém informações sobre como as mensagens do Windows são usadas para se comunicar com controles.
São discutidos os seguintes tópicos.
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 window de cada controle comum suporta 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 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 é feita uma alteração 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 mudança de cor. Encaminhar a mensagem garante que as cores usadas por seus 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 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 dos controlos
Os 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 deseja que ele execute. Com exceção das barras de controle, que usam as mensagens WM_HSCROLL e WM_VSCROLL para notificar o pai 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 deNMHDRou 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 restantes membros da estrutura, se existirem, varia consoante o código de notificação.
Cada tipo de controlo 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 serão enviados e qual formato eles tomarão.
Por exemplo, código mostrando como lidar com mensagens WM_NOTIFY, consulte o tópico de referência para essa mensagem.
Tópicos relacionados