كيف تصمم شاشة توقف باستخدام فيجوال سي++ ج1
_________________________________________________________
BOOL m_bTrue;
CBitmap* m_bmOld;
POINT m_ptCorIn;
POINT m_ptVerIn;
POINT m_ptVerOut;
POINT m_ptHorIn;
POINT m_ptHorOut;
int m_iXSpeed;
int m_iXStart;
POINT m_ptCorPos;
int m_iYTime;
int m_iXTime;
CSize m_szConstDcSz;
CDC m_dcConst;
_________________________________________________________
يمكنك نسخها كلها من هنا ولصقها في اي قسم public من تعريف الصف المذكور.
الآن اين ستبدأ الحركة لنضعها مبدأيا في دالة وسميها IntialMove() ضعها في الصف CDel19Dlg
وعدلها لتصبح بالشكل: في الدالة OnInitDialog في الصف نفسه
حرر الدالة السابقة مضيفا اليها الاسطر التالية بعد عبارة todo// لتصبح بالشكل :
C++ كود
_________________________________________________________
_________________________________________________________
يـتبع
شاشة التوقف هي عبارة عن برنامج EXE تقريبا عادي يقوم نظام التشغيل بتشغيله عند مرور وقت محدد بدون لمس الجهاز
مثلا لو اخترت 5 دقائق لتشغيل شاشة التوقف ثم تركت الجهاز لمدة 5 دقائق
سيقوم الجهاز بتشغيل شاشة التوقف بعد 5 دقائق ثم وبعد 5 دقائق اخرى سيشغلها مرة ثانية ثم ثالثة وهكذا
وهكذا يتضح الفرق الأول بين البرنامج العادي وشاشة التوقف
ففي شاشة التوقف يجب ان تضع شيفرة في بداية تشغيل البرنامج لكي تفحص اذا كانت شاشة التوقف شغالة ولا لا
اذا ما كانت شغالة تتابع البرنامج اما اذا كانت شغالة فعليك عدم المتابعة حتى لا تعمل مرة اخرى وتستهلك الذاكرة وتخرب العرض
* - يعني هل استطيع ببساطة تغيير لاحقة برنامج EXE إلى SCR ويصبح البرنامج شاشة توقف ؟
في الواقع نعم اذا عملت ذلك فقط فسيعمل البرنامج كشاشة توقف لكن عند مرور مدة الانتظار سيعمل مرة ثانية وثالثة وهكذا
جرب ذلك مع اي برنامج لديك
حول اللاحقة من exe الى scr ثم انقر على البرنامج بالزر الأيمن واختر install ثم افتح خصائص العرض واذهب الى شاشة التوقف
وستكتشف هنا بنفسك الفرق الثاني بين البرنامج العادي وشاشة التوقف
اين؟
عندما تضغط على زر اعدادات أو setting ستجد ان شاشة التوقف التي هي برنامج بدأت بالعمل
اذا ما هو الفرق الثاني
الفرق الثاني انك يجب ان تعدل في بداية تشغيل البرنامج ليفحص بارامترات التشغيل ويعرف من الذي يستدعيه
فاذا كان الاستدعاء من النظام للتشغيل او للعرض دعه يعمل والا اذا كان لاجل تغيير الاعدادات فعليك اظهار نافذة لتغيير الاعدادات
والفرق الثالث سيظهر بعد تشغيل البرنامج على شكل شاشة توقف
ستجد انه لن يتوقف عند تحريك الفارة
وهذه يجب حلها بوضع اوامر لايقاف البرنامج عند قدح اي حدث من المستخدم كتحريك الفارة او الضغط على زر في لوحة المفاتيح
وهكذا تصبح شاشة التوقف جاهزة
الآن دعونا نصمم شاشة توقف بسيطة تظهر دائرة تتحرك في الشاشة كانها كرة مثلا
ولاجل ذلك اخترت العمل في MFC مع انه يفضل العمل بدون استخدام الـ MFC لشاشة التوقف لكني اخترتها لسهولة توضيحها
وايضا لن نعمل هنا الآن نافذة اعدادات لان وضعها سيتطلب حفظ الاعدادات التي اختارها المستخدم في الريجستري مثلا لاستخدامها دائما
وهذا ليس الموضوع الذي اخترته الآن
ايضا احب قبل ان ابدأ ان اشير الى ان الطريقة التي ستجدها تحت ليست هي الافضل بشكل عام
فالافضل فصل النافذة الرئيسية لساسة التوقف عن نافذة الاعدادات بتعريف متغير من نوع CWnd مثلا وذلك يسهل عليك عرض شاشة التوقف في اي مكان
وباي حجم خصوصا الحجم المصغر
وكذلك يساعدك على التقاط الاحداث الناتجة عن تحريك الفارة بدون ما تصادر تحركات الفارة
لكني هنا قررت التركيز على النقاط الرئيسية
ووضعت هذه الملاحظة لمن هم عارفين بالموضوع ويمكن اعرف مني أكيد لكي لا يفهموني غلط
وارحب بمشاركاتهم وبالامثلة التي عندهم ايضا
ايضا اريد ان اشير الى انه قد لا يكون هناك كبير فائدة سوقية لشاشة التوقف الا ان تكون اعلانية مثلا او ما الى هنالك
لكن مع ذلك فالموضوع قد يكون ممتع للبعض ممن يحبون عمل الاشياء بايديهم
طولت عليكم بالكلام
توكلنا على الله :
بسم الله الرحمن الرحيم
شغل برنامج فيجوال ستديو اختر الأمر new فيظهر معالج انشاء مشروع جديد ومنه اختر انك تريد عمل مشروع من نوع MFC
وسميه Del19 (لماذا هذا الاسم لا اعرف انها مجرد عادة مشيت عليها في تسمية برامجي واعلم انها عادة غلط لان الاسم من الافضل ان يشير الى محتوى البرنامج)
ثم اضغط next
في النافذة التالية اختر انك تريد انشاء برنامج من نوع dialog ثم اضغط Finesh مباشرة
سيفتح امامك نافذة تصميم صندوق الحوار
قم بمسح النص الموجود بوسطها وعدل من حجمها قليلا ثم اتركها
الآن دعونا نصمم الحركة المطلوبة
لا اعلم هنا هل اشرح كيفية تصميم الحركة ام نعتمد على انك تعرف ذلك سنعتمد انك تعرف ذلك وندع شرحها لعند السؤال عند ذلك
عموما من أجل الحركة اضف المتغيرات التالية الى الصف CDel19Dlg :
C++ كود
مثلا لو اخترت 5 دقائق لتشغيل شاشة التوقف ثم تركت الجهاز لمدة 5 دقائق
سيقوم الجهاز بتشغيل شاشة التوقف بعد 5 دقائق ثم وبعد 5 دقائق اخرى سيشغلها مرة ثانية ثم ثالثة وهكذا
وهكذا يتضح الفرق الأول بين البرنامج العادي وشاشة التوقف
ففي شاشة التوقف يجب ان تضع شيفرة في بداية تشغيل البرنامج لكي تفحص اذا كانت شاشة التوقف شغالة ولا لا
اذا ما كانت شغالة تتابع البرنامج اما اذا كانت شغالة فعليك عدم المتابعة حتى لا تعمل مرة اخرى وتستهلك الذاكرة وتخرب العرض
* - يعني هل استطيع ببساطة تغيير لاحقة برنامج EXE إلى SCR ويصبح البرنامج شاشة توقف ؟
في الواقع نعم اذا عملت ذلك فقط فسيعمل البرنامج كشاشة توقف لكن عند مرور مدة الانتظار سيعمل مرة ثانية وثالثة وهكذا
جرب ذلك مع اي برنامج لديك
حول اللاحقة من exe الى scr ثم انقر على البرنامج بالزر الأيمن واختر install ثم افتح خصائص العرض واذهب الى شاشة التوقف
وستكتشف هنا بنفسك الفرق الثاني بين البرنامج العادي وشاشة التوقف
اين؟
عندما تضغط على زر اعدادات أو setting ستجد ان شاشة التوقف التي هي برنامج بدأت بالعمل
اذا ما هو الفرق الثاني
الفرق الثاني انك يجب ان تعدل في بداية تشغيل البرنامج ليفحص بارامترات التشغيل ويعرف من الذي يستدعيه
فاذا كان الاستدعاء من النظام للتشغيل او للعرض دعه يعمل والا اذا كان لاجل تغيير الاعدادات فعليك اظهار نافذة لتغيير الاعدادات
والفرق الثالث سيظهر بعد تشغيل البرنامج على شكل شاشة توقف
ستجد انه لن يتوقف عند تحريك الفارة
وهذه يجب حلها بوضع اوامر لايقاف البرنامج عند قدح اي حدث من المستخدم كتحريك الفارة او الضغط على زر في لوحة المفاتيح
وهكذا تصبح شاشة التوقف جاهزة
الآن دعونا نصمم شاشة توقف بسيطة تظهر دائرة تتحرك في الشاشة كانها كرة مثلا
ولاجل ذلك اخترت العمل في MFC مع انه يفضل العمل بدون استخدام الـ MFC لشاشة التوقف لكني اخترتها لسهولة توضيحها
وايضا لن نعمل هنا الآن نافذة اعدادات لان وضعها سيتطلب حفظ الاعدادات التي اختارها المستخدم في الريجستري مثلا لاستخدامها دائما
وهذا ليس الموضوع الذي اخترته الآن
ايضا احب قبل ان ابدأ ان اشير الى ان الطريقة التي ستجدها تحت ليست هي الافضل بشكل عام
فالافضل فصل النافذة الرئيسية لساسة التوقف عن نافذة الاعدادات بتعريف متغير من نوع CWnd مثلا وذلك يسهل عليك عرض شاشة التوقف في اي مكان
وباي حجم خصوصا الحجم المصغر
وكذلك يساعدك على التقاط الاحداث الناتجة عن تحريك الفارة بدون ما تصادر تحركات الفارة
لكني هنا قررت التركيز على النقاط الرئيسية
ووضعت هذه الملاحظة لمن هم عارفين بالموضوع ويمكن اعرف مني أكيد لكي لا يفهموني غلط
وارحب بمشاركاتهم وبالامثلة التي عندهم ايضا
ايضا اريد ان اشير الى انه قد لا يكون هناك كبير فائدة سوقية لشاشة التوقف الا ان تكون اعلانية مثلا او ما الى هنالك
لكن مع ذلك فالموضوع قد يكون ممتع للبعض ممن يحبون عمل الاشياء بايديهم
طولت عليكم بالكلام
توكلنا على الله :
بسم الله الرحمن الرحيم
شغل برنامج فيجوال ستديو اختر الأمر new فيظهر معالج انشاء مشروع جديد ومنه اختر انك تريد عمل مشروع من نوع MFC
وسميه Del19 (لماذا هذا الاسم لا اعرف انها مجرد عادة مشيت عليها في تسمية برامجي واعلم انها عادة غلط لان الاسم من الافضل ان يشير الى محتوى البرنامج)
ثم اضغط next
في النافذة التالية اختر انك تريد انشاء برنامج من نوع dialog ثم اضغط Finesh مباشرة
سيفتح امامك نافذة تصميم صندوق الحوار
قم بمسح النص الموجود بوسطها وعدل من حجمها قليلا ثم اتركها
الآن دعونا نصمم الحركة المطلوبة
لا اعلم هنا هل اشرح كيفية تصميم الحركة ام نعتمد على انك تعرف ذلك سنعتمد انك تعرف ذلك وندع شرحها لعند السؤال عند ذلك
عموما من أجل الحركة اضف المتغيرات التالية الى الصف CDel19Dlg :
C++ كود
_________________________________________________________
BOOL m_bTrue;
CBitmap* m_bmOld;
POINT m_ptCorIn;
POINT m_ptVerIn;
POINT m_ptVerOut;
POINT m_ptHorIn;
POINT m_ptHorOut;
int m_iXSpeed;
int m_iXStart;
POINT m_ptCorPos;
int m_iYTime;
int m_iXTime;
CSize m_szConstDcSz;
CDC m_dcConst;
_________________________________________________________
يمكنك نسخها كلها من هنا ولصقها في اي قسم public من تعريف الصف المذكور.
الآن اين ستبدأ الحركة لنضعها مبدأيا في دالة وسميها IntialMove() ضعها في الصف CDel19Dlg
وعدلها لتصبح بالشكل: في الدالة OnInitDialog في الصف نفسه
حرر الدالة السابقة مضيفا اليها الاسطر التالية بعد عبارة todo// لتصبح بالشكل :
C++ كود
_________________________________________________________
// TODO: Add extra initialization here
srand((unsigned)time(NULL));
m_szConstDcSz.cx=5;
m_szConstDcSz.cy=30;
m_iXTime=(rand() % 50);
m_ptCorPos.x= (rand() % 700) + 5;
m_iXSpeed=5;
m_iXStart=m_ptCorPos.x - 5 * m_iXTime + 5;
m_iYTime=0;
m_ptCorPos.y=520;
CClientDC dc(NULL);
m_dcConst.CreateCompatibleDC(&dc);
m_bTrue=TRUE;
CBitmap bit;
bit.CreateCompatibleBitmap(&dc,50+2*m_szConstDcSz. cx,50+2*m_szConstDcSz.cy);
m_bmOld=m_dcConst.SelectObject(&bit);
m_dcConst.BitBlt(0,0,50+2*m_szConstDcSz.cx,50+2*m_ szConstDcSz.cy,&dc,m_ptCorPos.x , m_ptCorPos.y,SRCCOPY);
SetTimer(IDC_TIMER,50,NULL);
return TRUE; // return TRUE unless you set the focus to a control
srand((unsigned)time(NULL));
m_szConstDcSz.cx=5;
m_szConstDcSz.cy=30;
m_iXTime=(rand() % 50);
m_ptCorPos.x= (rand() % 700) + 5;
m_iXSpeed=5;
m_iXStart=m_ptCorPos.x - 5 * m_iXTime + 5;
m_iYTime=0;
m_ptCorPos.y=520;
CClientDC dc(NULL);
m_dcConst.CreateCompatibleDC(&dc);
m_bTrue=TRUE;
CBitmap bit;
bit.CreateCompatibleBitmap(&dc,50+2*m_szConstDcSz. cx,50+2*m_szConstDcSz.cy);
m_bmOld=m_dcConst.SelectObject(&bit);
m_dcConst.BitBlt(0,0,50+2*m_szConstDcSz.cx,50+2*m_ szConstDcSz.cy,&dc,m_ptCorPos.x , m_ptCorPos.y,SRCCOPY);
SetTimer(IDC_TIMER,50,NULL);
return TRUE; // return TRUE unless you set the focus to a control
_________________________________________________________
يـتبع
الخميس ديسمبر 02, 2010 11:42 am من طرف فافي
» ارتداء الستيانه
الثلاثاء يونيو 29, 2010 11:34 am من طرف سمسم العراقي
» انضر الى اجمل ما خلقه الله سبحانه وتعالى
الأربعاء ديسمبر 02, 2009 1:19 pm من طرف سمسم العراقي
» آخر صور للفنان رضى العبد الله
السبت أكتوبر 31, 2009 10:28 am من طرف فافي
» سر دمعتي .......
الجمعة يوليو 17, 2009 6:50 am من طرف mylove
» كليب كامل يوسف ^^ عزابي ^^ حصرياًَ بس مني
الثلاثاء يوليو 14, 2009 1:34 pm من طرف فافي
» احلى رقصة بالعالم ارجو الرد.....
السبت يوليو 11, 2009 7:52 am من طرف فافي
» سؤال يطرح نفسه بقوة ؟؟؟؟؟
الجمعة يوليو 10, 2009 6:34 pm من طرف سمسم العراقي
» طفل في الهند له ذيل
الجمعة يوليو 10, 2009 6:30 pm من طرف سمسم العراقي