Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Observação
A nota técnica a seguir não foi atualizada desde que foi incluída pela primeira vez na documentação online. Como resultado, alguns procedimentos e tópicos podem estar desatualizados ou incorretos. Para obter as informações mais recentes, é recomendável que você pesquise o tópico de interesse no índice de documentação online.
Esta nota descreve as mensagens internas do Windows e os formatos de recurso usados pelo MFC. Essas informações explicam a implementação do framework e ajudarão você a debugar seu aplicativo. Para os aventureiros, mesmo que todas essas informações não tenham suporte oficial, você pode usar algumas dessas informações para implementações avançadas.
Esta observação contém detalhes de implementação privada do MFC; todos os conteúdos estão sujeitos a alterações no futuro. Mensagens privadas do Windows MFC têm significado apenas no escopo de um aplicativo, mas serão alteradas no futuro para conter mensagens em todo o sistema.
O intervalo de mensagens privadas do Windows e os tipos de recursos do MFC estão no intervalo de "sistema" reservado pelo Microsoft Windows. Atualmente, nem todos os números nos intervalos são usados e, no futuro, novos números no intervalo podem ser usados. Os números usados no momento podem ser alterados.
Mensagens privadas do Windows MFC estão no intervalo 0x360-0x37F>.
Os tipos de recursos privados MFC estão no intervalo 0xF0->0xFF.
Mensagens privadas do Windows MFC
Essas mensagens do Windows são usadas no lugar de funções virtuais C++ em que o acoplamento relativamente flexível é necessário entre objetos de janela e onde uma função virtual C++ não seria apropriada.
Essas mensagens privadas do Windows e estruturas de parâmetros associadas são declaradas no cabeçalho privado do MFC 'AFXPRIV. H'. Esteja avisado de que qualquer um de seus códigos que inclua esse cabeçalho pode estar dependendo de um comportamento não documentado e poderá quebrar em versões futuras do MFC.
No raro caso de necessidade de lidar com uma dessas mensagens, você deve usar a macro de mapa de mensagens ON_MESSAGE e manipular a mensagem no formato LRESULT/WPARAM/LPARAM genérico.
WM_QUERYAFXWNDPROC
Esta mensagem é enviada para uma janela que está sendo criada. Isso é enviado muito cedo no processo de criação como um método para determinar se o WndProc é AfxWndProc. AfxWndProc retorna 1.
| Parâmetros e valor retornado | Descrição |
|---|---|
| wParam | Não usado |
| lParam | Não usado |
| Retornos | 1, se processado por AfxWndProc |
WM_SIZEPARENT
Esta mensagem é enviada por uma janela com moldura para os filhos imediatos durante o redimensionamento (CFrameWnd::OnSize chama CFrameWnd::RecalcLayout que chama CWnd::RepositionBars), para reposicionar as barras de controle ao redor da lateral do quadro. A estrutura AFX_SIZEPARENTPARAMS contém o retângulo do cliente disponível atual do pai e um HDWP (que pode ser NULL) com o qual DeferWindowPos de ser chamado para minimizar novas pinturas.
| Parâmetros e valor retornado | Descrição |
|---|---|
| wParam | Não usado |
| lParam | Endereço de uma estrutura AFX_SIZEPARENTPARAMS |
| Retornos | Não usado (0) |
Ignorar a mensagem indica que a janela não participa do layout.
WM_SETMESSAGESTRING
Essa mensagem é enviada para uma janela de quadro para solicitar que ela atualize a linha de mensagem na barra de status. Uma ID de cadeia de caracteres ou um LPCSTR podem ser especificados (mas não ambos).
| Parâmetros e valor retornado | Descrição |
|---|---|
| wParam | ID da cadeia de caracteres (ou zero) |
| lParam | LPCSTR para a cadeia de caracteres (ou NULL) |
| Retornos | Não usado (0) |
WM_IDLEUPDATECMDUI
Esta mensagem é enviada em tempo ocioso para implementar a atualização de tempo ocioso dos manipuladores de interface do usuário de comando de atualização. Se a janela (geralmente uma barra de controle) manipular a mensagem, ela criará um CCmdUI objeto (ou um objeto de uma classe derivada) e chamará CCmdUI::DoUpdate cada um dos "itens" na janela. Isso, por sua vez, verificará se há um manipulador ON_UPDATE_COMMAND_UI para os objetos na cadeia de manipuladores de comandos.
| Parâmetros e valor retornado | Descrição |
|---|---|
| wParam | BOOL bDisableIfNoHandler |
| lParam | Não usado (0) |
| Retornos | Não usado (0) |
bDisableIfNoHandler é um valor diferente de zero para desabilitar o objeto de interface do usuário, se não houver um manipulador ON_UPDATE_COMMAND_UI nem um ON_COMMAND.
WM_EXITHELPMODE
Esta mensagem é postada em um CFrameWnd para sair do modo de ajuda confidencial do contexto. O recebimento dessa mensagem encerra o loop modal iniciado por CFrameWnd::OnContextHelp.
| Parâmetro e valor retornado | Descrição |
|---|---|
| wParam | Não usado (0) |
| lParam | Não usado (0) |
| Retornos | Não usado |
WM_INITIALUPDATE
Esta mensagem é enviada pelo modelo de documento para todos os descendentes de uma janela com moldura, quando é seguro realizar a atualização inicial. Ela é mapeada para uma chamada para CView::OnInitialUpdate, mas pode ser usada em outras classes derivadas de CWnd para outra atualização única.
| Parâmetros e valor retornado | Descrição |
|---|---|
| wParam | Não usado (0) |
| lParam | Não usado (0) |
| Retornos | Não usado (0) |
WM_RECALCPARENT
Esta mensagem é enviada por um modo de exibição para a janela pai (obtida por meio de GetParent), para forçar o novo cálculo de layout (geralmente, o pai chamará RecalcLayout). Isso é usado em aplicativos de servidor OLE em que é necessário que o quadro aumente de tamanho à medida que o tamanho total da exibição aumenta.
Se a janela pai processar esta mensagem, ela deverá retornar TRUE e preencher o RECT passado em lParam com o novo tamanho da área de cliente. Isso é usado em CScrollView para tratar corretamente as barras de rolagem (coloque-as na parte externa da janela, quando forem adicionadas), quando um objeto de servidor é ativado no local.
| Parâmetros e valor retornado | Descrição |
|---|---|
| wParam | Não usado (0) |
| lParam | LPRECT rectClient, pode ser NULL |
| Retornos | TRUE, se o novo retângulo do cliente for retornado. Caso contrário, FALSE |
WM_SIZECHILD
Essa mensagem é enviada por COleResizeBar à sua janela proprietária (via GetOwner) quando o usuário redimensiona a barra usando os controles de redimensionamento.
COleIPFrameWnd responde a essa mensagem tentando reposicionar a janela de quadros como o usuário solicitou.
O novo retângulo, fornecido nas coordenadas do cliente em relação à janela com moldura que contém a barra de redimensionamento, é apontado por lParam.
| Parâmetros e valor retornado | Descrição |
|---|---|
| wParam | Não usado (0) |
| lParam | LPRECT rectNew |
| Retornos | Não usado (0) |
WM_DISABLEMODAL
Esta mensagem é enviada para todas as janelas pop-up pertencentes a uma janela com moldura que está sendo desativada. A janela com moldura usa o resultado para determinar se a janela pop-up deve ser desabilitada.
Você pode usá-lo para executar o processamento especial em sua janela pop-up quando o quadro entra em um estado modal ou para impedir que determinadas janelas pop-up sejam desabilitadas. As dicas de ferramenta usam essa mensagem para se destruir, quando a janela com moldura entra em um estado modal, por exemplo.
| Parâmetros e valor retornado | Descrição |
|---|---|
| wParam | Não usado (0) |
| lParam | Não usado (0) |
| Retornos | Um valor diferente de zero para NÃO desabilitar a janela. 0 indica que a janela será desabilitada |
WM_FLOATSTATUS
Esta mensagem é enviada para todas as janelas pop-up pertencentes a uma janela com moldura, quando o quadro é ativado ou desativado por outra janela com moldura de nível superior. Ela é usada pela implementação do MFS_SYNCACTIVE no CMiniFrameWnd, para manter a ativação dessas janelas pop-up em sincronia com a ativação da janela com moldura de nível superior.
| Parâmetros | Descrição |
|---|---|
| wParam | É um dos seguintes valores: FS_SHOW FS_HIDE FS_ACTIVATE FS_DEACTIVATE FS_ENABLEFS_DISABLE FS_SYNCACTIVE |
| lParam | Não usado (0) |
O valor retornado deverá ser diferente de zero se FS_SYNCACTIVE estiver definido e a janela sincronizar sua ativação com o quadro pai.
CMiniFrameWnd retorna diferente de zero quando o estilo é definido como MFS_SYNCACTIVE.
Para obter mais informações, consulte a implementação de CMiniFrameWnd.
WM_ACTIVATETOPLEVEL
Essa mensagem é enviada para uma janela de nível superior quando uma janela em seu "grupo de nível superior" é ativada ou desativada. Uma janela faz parte de um grupo de nível superior, se for uma janela de nível superior (sem pai nem proprietário) ou pertencer a essa janela. Essa mensagem é semelhante em uso para WM_ACTIVATEAPP, mas funciona em situações em que janelas pertencentes a processos diferentes são misturadas em uma hierarquia de janela única (comum em aplicativos OLE).
WM_COMMANDHELP, WM_HELPHITTEST, WM_EXITHELPMODE
Essas mensagens são usadas na implementação da Ajuda contextual. Consulte a Nota Técnica 28 para obter mais informações.
Formatos de recurso privado MFC
Atualmente, o MFC define dois formatos de recurso privado: RT_TOOLBAR e RT_DLGINIT.
Formato de recurso RT_TOOLBAR
A barra de ferramentas padrão fornecida pelo AppWizard baseia-se em um recurso personalizado RT_TOOLBAR, que foi introduzido no MFC 4.0. Você pode editar esse recurso usando o editor da Barra de Ferramentas.
Formato de recurso RT_DLGINIT
Um formato de recurso privado MFC é usado para armazenar informações extras de inicialização de diálogo. Isso inclui as cadeias de caracteres iniciais armazenadas em uma caixa de combinação. O formato desse recurso não foi projetado para ser editado manualmente, mas é tratado pelo Visual C++.
O Visual C++ e esse recurso RT_DLGINIT não são necessários para usar os recursos relacionados do MFC, pois há uma alternativa à API para usar as informações no recurso. O uso do Visual C++ facilita muito a escrita, a manutenção e a tradução do seu aplicativo a longo prazo.
A estrutura básica de um recurso de RT_DLGINIT é a seguinte:
+---------------+ \
| Control ID | UINT |
+---------------+ |
| Message # | UINT |
+---------------+ |
|length of data | DWORD |
+---------------+ | Repeated
| Data | Variable Length | for each control
| ... | and Format | and message
+---------------+ /
| 0 | BYTE
+---------------+
Uma seção repetida contém a ID de controle para a qual enviar a mensagem, a Mensagem # a ser enviada (uma mensagem normal do Windows) e um comprimento variável de dados. A mensagem do Windows é enviada em um formulário:
SendDlgItemMessage(<Control ID>, <Message #>, 0, &<Data>);
Esse é um formato muito geral, permitindo qualquer conteúdo de dados e mensagens do Windows. O editor de recursos do Visual C++ e o MFC dão suporte apenas a um subconjunto limitado de mensagens do Windows: CB_ADDSTRING para as opções de lista iniciais para caixas de combinação (os dados são uma cadeia de caracteres de texto).