سؤال

وبلدي 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() مع أن ID. وهناك حاجة إلى المكالمات إلى 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