الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سلسلة التجارب - التجربة الرابعة

مغلق
بدأه Adel Khayata في 14 أغسطس 2001 · 3 رد · 693 مشاهدة · في المواضيع والدروس
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم.

تجربة اليوم بسيطة شوي:)

وهي كيفية تغيير الخط في ال StatusBar و تغيير بعض خصائص ال Status bar.

و هذه لقطة من البرنامج:

StatusFontPic.jpg

و فكرة البرنامج بسيطة و تعتمد على نوعي المعطيات : LOGFONT و CFont فعندما نريد استعمال خط في أحد الأدوات يمكن تحقيق ذلك عن طريق التعليمات التالية:

LOGFONT m_lf;
CFont m_font;
memset(&m_lf , 0 , sizeof(LOGFONT) ) ;
m_lf.lfHeight = 8 ;
strcpy( m_lf.lfFaceName , "MS Sans Serif" );
m_font.CreateFontIndirect( &m_lf );

(طبعا في البرنامج جعلت المتحولات Members ل CMainFrame و لكن وضعتها في الشيفرة السابقة للتوضيح فقط)

فالتعليمة الاولى تحجز مكانا في الذاكرة للمتحول m_lf من نوع LOGFONT .

و التعليمة الثانية تحدد ارتفاع الخط بعدد النقاط Pixels.

و التعليمة الثالثة تحدد اسم الخط المراد استخدامه.

و التعليمة الرابعة تنشء الخط و تقوم بتحميله.

و بعدها يمكن استعمال هذا الخط في الأدوات ففي حالتنا كتبت :

m_wndStatusbar.SetFont(&m_font);

و الآن عند الضغط على الامر Change Font من القائمة Status BAr كتبت الشيفرة التالية:

CFontDialog dlg(&m_lf,CF_SCREENFONTS);
if (dlg.DoModal() == IDOK )
{
	m_font.DeleteObject();
	if (m_font.CreateFontIndirect( &m_lf ) )
	{
		m_wndStatusBar.SetFont(&m_font);
		RecalcLayout();
	}
}

التعليمة الاولى تصرح عن متحول من CFontDialog و هذا ال Class هو واحد من مجموعة Classes موجودة ضمن MFC و هو يسهل عمليةادخال معلومات الخط و و جعل واجهة اختيار الخط مشتركة بين البرامج .

التعليمة الثانية تقوم باظهار Font Dialog حيث تستطيع اختيار اسم الخط و مؤثراته و حجمه.

التعليمة الثالثة تقوم بازالة معلومات الخط الموجودة حاليا ضمن m_font.

و بنفس الطريقة تم إنشاء و تحميل الخط الجديد.

التعليمة الأخيرة و هي مهمة و هي تطلب من الاطار Frame اعادة توضيع ال Control bars مثل ال Statusbar و Toolbar و ذلك حتى يتسنى لشريط الحالة أن يغير من ارتفاعه إذا كان حجم الخط الجديد كبير.

و بالنسبة لتغيير خصائص ال Status bar يتم ذلك عن طريق التعليمة:

m_wndStatusbar.SetPaneInfo( 0 , nID , SBPS_STRETCH|SBPS_NORMAL , cxWidth );

البارامتر الاول يحدد رقم المنطقة Pane ضمن ال Statusbar المطلوب تغيير خصائصها.

البارامتر الثاني يحدد معرف هذه المنطقة.

البارامتر الثالث يحدد الخصائص المراد تطبيقها على هذه المنطقة و طبعا يمكن الاختيار من ضمن مجموعة كبيرة من الخصائص.

البارامتر الرابع يحدد عرض هذه المنطقة.

شيفرة البرنامج موجودة على الوصلة:

http://arabteam.nicmatic.com/adel/StatusBarFont.zip

مع التحيات.

#2

يعطيك العافية أخي عادل على هذه التجربة ..

حبيت أن أعقب بتعليق بسيط للغاية .. أنت لم تعالج حالة عرض الثلاث مناطق التي يتم اظهار حالة الأزرار CapsLock و ScrollLock و NumLock ..

إن ارتفاع ال statusbar يتغير بشكل آلي عتد تغيير الخط أما العرض فلا يتغير ، لذلك يجب التغيير اليدوي ..

لاحظ كيفية تعامل الكود السابق معهم :

adelstatusbar1.gif

أما بعد الاضافة سوف تصبح الصورة كالتالي :

adelstatusbar2.gif

لذلك قمت باضافة روتين إلى الملف MainFrm.cpp

يقوم بهذه العملية وهو في الكود التالي :

void CMainFrame::ReCalcKbdIndicatorWidth()

{

UINT nStyle;

int cxOldWidth, cxNewWidth;

int nIndSize = sizeof(indicators) / sizeof(UINT);

// Calculate the new width of the keyboard pane info

//

TCHAR str[4] = _T("HHH");

CClientDC dc(this);

CFont *pOldFont = (CFont *)dc.SelectObject(&m_font);

cxNewWidth = dc.GetTextExtent(str, 3).cx;

// Assume that the last three indicators are the keyboard indicators

//

for (int i = nIndSize - 3; i :)

Coding on the Cloud and for the Cloud!

My Blog

#3

شكرا لك هاني على هذه الملاحظة:)

أنا ماانتبهت على هذه المنطقة التي تكلمت عنها:)

#4

قديم - مفيد جدا

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…