Pregunta

Mi CMDIFrameWndEx derivado de la ventana de marco principal utiliza un CMFCRibbonStatusBar a lo que puedo añadir un CMFCRibbonLabel.

Me gustaría cambiar el texto de esta etiqueta en tiempo de ejecución:

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

Sólo actualiza el texto pero no el rectángulo en el que la dibuja.Así que si el texto original era demasiado corto, la nueva cadena no será visible por completo.

Cómo hago para cambiar el tamaño correctamente?

¿Fue útil?

Solución 3

Respondiendo a mi propia pregunta de nuevo...

He trabajado en torno a la cuestión por la adición y eliminación de la etiqueta en lugar de tratar de cambiar el texto.

El código para añadir la etiqueta:

CMFCRibbonLabel* pLabel = new CMFCRibbonLabel(description);
pLabel->SetID(ID_MYLABEL); // ID is 0 by default

m_wndStatusBar.AddDynamicElement(pLabel);
m_wndStatusBar.RecalcLayout();
m_wndStatusBar.RedrawWindow();

Tenga en cuenta que estoy configuración de ID así que puedo llamar más tarde CMFCRibbonStatusBar::RemoveElement() con ese ID.Las llamadas a RecalcLayout() y RedrawWindow() son necesarios para hacer los cambios visibles.

Código para la eliminación de la etiqueta:

if(m_wndStatusBar.RemoveElement(ID_MYLABEL))
{
    m_wndStatusBar.RecalcLayout();
    m_wndStatusBar.RedrawWindow();
}

Otros consejos

No es necesario quitar y volver a agregar. Sólo tiene que llamar al siguiente:

m_wndStatusBar.ForceRecalcLayout();

utilizar la función CMFCRibbonStatusBarPane :: SetAlmostLargeText

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top