1

CMDIFrameWndEx派生的主框架窗口使用CMFCRibbonStatusBar我添加了一个CMFCRibbonLabel.

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

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

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

如何让它正确调整大小?

4

3 回答 3

4

您无需删除并重新添加。只需调用这个:

m_wndStatusBar.ForceRecalcLayout();
于 2010-06-14T13:44:55.523 回答
1

使用 CMFCRibbonStatusBarPane::SetAlmostLargeText 函数

于 2009-08-26T18:40:03.087 回答
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,以便以后可以CMFCRibbonStatusBar::RemoveElement()使用该 ID 调用。需要调用RecalcLayout()RedrawWindow()才能使更改可见。

去除标签的代码:

if(m_wndStatusBar.RemoveElement(ID_MYLABEL))
{
    m_wndStatusBar.RecalcLayout();
    m_wndStatusBar.RedrawWindow();
}
于 2009-05-15T12:41:19.310 回答