Как мне динамически изменить текст CMFCRibbonLabel - PullRequest
1 голос
/ 14 мая 2009

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

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

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

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

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

Ответы [ 3 ]

4 голосов
/ 14 июня 2010

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

m_wndStatusBar.ForceRecalcLayout();
1 голос
/ 26 августа 2009

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

0 голосов
/ 15 мая 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();
}
...