السلام عليكم ورحمة الله وبركاته،
من أجل أن أتدرب على البرمجة بال ATL أو Active Template Library .. التي تسهل في برمجة الكائنات أكانت ActiveX أو COM . قمت ببناء هذه الأداة التي تقوم بتغيير شكل الفورم وسميتها IrregularShapeWnd Control v1.0.
هناك عدة مزايا في بناء ال ActiveX بال ATL عنه في ال MFC ، ويمكن أن نتحدث عن ذلك في النقاط التالية :
مزايا بناء ال ActiveX في ال ATL :
- استقلالية ملف ال OCX الناتج ، حيث إنه لا يحتاج إلى أي من مكتبات الربط الديناميكي .
- صغر حجم الملف مقارنة مع ال OCX الناتجة من ال MFC في حالة ربط المكتبة بشكل Static .
أما المساوئ ففي الحقيقة لا توجد مساوئ . ولكن يمكن القول أن البرمجة بال ATL هي أصعب من البرمجة بالMFC لأنك في ال ATL سوف تستخدم الWin32-API .
حسنا ، لنتحدث عن هذه الأداة باختصار :
اسم الأداة : IrregularShapeWnd Control
ميزاتها :
- تعمل على جميع البيئات Visual Basic و Visual C وأيضا لغات ال script ..
- إمكانية إضافة الصورة والتعديل في الخواص أثناء تصميم البرنامج . وتقوم الأداة بعرض الصورة التي قمت باختيارها على الفورم أثناء التصميم ، هذا ما يسمح لك بتوزيع الأدوات فوق الصورة بسهولة كبيرة .
- تدعم جميع أنواع الصور jpg ، gif ، bmp ، wmf ، ico . وغيرهم …
- لن تحتاج إلى الصورة بعد بناء الملف التنفيذي لأن الصورة تدمج داخل الملف التنفيذي بشكل تلقائي .
- السرعة الهائلة في عملية إظهار الفورم أثناء التنفيذ .
- لا تحتاج إلى أي كود من أجل استخدامها ، فقط صمم ونفذ .
- تحديد المنطقة التي تسمح للمستخدم من خلالها تحريك الفورم . وذلك بصنع صورة (أبيض/وأسود) تحدد أين منطقة تحريك الفورم .
الأحداث :
- Draw : يسمح لك بالرسم فوق الأداة .
- Click : يستدعى عند الضغط بالفأرة على الأداة .
شرح بسيط عن طريقة عمل الأداة :
أولا: عندما يقوم المستخدم باختيار الصورة واختيار اللون المطلوب إزالته ، فإن الأداة تقوم بصنع Region وذلك بالاعتماد على خوارزمية بسيطة جدا . هذا ال Region يمكن استخدامه بعد ذلك في تغير شكل الفورم عن طريق التابع SetWindowRgn ..
ثانيا : الصورة و ال Region المحسوب يسجل داخل ملف الexe عن طريق الاستفادة من الInterface IPersistStreamInit .. طبعا الصورة وال Region يتم تحميلهم من ملف ال exe ، وذلك قبل عرض الصورة والفورم وتتم هذه العملية بسرعة ، إذ ليس هناك داعي من إعادة تنفيذ خوارزمية حساب الRegion ..
ثالثا : تم الاستفادة من الرسالة WM_NCHITTEST من أجل التحكم بعملية تحريك الفورم كما نريد .. وتقوم الأداة بمعالجة هذه الرسالة القادمة إلى الفورم . وتمت عملية مراقبة الرسائل القادمة إلى الفورم عن طريق ال SubClassing ..
يمكن الرجوع إلى الsource لمعرفة المزيد عن كيفية عمل هذه الأداة .
الأداة TransWnd.ocx موجودة في الوصلة التالية : http://haniproxy.netfirms.com/TransWnd_ocx.zip
ال source يمكن تنزيله من الموقع : http://haniproxy.netfirms.com/TransWnd_src.zip
من أجل استخدامها :- قم بتسجيل الأداة في الويندوز .
- ضعها على الفورم الذي تريد تغيير شكله .
- ادخل على خصائص (Properties) الأداة . واذهب إلى الصفحة Picture.
- اختر الصورة التي تريد وقم باختيار اللون عن طريق سحب الإبرة فوق اللون المطلوب .
- اضغط على Make Transparent .
- الآن يمكنك أن ترى الصورة في الأداة . غير حجم الأداة حتى ترى جميع الصورة . وقم بتشغيل البرنامج .
- لاحظ أنه يمكنك تحريك الفورم من أي مكان تريد .
- من أجل تحديد المنطقة التي تسمح للمستخدم منها تحريك الإطار :
- اذهب إلى خصائص الأداة من جديد ومنه إلى Move Mask .
- اختر Allow mask ومنه اختر الصورة ولكن يجب أن تنتبه أن المنطقة ذات اللون الأسود أو أي لون غير الأبيض هي التي تسمح للمستخدم من تحريك الإطار .
وضعت مثال بسيط بالفيجوال سي++ يبين كيفية استخدام هذه الأداة :
المثال موجود في الوصلة : http://haniproxy.netfirms.com/TransWndTest.zip
وصورة المثال :

أرجو من الجميع تجربة هذه الأداة في الفيجوال بيسك والفيجوال سي .. وأن ترسلوا باقتراحاتكم والمشاكل التي تواجهكم . وسوف أقوم بتصليح جميع المشاكل وإضافة الاقتراحات حسب المستطاع بإذن الله .
- قم بتسجيل الأداة في الويندوز .