المساعدة - البحث - قائمة الأعضاء - التقويم
نسخة كاملة: سلسلة التجارب - التجربة الثالثة
برمجة - شبكات - كمبيوتر - منتديات الفريق العربي للبرمجة > منتديات لغات البرمجة العام > منتدى مبرمجي C و ++C و C++.NET > أرشيف منتدى قسم السي ++
Adel Khayata
السلام عليكم.
التجربة الثالثة تتكلم عن كيفية تحريك أيقونة البرنامج regular_smile.gif
طبعا عمابة التحريك تتم بتغيير أيقونة البرنامج كل فترة زمنية قصيرة بحيث تعطي الانطباع بأن الأيقونة تتحرك في مكانها و قد استخدمت مجموعة من الأيقونات من مكتبة Visual C++ و قمت باستعمالها و هذه الايقونات هي عبارة عن لقطات مختلفة للقمر و عملية تغيير هذه الصور بشكل متتابع توحي بتغير شكل القمر من بداية الشهر القمري و حتى نهايتهregular_smile.gifregular_smile.gif
فكرة البرنامج بسيطة و تعتمد على المؤقت Timer و في كل مرة يتم فيها تنفيذ تابع المؤقت يتم تغيير الأيقونة و تحميل الايقونة التالية وعند الوصول إلى آخر أيقونة يتم تحميل الايقونة الاولى
طبعا يجب اولا اضافة مجموعة الايقونات الى المشروع و ذلك عن طريق الامر Import من ضمن Resource View و من ثم يتم عمل Override للتابع OnTimer و هو تابع المؤقت و في هذا التابع عرفت مصفوفة تحتوي على معرفات Ids الايقونات كالتالي:
[code2]
static int icons[]=
{IDI_ICON1,IDI_ICON2,IDI_ICON3,IDI_ICON4,IDI_ICON5,IDI_ICON6,IDI_ICON7,IDI_ICON8};
[/code2]
و من ثم قمت باستخدام متحول ستاتيكي من أجل معرفة رقم الايقونة التي يجب تحميلها في كل مرة يتم فيها تنفيذ تابع المؤقت و هو:
[code2]
static long index = 0;
[/code2]
و من ثم قمت بحساب عدد الايقونات الموجودة ضمن المصفوفة icons كما يلي:
[code2]
long Num = sizeof(icons)/sizeof(icons[0]) ;
[/code2]
و من ثم قمت بكتابة التعليمة
[code2]
LoadNewIcon( icons[index++ % Num] );
[/code2]
التي تقوم باستدعاء التابع LoadNewIcon() الذي قمت باضافته ووظيفته تحميل الايقونة المحددة بالبارامتر
و في التابع LoadNewIcon() قمت بتحميل الايقونة الجديدة و حفظ ال Handle
[code2]
HICON hIconNew = AfxGetApp()->LoadIcon(nIconID);
[/code2]
و أيضا ال Handle الخاص بالايقونة القديمة :
[code2]
HICON hIconOld = (HICON) GetClassLong(m_hWnd,GCL_HICON);
[/code2]
و من ثم قمت بازالة الايقونة القديمة من الذاكرة و تسجيل الايقونة الجديدة كأيقونة للبرنامج و من ثم طلب Redraw أي اعادة رسم لكي تظهر الايقونة الجديدة في الشيفرة التالية
[code2]
DestroyIcon( hIconOld);
SetClassLong(m_hWnd,GCL_HICON,(long)hIconNew);
RedrawWindow(NULL,NULL);
[/code2]
وThat's it regular_smile.gifregular_smile.gif
ويمكنكم تحميل شيفرة البرنامج من الوصلة التالية :
http://arabteam.nicmatic.com/atassi/adel/A...AnimateIcon.zip
مع التحيات.
هاني الأتاسي
ممتاز أخي عادل ..

بالنسبة للمصفوفة ال ID أفضل أن توضع في متحول member .. وحاول أن تقلل من استخدام المتحولات العامة كلما أمكن ..

في تجربتك هذه فكرة رائعة وهي كيفية تغيير المعلومات المسجلة عن النافذة في الويندوز . هذه المعلومات التي تم تسجيلها باستخدام AfxRegisterWndClass أو RegisterClass ..

طبعا في برنامجك تم استخدام العديد من ملفات الأيقونات . حيث لكل أيقونة ملف .. طبعا هناك طريقة أخرى أكثر اقتصادية وهو وضع جميع الأيقونات بجوار بعضها البعض في ملف واحد من نوع BMP ومن ثم وضع هذا الملف فقط في ال Resource ومن ثم استخدام CImageList في تحميل هذه الصورة من ال resource . ومن ثم استخدام التابع ExtractIcon في CImageList مع تمرير رقم الصورة له .. هكذا برأي أفضل من أجل تنظيم البرنامج .. وأيضا من أجل حجم البرنامج التنفيذي فلاحظ أن حجم جميع ملفات الأيقونات هو 9 كيلو ، ولكن حجم صورة واحدة BMP سوف تكون أصغر بكثير أي حوالي 4 كيلو .. regular_smile.gif

فما رأيك ..؟؟ regular_smile.gif

ويعطيك العافية أخي عادل ولكن في المرات القادمة حاول تضع صورة لموضوعك أو تجربتك لأن الصورة هي التي تجذب القارئ ..
Adel Khayata
السلام عليكم.
شكرا لك أخي هاني على ملاحظاتكregular_smile.gif
أنا دائما أحاول في التجارب التي اكتبها أن اركز على الفكرة الرئيسية للبرنامج بدون أن أدخل في طرق متقدمة من أجل انجاز الفكرة يعني انا كان عندي ايقونات جاهزة لذلك استعملتها مباشرة . بس انت عطيتني فكرة حلوة لتجربة جديدة و هي كيفية وضع مجموعة من الصور في ملف صورة واحدة و من ثم استخدام CImageList للحصول على هذه الصور منفردة.
بالنسبة لصورة البرنامج فانت كما رأيت البرنامج ليس فيه ما يستاهل عرض صورة لهregular_smile.gifregular_smile.gif و انا دائما أحاول وضع صور للبرامج التي انفذها عندما أضعها في المنتدى.
بس معليش انت بتمونregular_smile.gifregular_smile.gif
ميييييييية السلاااااامةregular_smile.gifregular_smile.gif
مع التحيات.
هذه "نسخة - خفيفة" من محتويات الرئيسية للإستعراض الكامل مع المزيد من الصور والخيارات الرجاء إضغط هنا.
Invision Power Board © 2001-2009 Invision Power Services, Inc.