۷.۰۱.۱۳۸۸

برنامه نويسي ماوس در Turbo C

با توجه به اين كه برنامه هاي تحت داس رابط ضعيفي نسبت به ويندوز و لينوكس و... دارند ما حداقل بايد برنامه هايمان را به ماوس مجهز كنيم تا اين نقص تا حدودي برطرف شود. مخصوصا اگر بخواهيم يك برنامه گرافيكي بنويسيم برنامه مان بدون ماوس غير قابل استفاده خواهد بود. خب بهتره بريم سر اصل مطلب. در اين مقاله فعال كردن ماوس در زبان C توضيح داده شده. البته ما ماوس را با استفاده از وقفه ها كه در تمام كامپيوترهاي IBM يكي هستند فعال مي كنيم و كدهاي ارائه شده با كمي تغيير در پاسكال و بيسيك نيز كار خواهند كرد. اگر شما با زبان C آشنايي نداريد ممكن است اين كدها برايتان ناآشنا باشند. پس بهتر است از خواندن اين مقاله صرفنظر كنيد. البته ممكن است به زودي آموزش C و ++C را نيز در اين سايت بگذاريم. ابتدا براي اين كه از ماوس استفاده كنيم بايد بفهميم كه درايور ماوس نصب شده يا نه؟ اگر نصب نشده باشد نمي توان ماوس را فعال كرد. براي اين كار از تابع شماره 00hex از وقفه 33hex استفاده مي كنيم. اگر قبلا با وقفه ها كار كرده باشيد حتما مي دانيد كه شماره تابع وقفه در ثبات AH قرار مي گيرد ولي توابع 33hex به جاي AH از AX استفاده مي كنند. يعني براي فراخواني اين وقفه شماره تابع آن را در ثبات AX قرار مي دهيم. پس از فراخواني اين وقفه اگر مقدار ثبات AX برابر 0000hex باشد يعني درايور ماوس نصب نشده و ما نميتوانيم از ماوس استفاده كنيم. پس از اين كار بايد نشانگر ماوس را د ر صفحه ظاهر كنيم. نشانگر ماوس دقيقا در وسط صفحه ظاهر خواهد شد. اگر در حالت متني باشيم اين نشانگر به صورت يك مستطيل و اگر در حالت گرافيكي باشيم نشانگر به صورت يك فلش كوچك نشان داده خواهد شد. براي ظاهر كردن كافي است از تابع شماره 01 وقفه 33h استفاده كنيم. برنامه زير هم درايور ماوس را تشخيص داده و هم آن را در حالت متني نشان ميدهد:

#include
#include
#include
#include
void main()
{ union REGS r;
clrscr();
r.x.ax= 0;
int86(0x33,&r,&r);
if(r.x.ax==0)
{
printf("No Mouse Available.....");
getch();
exit(1);
}
r.x.ax=1;//place 01 in AX register
int86(0x33,&r,&r);//showing the mouse pointer
printf(“press any key to exit…”);
getch();
}

تابع مفيد ديگري براي كار با ماوس تابع 02 از وقفه 33hex ميباشد. اين تابع نشانگر ماوس را پنهان مي كند. فرض كنيد مي خواهيد مانند برنامه Paint وقتي ماوس را ميكشيد يك خط هم با آن كشيده شود. در اين حالت اگر نشانگر ماوس ديده شود بعضي از نقاط خط پاك خواهند شد و بهتر است كه در اين مواقع نشانگر را پنهان كنيم. بعدا مثال كاملتري برايتان خواهم نوشت. براي كار با ماوس ما بايد بدانيم كه نشانگر اكنون د ركجاي صفحه مي باشد يعني مختصات (x,y) آن را بدست آوريم. براي اين كار از تابع شماره 03 استفاده مي كنيم. كه پس از فراخواني تابع ثبات CX حاوي مختصات افقي(x) و DX حاوي مختصات عمودي نشانگر خواهد بود. كار مهم ديگر تشخيص كليدهاي فشرده شده ماوس است. تابع 03 همچنين تعيين مي كند كه كدام كليد از ماوس فشرده شده است. اين كليدها را ثبات BX تعيين ميكند. فقط همين كافي است كه بدانيد پس از فراخواني وقفه اگر BX برابر با 00000001)Hex (باشد كليد چپ ماوس فشار داده شده است. راجع به فشار دادن كليدهاي ديگر اگر علاقه مند بوديد به من ايميل بزنيد تا نحوه تشخيص آنها را هم بنويسم. مثال زير نحوه كار را مشخص مي كند:< /P>< /P>

#include
#include
#include
#include
void main() {
union REGS i,o;
clrscr();
i.x.ax=0;
int86(0x33,&i,&o);
if(o.x.ax==0) {
printf("No Mouse Available...");
exit(1);
}
i.x.ax=1;
int86(0x33,&i,&o);
gotoxy(25,23);
printf("Press any key to exit...");
while(!kbhit())
{
i.x.ax=3;
int86(0x33,&i,&o);
gotoxy(2,2);
printf("x->co-ordinate=(%d) \n y->co-ordinate=(%d) ",o.x.cx,o.x.dx);
if(o.x.bx==0x01) printf(“Right button of mouse pressed.”); }
i.x.ax=2; int86(0x33,&i,&o);
}

براي پايان كار مي خواهيم يك برنامه كه ابزار pencil برنامه هاي گرافيكي را شبيه سازي مي كند بنويسيم. براي اين كار ما ابتداصفحه را درحالت گرافيكي قرار مي دهيم براي اين كهبرنامه زير كار كند در دستور initgraph(&gd,&gm,""); در داخل كوتيشن مسيرفايلهاي .bgi را بنويسيد

هیچ نظری موجود نیست:

http://up.iranblog.com/images/0z5dgraxwa4j49a5ts77.gif http://up.iranblog.com/images/gv83ah5giec9g8jkopmc.gif