代码之家  ›  专栏  ›  技术社区  ›  foraidt

如何动态更改CMFCRibbonLabel的文本

  •  0
  • foraidt  · 技术社区  · 17 年前

    CMDIFrameWndEx 派生的主框架窗口使用 CMFCRibbonStatusBar CMFCRibbonLabel .

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

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

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

    如何使其正确调整大小?

    3 回复  |  直到 7 年前
        1
  •  4
  •   demoncodemonkey    16 年前

    m_wndStatusBar.ForceRecalcLayout();
    
        2
  •  1
  •   Rich Rich    17 年前

    使用CMFCRibbonStatusBarPane::SetAlmostLargeText函数

        3
  •  0
  •   Community Mohan Dere    6 年前

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

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

    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() 用那个身份证。 RecalcLayout() RedrawWindow() 使更改可见所需的。

    删除标签的代码:

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