如何动态更改CMFCRibbonLabel的文本

时间:2009-05-14 07:52:36

标签: c++ label ribbon statusbar mfc-feature-pack

我的CMDIFrameWndEx衍生主框架窗口使用CMFCRibbonStatusBar我添加了CMFCRibbonLabel

我想在运行时更改此标签的文本:

m_pLabel->SetText(description);
m_pLabel->Redraw();

它只更新文本,但不更新绘制它的矩形。因此,如果原始文本太短,则新字符串将不会完全可见。

如何让它正确调整大小?

3 个答案:

答案 0 :(得分:4)

您无需删除和重新添加。请致电:

m_wndStatusBar.ForceRecalcLayout();

答案 1 :(得分:1)

使用CMFCRibbonStatusBarPane :: SetAlmostLargeText函数

答案 2 :(得分:0)

再次回答我自己的问题......

我通过添加和删除标签来解决此问题,而不是尝试更改文本。

添加标签的代码:

CMFCRibbonLabel* pLabel = new CMFCRibbonLabel(description);
pLabel->SetID(ID_MYLABEL); // ID is 0 by default

m_wndStatusBar.AddDynamicElement(pLabel);
m_wndStatusBar.RecalcLayout();
m_wndStatusBar.RedrawWindow();

请注意,我正在设置ID,以便稍后使用该ID拨打CMFCRibbonStatusBar::RemoveElement()。 需要调用RecalcLayout()RedrawWindow()才能使更改可见。

删除标签的代码:

if(m_wndStatusBar.RemoveElement(ID_MYLABEL))
{
    m_wndStatusBar.RecalcLayout();
    m_wndStatusBar.RedrawWindow();
}