يوجد function واحدة اسمها register_mouse_proc، يمكن بها التعامل مع الماوس بأي طريقة في مكتبة g4c. هذه الدالة تأخذ function أخرى وتخزنها داخلياً، وحين يحدث أي حدث مرتبط بالماوس (تحريكها، ضغط زر، رفع اليد من على زر) يقوم نظام g4c بمناداة الـfunction التي تم تسجيلها.
وظيفتك إذاً كمبرمج ان تفعل الآتي:
1- تعرف دالة جديدة تقوم بدور mouse proc
2- تقوم بتسجيل هذه الدالة في g4c عن طريق اعطاء اسمها (بدون الاقواس) إلى register_mouse_proc
3- تكتب بداخل الـmouseProc الكود التي تريد ان تحدث عند أي حدث للماوس.
الدالة التي تكتبها يمكن ان تأخذ أي اسم، لكن عدد الparameters وانواعها والreturn value يجب ان تطابق الآتي:
int myMouseProc(int x, int y, bool leftButton, bool rightButton, void *)
لاحظ ان تحريك الماوس، الكليك، ...الخ كلهم يتم التعامل معهم عن طريق هذه الدالة. x و y يدلان دائماً على مكان المؤشر وقت الحدث، leftButton تدل إن كان الزر الأيسر مضغوطا في تلك اللحظة ام مرفوعاً، ويناظره rightButton للزر الأيسر، وآخر parameter غير مستخدم. الآن بعض الامثلة...
كيف اتعامل مع الكليك؟ مثلاً هذا البرنامج يعد الكليكات بالزر الأيسر:
#include "g4c.h"
bool oldLeftButton = false;
int numClicks = 0;
int mouseProc(int x, int y, bool leftButton, bool rightButton, void *)
{
if(oldLeftButton == false && leftButton == true)
{
numClicks++;
}
oldLeftButton = leftButton;
return 0;
return 0;
}
void main( )
{
register_mouse_proc(mouseProc).
}
هذا البرنامج جزءان: اول جزء يخزن دائماً القيمة القديمة لـ leftButton لأننا نريد ان نقارن القيمة القديمة بالجديدة.
الجزء الثاني يقارن قيمة leftButton الحالية بقيمتها القديمة. لو كانت الحالية true والقديمة false إذاً فقد حصلت عملية كليك (لو كانت اثنان true وراء بعضهما مثلاً فمعنى ذلك تحريك الماوس والزر مضغوط..لو اثنان false وراء بعضهما يكون تحريك والزر مرفوع...وهكذا).
(ملاحظة: هذا مجرد برنامج تعليمي، عدد الكليكات هنا يتم تخزينه في
numClicks لكن لا يعرض على الشاشة. طبعاً متاح لك ان تفعل ما تريد في الكود
بدلاً من تزويد المتغير numClicks، بحسب احتياجات برنامجك)
هذا البرنامج يعمل، لكن الكليك "ساذجة" قليلاً لأنها تحدث مع ضغط الزر فوراً. الكليك الحقيقية تحدث عند ضغط الزر ثم رفعه في فترة قصيرة وبدون تحريك مؤشر الماوس...لكن الكود الموجودة تنفع لمعظم الاهداف (لعبة XO مثلاً). وهكذا..يمكنك اختراع التعامل الذي تريده مع الماوس عن طريق التعامل مع الmouseProc.
هناك تعليق واحد:
دكتور سامي لو انا عاوز اخلي الماوس لما ادوس عملية كليك واحدة يحط البوينتر بتاع الماوس مكان عملية الكليك
إرسال تعليق