Atualizando o texto de um painel da barra de status
Este artigo explica como alterar o texto que aparece em um painel da barra de status do MFC. Uma barra de status — um objeto de janela da classe CStatusBar — contém vários "painéis". Cada painel é uma área retangular da barra de status que você pode usar para exibir informações. Por exemplo, muitos aplicativos exibem o status do CAPS LOCK, NUM LOCK e outras teclas nos painéis mais à direita. Os aplicativos também costumam exibir texto informativo no painel mais à esquerda (painel 0), às vezes chamado de "painel de mensagens". Por exemplo, a barra de status do MFC padrão usa o painel de mensagens para exibir uma cadeia de caracteres explicando o item de menu ou o botão da barra de ferramentas selecionado no momento. A figura nas Barras de Status mostra uma barra de status de um aplicativo MFC criado pelo Assistente de Aplicativo.
Por padrão, o MFC não habilita um painel CStatusBar
quando cria o painel. Para ativar um painel, você deve usar a macro ON_UPDATE_COMMAND_UI para cada painel na barra de status e atualizar os painéis. Como os painéis não enviam mensagens WM_COMMAND (não são como botões da barra de ferramentas), você deve digitar o código manualmente.
Por exemplo, suponha que um painel tenha ID_INDICATOR_PAGE
como seu identificador de comando e que ele contenha o número de página atual em um documento. O procedimento a seguir descreve como criar um novo painel na barra de status.
Para criar um novo painel
Defina a ID de comando do painel.
No menu Exibir, clique em Modo de Exibição de Recursos. Clique com o botão direito do mouse no recurso do projeto e clique em Símbolos de Recurso. Na caixa de diálogo Símbolos de Recurso, clique em
New
. Digite um nome de ID de comando: por exemplo,ID_INDICATOR_PAGE
. Especifique um valor para a ID ou aceite o valor sugerido pela caixa de diálogo Símbolos de Recurso. Por exemplo, paraID_INDICATOR_PAGE
, aceite o valor padrão. Feche a caixa de diálogo Símbolos de Recurso.Defina uma cadeia de caracteres padrão a ser exibida no painel.
Com o Modo de Exibição de Recursos aberto, clique duas vezes na Tabela de Cadeia de Caracteres na janela que lista os tipos de recursos para seu aplicativo. Com o editor de Tabela de Cadeia de Caracteres aberto, escolha Nova Cadeia de Caracteres no menu Inserir. Selecione a ID de comando do painel (por exemplo,
ID_INDICATOR_PAGE
) e digite um valor de cadeia de caracteres padrão, como "Página". Feche o editor de cadeia de caracteres. (Você precisa de uma cadeia de caracteres padrão para evitar um erro do compilador.)Adicione o painel à matriz de indicadores.
No arquivo MAINFRM.CPP, localize a matriz de indicadores. Essa matriz lista as IDs de comando para todos os indicadores da barra de status em ordem da esquerda para a direita. No ponto apropriado na matriz, insira a ID de comando do painel, conforme mostrado aqui para
ID_INDICATOR_PAGE
:static UINT indicators[] = { ID_SEPARATOR, // status line indicator ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, ID_INDICATOR_PAGE, };
A maneira recomendada de exibir texto em um painel é chamar a função membro SetText
da classe CCmdUI
em uma função de manipulador de atualização para o painel. Por exemplo, talvez você queira configurar uma variável de inteiro m_nPage que contém o número da página atual e usar SetText
para definir o texto do painel como uma versão de cadeia de caracteres desse número.
Observação
Recomenda-se a abordagem SetText
. É possível executar essa tarefa em um nível ligeiramente inferior chamando a função membro CStatusBar
SetPaneText
. Mesmo assim, você ainda precisa de um manipulador de atualização. Sem esse manipulador para o painel, o MFC desabilita automaticamente o painel, apagando seu conteúdo.
O procedimento a seguir mostra como usar uma função de manipulador de atualização para exibir texto em um painel.
Para fazer um painel exibir texto
Adicione um manipulador de atualização de comando para o comando.
Adicione manualmente um protótipo para o manipulador, conforme mostrado aqui para
ID_INDICATOR_PAGE
(em MAINFRM.H):afx_msg void OnUpdatePage(CCmdUI* pCmdUI);
No arquivo .CPP apropriado, adicione a definição do manipulador, conforme mostrado aqui para
ID_INDICATOR_PAGE
(em MAINFRM.CPP):void CMainFrame::OnUpdatePage(CCmdUI* pCmdUI) { pCmdUI->Enable(); CString strPage; strPage.Format(_T("Page %d"), m_nPage); pCmdUI->SetText(strPage); }
As últimas três linhas desse manipulador são o código que exibe o texto.
No mapa de mensagens apropriado, adicione a macro ON_UPDATE_COMMAND_UI, conforme mostrado aqui para
ID_INDICATOR_PAGE
(em MAINFRM.CPP):ON_UPDATE_COMMAND_UI(ID_INDICATOR_PAGE, &CMainFrame::OnUpdatePage)
Depois de definir o valor da variável de membro m_nPage (de classe CMainFrame
), essa técnica fará com que o número da página apareça no painel durante o processamento ocioso da mesma maneira que o aplicativo atualiza outros indicadores. Se m_nPage for alterado, a exibição será alterada durante o próximo loop ocioso.