Вопрос

Мой 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top