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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top