如何动态更改 CMFCRibbonLabel 的文本

发布于 2024-07-19 08:54:18 字数 305 浏览 9 评论 0原文

我的 CMDIFrameWndEx 派生主框架窗口使用 CMFCRibbonStatusBar,我在其中添加了 CMFCRibbonLabel

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

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

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

如何让它正确调整大小?

My CMDIFrameWndEx derived main frame window uses a CMFCRibbonStatusBar to which I add a CMFCRibbonLabel.

I'd like to change the text of this label at runtime:

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

It only updates the text but not the rectangle in which to draw it. So if the original text was too short, the new string won't be visible completely.

How do I get it to resize correctly?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

终陌 2024-07-26 08:54:18

您不需要删除并重新添加。 只需这样称呼:

m_wndStatusBar.ForceRecalcLayout();

You don't need to remove and re-add. Just call this:

m_wndStatusBar.ForceRecalcLayout();
浅听莫相离 2024-07-26 08:54:18

使用 CMFCRibbonStatusBarPane::SetAlmostLargeText 函数

use the CMFCRibbonStatusBarPane::SetAlmostLargeText function

一刻暧昧 2024-07-26 08:54:18

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

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

添加标签的代码:

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();
}

Answering my own question again...

I worked around the issue by adding and removing the label instead of trying to change the text.

Code for adding the label:

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 that I'm setting an ID so I can later call CMFCRibbonStatusBar::RemoveElement() with that ID.
The calls to RecalcLayout() and RedrawWindow() are needed to make the changes visible.

Code for removing the label:

if(m_wndStatusBar.RemoveElement(ID_MYLABEL))
{
    m_wndStatusBar.RecalcLayout();
    m_wndStatusBar.RedrawWindow();
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文