كيف يمكنني تغيير حيوي نص CMFCRibbonLabel
-
21-08-2019 - |
سؤال
وبلدي 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