برنامه نویسی ماوس در Turbo C - برترین مقالات کامپیوتر
X
تبلیغات
رایتل


برترین مقالات کامپیوتر

برترین مقالات کامپیوتر

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

#include <STDIO.H>
#include <CONIO.H>
#include <STDLIB.H>
#include <DOS.H>
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 <STDIO.H>
#include <CONIO.H>
#include <STDLIB.H>
#include <DOS.H>
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) 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 را بنویسید.

#include <CONIO.H>
#include <STDIO.H>
#include <STDLIB.H>
#include <GRAPHICS.H>
#include <DOS.H>
union REGS i,o;
main() {
int show_mouse();
int hide_mouse();
int get_mouse_pos(int *,int *,int *);
int gd=DETECT,gm,button,x1,y1,x2,y2;
initgraph(&gd,&gm,"");
i.x.ax=0; int86(0x33,&i,&o);
if(o.x.ax==0)
{ printf("No Mouse is available..");
exit(1);
restorecrtmode();
}
outtextxy(230,400,"Press any key to exit....");
while(!kbhit())
{
show_mouse(); get_mouse_pos(&x1,&y1,&button);
x2=x1;
y2=y1;
while(button==1) {
hide_mouse();
line(x1,y1,x2,y2);
x1=x2;
y1=y2;
get_mouse_pos(&x2,&y2,&button); }
}
restorecrtmode();
} show_mouse()
{
i.x.ax=1; int86(0x33,&i,&o);
}
hide_mouse()
{
i.x.ax=2; int86(0x33,&i,&o);
}
get_mouse_pos(int *x,int *y,int *button)
{
i.x.ax=3;
int86(0x33,&i,&o);
*x=o.x.cx;
*y=o.x.dx; *button=o.x.bx&1;
}

 لطفا اگر علاقه مند بودید که بیشتر راجع به ماوس بدانید و یا اگر سوالی داشتید با من تماس بگیرید.

نوشته شده در چهارشنبه 18 مرداد‌ماه سال 1385ساعت 08:49 توسط ADMIN نظرات (0)|


Design By : Night Skin