Compartilhar via


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

  1. 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, para ID_INDICATOR_PAGE, aceite o valor padrão. Feche a caixa de diálogo Símbolos de Recurso.

  2. 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.)

  3. 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 CStatusBarSetPaneText. 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

  1. 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);
    
  2. 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.

  3. 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.

O que mais você deseja saber?

Confira também

Implementação da barra de status no MFC
Classe CStatusBar