Как мне динамически изменять текст CMFCRibbonLabel

В моем CMDIFrameWndEx производном главном окне фрейма используется CMFCRibbonStatusBar, к которому я добавляю CMFCRibbonLabel.

Я бы хотел изменить текст этой метки во время выполнения:

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

Он обновляет только текст, но не прямоугольник, в котором его нужно нарисовать. Поэтому, если исходный текст был слишком коротким, новая строка не будет видна полностью.

Как мне заставить его правильно изменить размер?


person foraidt    schedule 14.05.2009    source источник


Ответы (3)


Удалять и добавлять заново не нужно. Просто назовите это:

m_wndStatusBar.ForceRecalcLayout();
person demoncodemonkey    schedule 14.06.2010

используйте функцию CMFCRibbonStatusBarPane :: SetAlmostLargeText

person Community    schedule 26.08.2009

Отвечая на свой вопрос снова ...

Я решил проблему, добавляя и удаляя метку вместо того, чтобы пытаться изменить текст.

Код для добавления метки:

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();
}
person foraidt    schedule 15.05.2009