شـبـكــة عـمّـــار
إخبارية - ترفيهية
- تعليمية



جديد الصور
جديد الأخبار
جديد المقالات


جديد الصور

جديد البطاقات

جديد الصوتيات

المتواجدون الآن


تغذيات RSS

2012-08-15 06:59

هذا الدرس سنتعلم فيه كيفية عمل الDialogBox أو مشروعنا من نوع MFC Application Dialog base دائما فى المقدمة أو Always in top .


هذ بالطبع بالأضافة الى أننا سنتعلم أيضا تفعيل هذ الخاصية أو ألغاء تفعيلها بمعنى أننا سنتحكم فى ال Dialog أذا كنا نريده دائما فى المقدمة أى أعلى كل التطبيقات العاملة أم لا .


ولنكف عن الكلام ولنبدأ الأن .


ملحوظة


ليعذرنى من هو متمكن من لغة الفيجوال سى من اننى سأشرح بالتفصيل لمن هو مازال مبتدئ ولكل من هو متمكن يمرر الخطوات التى يعرفها ويكمل الأجزاء التى يجدها جديده بالنسبة له


أولا قم بتشغيل بيئة الفيجوال سى من قائمة Start ثم Programs (فى ويندوز مى او 98 ) أو AllPrograms (فى ويندوز أكس بى) ومنها أختار Microsoft Visual Studio 6.0 ومنها Microsoft Visual C++ 6.0


وسيبدا البرنامج فى العمل حتى تحصل على بيئة الفيجوال سى كما بهذا الشكل





شكل(1 )


من قائمة File أختار New (أو أضغط Ctrl+N ) لتبدأ مشروع جديد .





شكل (2 )


سيفتح لك New Projects من القئمة التى فى اليسار أختار MFC AppWizard(EXE) وبداخل مربع الكتابة أسفل Project nameفى اليمين أكتب أسم المشروع (بالطبع اى أسم يحلو لك ولكن سأفترض انه Alwaysontop)


ملحوظة


يوجد أسفل اسم المشروع خانة لتحديد مكان تخزين المشروع Location حيث ان بيئة الفيجوال سى تحفظ المشروع فى بداية أنشائه وأى تطور فيه أو تحديث يحدث أما ان تحفظه من قائمة File ثم Save أو فى حالة عمل Buildسيحفظ تلقائى


بعد ان البيانات هنا نضغط على زر OK


لنبدأ مع المعالج فى تكوين البرنامج كل ما عليك فعله هو اختيار الأشياء التى تريد وضعها فى البرنامج كما سنرى أو يمكنك اختيار Finishلترك أعدادات البرنامج كما هى


ولكن دعنا نمشى خطوة خطوة





شكل (3 )


فى الخطوة الأولى


سيسألك المعالج عن نوع البرنامج التى تريد أنشائه


ويعطيك ثلاث اختيارات


أما Single document اى برنامج ذو وثيقة واحدة مثل برنامج NotePad فى الويندوز والتى لا يسمح بفتح أكثر من وثيقة فى البرنامج الواحد ولكن يمكنك فتح البرنامج أكثر من مرة كل مرة بوثيقة


أو الأختيار الثانى Multiple documents أى برنامج متعدد الوثائق كبرنامج MS Word والتى يسمح لك فتح اكثر من وثيقة فى البرنامج الواحد


أما الأختيار الثالث وهو الأختيار التى سنعمل عليه والتى يعتبر المفضل بالنسبة لى وبالنسبة لمعظم مستخدمى هذه اللغة لبساطته وممكن أيضا التحكم فيه بسهولة من حيث الشكل والخصائص وهو Dialog based أو مربعات الحوار وهذه مثل النافذة التى تحمل الخصائص فى أى برنامج


كما ذكرت أننا سنختار الأختيار الثالث


ويوجد أيضا فى هذه النافذة سؤال عن نوع اللغة التى ستستخدمها فى مصدر البرنامج سنتركها الأنجليزيه وسأشرح فيما بعد كيفية التحويل الى اللغة العربية لتعمل بلا أخطاء على اى جهاز


سنضغط على Next





شكل(4 )


فى الخطوة الثانية سيسألك عن المميزات التى تريد أضافتها فى البرنامج أتركها كما هى


ولكن يمكنك أضافة Context-sensitive Help وهوملف المساعدة للبرنامج التى ستكتبه ولكن لن أتطرق أيها الأن


ملاحظة


الأختيار About Box هو المسئول عن تكوين نافذة لتوضيح كاتب البرنامج سواء كان فرد او شركة ألخ


فى أسفل النافذة يوجد Please enter a title for your dialog وهى المسئولة عن الأسم التى سيظهر فى شريط العنوان للبرنامج كذلك فى شريط العنوان للويندوز


يمكنك تغييرها الى Always On Top كذلك يمكنك تغييرها من داخل البرنامج أثناء برمجته


والأن أضغط على Next أو Finish بالطبع لو أردت أنها المعالج بهذه الخصائص والدخول الى كتابة الكود





شكل(5 )


فى هذه الخطوة سيخبرك انك تستعمل مكتبة MFC Standard وسيسألك عن هل تريد توليد تعليقات فى الملفات


والأن الى أهم سؤال فى هذه النافذة وهو ماذا تريد أستخدامه فى مكتبة MFC Library


وفيها أختياران


الأول As ashared Dll وهو الأختيار البدائى وهو ما سنختاره ومعناه أن ملفات الDll المشتركه بين البرنامج ونظام التشغيل ستترك لنظام التشغيل أى انها موجوده فيه ولا تخف فى موجوده فى جميع انظمة التشغيل وميزته انه سيعطى لك برنامج حجمه صغير بالمقارنه بالأختيار الأخر


الثانى As statically linked library وهو ربط الملفات مع البرنامج وبالطبع سيجعل حجم البرنامج كبير


والأن أضغط على Next





شكل(6 )


والأن مع أخر خطوة والتى سيبين لك المعالج عن الأصناف التى ستستخدم داخل البرنامج ولن تجد ألا Finish ولن تجد Next أضغط على Finish





شكل(7 )


والتى سيعطى لك معلومات عن مشروعك بناء على الأختيارات التى أخترناها أضغط على Ok للدخول على بيئة التصميم





شكل(8 )


أضغط نقره يسرى على TODO: Place dialog controls here ثم أضغط على زرDelete فى لوحة المفاتيح لحذف هذه الجملة والتى تعتبر كملاحظة لا نحتاجها داخل البرنامج


ولشرح بيئة التصميم


فى يمين الشاشة يوجد شريط أدوات التصميم من أزار و صناديق اختيار .... ألخ وفى المنتصف منطقة العمل والتى سنصممها وهى النافذه التى سيظهر برنامجك بها فى النهاية أما على يسار الشاشة يوجد ثلاث أختيارات ResourceView المسئولة عن أظهار مصادرك من مربع حوار وصور ألخ و ClassView والتى ستظهر الأصناف التى ستعمل بها أو للتبسيط الدوال المستعملة داخل البرنامج وFileViewوالتى ستظهر لك ملفات الأكواد داخل برنامجك


والأن نقوم بأضافة Check Box الى منطقة العمل ونحدد حجمه ومكانه كما يمكننا تحديد حجم منطقة العمل كما هو موضح بالأشكال الأتية :





شكل(9 )





شكل(10 )


وسنجد أن برنامجنا لا يقرأ اللغة العربية ولكنه سيظهر لك كلمات غريبه كهذه مثلا " " ÏÇÆãÇ ÈÇáÃÚáì عند كتابة أى كلمة عربية ولحل هذه المشكلة


تاكد من أنك على ResourceView ثم أنقر على Alwaysontop resources نقره مزدوجة ثم على Dialog أيضا نقره مزدوجة ثم أنقر كليك يمين على IDD_ALWAYSONTOP_DIALOG وأختار Properties ستفتح لك نافذةDialog Properties ومن Language أختار اللغة Neutral(Sys. Default) كى يقرأ اللغة العربية ثم أضغط Enter من لوحة المفاتيح





شكل(11 )





شكل(12 )


نقوم بالنقر كليك يمين على الCheck Boxونختار من القائمة التى ستظهر لنا Properties


سيظهر لنا مربع Check Box Properties وفيه من ID نغير الأسم الى IDC_TOP ومن Caption نغير العنوان الى دائما بالأعلى





شكل(13 )





شكل(14 )


والأن لماذا أخترنا Check Box والسبب أن هذه الدالة لها حالتين حالة عند وجود علامة صح بجوارها وحالة أخرى عن عدم وجود هذه العلامة بجوارها فمثلا عند وجود علامة الصح هذا معناه أن البرنامج سيكون أعلى كل التطبيقات بمعنى أن أى برنامج سيعمل سيكون برنامجنا فوقه (ظاهر على الشاشة دائما )


أما فى الحالة الأخرى فأن أى برنامج أخر سيعمل بعد برنامجنا سيكون هو بالأعلى .


والأن يجب أن نعطى لأداة الCheck Box أسم متغيير من أجل حساب هل الأداة عاملة (بجوارها علامة صح) أم لا هذا من خلال النقر نقرتين (Double Click )+الضغط على )Ctrl) فى نفس الوقت أى Ctrl+(Left mouse button Double Click) أو من طريق أخر


أضغط على (Ctrl+W) من لوحة المفاتيح لتفتح MFC ClassWizard ثم تأكد أنك على Member Variables وأختار IDC_TOP من Control IDs ثم أضغط على زر Add Variables


ستفتح لك نافذة Add Member Variable ثم أدخل فى خانة Member variable name أسم متغير وليكن m_top وتأكد من أنه من النوع Value بداخل Category وهذه القيمة من نوع BOOL بداخل Variable type ثم أضغط على OK لتعود الى بيئة العمل أنظر الأشكال





شكل(15 )





شكل(16 )





شكل(17 )


وبهذا تكون الأداة جاهزة للعمل ولكن يتبقى لنا الكود ..


والأن أنقر كليك مزدوجة أو Double click على ال Check Box من أجل أضافة دالته الى الكود ثم أضغط على Ok أو من طريق اخر أضغط على (Ctrl+W) من لوحة المفاتيح لتفتح MFC Class Wizard ثم تأكد انك على Message Maps





شكل(18 )





شكل(19 )


ملاحظة


يجب أن تتاكد من أن Class name هو CAlwaysontopDlg لأن فى هذا البرنامج يوجد


CAlwaysontopDlg و CAlwaysontopApp و CAboutDlg وأى واحدة فيهم غير CAlwaysontopDlg ستؤدى الى فشل البرنامج أى عدم الحصول على الهدف المطلوب


ثم أختار IDC_TOP من Object IDs ومن ال Messages أختار BN_CLICKED ثم أضغط على زر Add Function لأضافة الدالة الى الكود ثم أضغط على OK


كما هو بالشكل





شكل(20 )


ثم أضغط على Edit Code سينقلك الفيجوال سى الى المنطقة التى سنكتب فيها الكود والى المكان التى ستكتب الكود فيه بالتحديد


ملاحظة


لو فقدت مكان أضافة الكود تأكد من انك بداخل الملف AlwaysontopDlg وأبحث عن الدالة void CAlwaysontopDlg::OnTop


للوصول الى الملف AlwaysontpDlg من FileView أنظر أول الدرس لمعرفة ما هى FileView فى حالة نسيانها أنقر على Alwaysontop files نقره مزدوجه ثم أنقر على Source files نقره مزدوجة أيضا ثم على AlwaysontopDlg.cpp نقره مزدوجه ليفتح لك ملف الكود وأبحث بداخله عن دالة void CAlwaysontopDlg::OnTop()


قم بمسح السطر TODO: Add your control notification handler code here// لأنه عباره عن ملاحظة أن هذا المكان لأضافة الكود لهذه الأداة


ثم أضف الكود التالى





الشكل(21 )





الشكل(22 )


ملاحظة


أضف السطور التى باللون الأحمر فقط لأن باقى الأسطر ستجدها مكتوبه


ثانيا أأسف لأطالة الدرس ولكنى أريد أن يتعلمه حتى الذى لا يعرف شئ عن الفيجوال سى


والأن لحظة الأكود اللحظة التى ينتظرها كل من المبتدئ والمتوسط والمتقدم فى الفيجوال سى


void CAlwaysontopDlg::OnTop()


{


CRect rect;


GetWindowRect(rect);


UpdateData(TRUE);


if(m_top==TRUE)


::SetWindowPos(


m_hWnd , // handle to window


HWND_TOPMOST, // placement-order handle


rect.left, // horizontal position


rect.top, // vertical position


rect.Width(), // width


rect.Height(), // height


SWP_SHOWWINDOW // window-positioning options


(;


else


::SetWindowPos(


m_hWnd , // handle to window


HWND_NOTOPMOST, // placement-order handle


rect.left, // horizontal position


rect.top, // vertical position


rect.Width(), // width


rect.Height(), // height


SWP_SHOWWINDOW // window-positioning options


);


}


ففى الحالة الأولى يجعل النافذة دائما فى الأعلى (حالة وجود علامة الصح امام الأداة )


وألا فى الحالة الثانية يعود للحالة الطبيعية حالة أن أى برنامج يفتح بعد برنامجنا يكون هو الأعلى (حالة عدم وجود علامة الصح امام الأداة )


والأن لننفذ البرنامج


ملاحظة


يوجد حالتين لدينا عند تنفيذ البرنامج


الأولى وهى البدائية بالنسبة لبرنامج الفيجوال سى وهى حالة Debug وهو أن الفيجوال سى يعتبر ملف ال EXE أو التنفيذى تحت الأختبار لذلك من مشاكله انه لو نقل هذا البرنامج الى جهاز لا يوجد عليه الفيجوال سى لن يعمل لذلك عندما تتاكد من أنتهاء البرنامج أو من الأن يجب عليك التحول الى حالة ال Releaseعن طريق


من قائمة Build اختار Set Active Configuration ستظهر لك نافذة Set Active Project Configuration أختار من قائمة Project Configuration الأختيار Alwaysontop - Win32Release ثم أضغط على Ok





الشكل(23 )





الشكل(24 )


والأن الى تنفيذ البرنامج


لتنفيذ البرنامج أما أن تضغط على مفتاحى Ctrl+F5 من على لوحة المفاتيح أو أنقر على رمز ! من على Build Mini Bar من على ال ToolBar او من قائمة Build أختار Execute Alwaysontop.exe أنظر الأشكال





الشكل(25 )





الشكل(26 )


وبهذا نكون قد حصلنا على برنامجنا يمكنك الأستفاده من هذه الخاصية Always on top فى برامجك


ملاحظة نهائية


أدرجنا تعريف المتغيير CRect rect; داخل ملف AlwaysontopDlg.cpp وهذا عادى ولكن بعض الأراء تقول أن ملفات الرأس أو Header files فى بيئة السى عموما تعتبر للمتغيرات وملفات CPP للدوال ولكن لا مانع من أضافة المتغييرات داخل ملفات CPP ولو أردنا وضع المتغير داخل ملف الرأس اولا يجب مسح هذا المتغير من ملف CPP ثم أفتح الملف AlwaysontopDlg.h أنظر طريقة الوصول الى AlwaysontopDlg.cpp سابقا ولكن بدلا من الدخول على Source files سندخل على Header files ثم أبحث عن كلمة Public:


Public:


CRect rect;


CAlwaysontopDlg(CWnd* pParent = NULL); // standard constructor


تعليقات 0 | إهداء 0 | زيارات 693


خدمات المحتوى
  • مواقع النشر :
  • أضف محتوى في Digg
  • أضف محتوى في del.icio.us
  • أضف محتوى في StumbleUpon
  • أضف محتوى في Google


تقييم
0.00/10 (0 صوت)


Powered by Dimofinf cms Version 3.0.0
Copyright© Dimensions Of Information Inc.