Como faço para alterar dinamicamente o texto de uma CMFCRibbonLabel
-
21-08-2019 - |
Pergunta
Meu CMDIFrameWndEx
derivado janela do quadro principal utiliza uma CMFCRibbonStatusBar
à qual acrescento um CMFCRibbonLabel
.
Eu gostaria de mudar o texto desta etiqueta em tempo de execução:
m_pLabel->SetText(description);
m_pLabel->Redraw();
Ele só atualiza o texto, mas não o retângulo em que desenhá-la. Então, se o texto original era muito curto, a nova cadeia não será visível por completo.
Como faço para obtê-lo para redimensionar corretamente?
Solução 3
Respondendo a minha própria pergunta de novo ...
Eu trabalhei em torno da questão, adicionando e removendo o rótulo em vez de tentar mudar o texto.
Código para adicionar o rótulo:
CMFCRibbonLabel* pLabel = new CMFCRibbonLabel(description);
pLabel->SetID(ID_MYLABEL); // ID is 0 by default
m_wndStatusBar.AddDynamicElement(pLabel);
m_wndStatusBar.RecalcLayout();
m_wndStatusBar.RedrawWindow();
Note que eu estou definindo um ID para que eu possa mais tarde chamar CMFCRibbonStatusBar::RemoveElement()
com esse ID.
As chamadas para RecalcLayout()
e RedrawWindow()
são necessários para tornar as alterações visíveis.
Código para remover o rótulo:
if(m_wndStatusBar.RemoveElement(ID_MYLABEL))
{
m_wndStatusBar.RecalcLayout();
m_wndStatusBar.RedrawWindow();
}
Outras dicas
Você não precisa remover e re-add. Basta ligar para o seguinte:
m_wndStatusBar.ForceRecalcLayout();
usar a função CMFCRibbonStatusBarPane :: SetAlmostLargeText