Как динамически изменить текст CMFCRibbonLabel
-
21-08-2019 - |
Вопрос
Мой CMDIFrameWndEx
производное главное окно фрейма использует CMFCRibbonStatusBar
к которому я добавляю CMFCRibbonLabel
.
Я хотел бы изменить текст этой метки во время выполнения:
m_pLabel->SetText(description);
m_pLabel->Redraw();
Он обновляет только текст, но не прямоугольник, в котором его нужно нарисовать.Поэтому, если исходный текст был слишком коротким, новая строка не будет видна полностью.
Как мне заставить его правильно изменить размер?
Решение 3
Отвечаю еще раз на свой вопрос...
Я решил эту проблему, добавляя и удаляя метку вместо того, чтобы пытаться изменить текст.
Код для добавления метки:
CMFCRibbonLabel* pLabel = new CMFCRibbonLabel(description);
pLabel->SetID(ID_MYLABEL); // ID is 0 by default
m_wndStatusBar.AddDynamicElement(pLabel);
m_wndStatusBar.RecalcLayout();
m_wndStatusBar.RedrawWindow();
Обратите внимание: я устанавливаю идентификатор, чтобы позже позвонить CMFCRibbonStatusBar::RemoveElement()
с этим идентификатором.Звонки в RecalcLayout()
и RedrawWindow()
необходимы для того, чтобы изменения были видимыми.
Код для удаления метки:
if(m_wndStatusBar.RemoveElement(ID_MYLABEL))
{
m_wndStatusBar.RecalcLayout();
m_wndStatusBar.RedrawWindow();
}
Другие советы
Вам не нужно удалять и заново добавлять.Просто позвоните сюда:
m_wndStatusBar.ForceRecalcLayout();
используйте функцию CMFCRibbonStatusBarPane::SetAlmostLargeText