استفاده از ماوس در زبان ++C » پورتال اینترنتی وب تو فا

  RSS 2.0 تماس با ما دیکشنری آنلاین عضویت صفحه اصلی  
 
ورود و خروج
نام کاربری:
کلمه عبور:
 
 
آخرین مطالب
» چگونه يک تم براي ويندوز 7 درست کنيم؟
» آشنايي با مفهوم اشاره‌گرها به زبان ساده
» چگونه برج‌هاي هانوي را جابه‌جا كنيم؟
» 15 نکته ی جالب در مورد اینترنت
» آموزش آپدیت بایوس مادربرد های Asus
» فلش کردن BIOS چه معنایی دارد ؟
» چيپ‌ها چگونه ساخته مي‌شوند ؟
» کارت گرافيک اورکلاک شده بله يا خير؟
» مقايسه چيپ‌هاي گرافيکي nVIDIA
» پيش نمايش انواع فايل‌ها بدون نياز به نصب برنامه مربوطه
 
مطالب برتر
» چگونه يک تم براي ويندوز 7 درست کنيم؟
» آشنايي با مفهوم اشاره‌گرها به زبان ساده
 
مطالب تصادفی
» رايانه روميزي جديد بدون "كيس "
» نخستين گوشي آندروييدي HTC ‌بر پايه وايمكس
» آدرس ip چيست؟
» جوش صورت ( آکنه) چیست؟ و راه درمان آن کدام است؟
» آهنگ جدید و زیبای محسن یگانه با نام گرگ و میش
» IBM تحلیل داده ها را با الگوریتم جدید سرعت می بخشد
» نرم افزار جلوگیری از نفوز فایل های مخرب از طریق فلش ممو ...
» آهنگ جدید و زیبای سعید شایسته با نام ایران
» بالاخره پي‌اچ‌پي پشتيباني شد
» مجموعه کامل نرم افزارهای اسلامی ویژه موبایل
 
آرشیو مطالب
» مرداد 1389 (4)
» تير 1389 (47)
» خرداد 1389 (30)
» ارديبهشت 1389 (12)
» فروردين 1389 (6)
» اسفند 1388 (14)
» بهمن 1388 (16)
» دي 1388 (13)
» آذر 1388 (13)
» آبان 1388 (10)
» مهر 1388 (20)
» شهريور 1388 (20)
» مرداد 1388 (23)
» تير 1388 (13)
» خرداد 1388 (36)
» ارديبهشت 1388 (91)
 
تقویم
<    «  شهريور 1389  »    >
شيدسچپج
 12345
6789101112
13141516171819
20212223242526
2728293031 
 
 



کامپیوتر و اینترنت » برنامه نویسی : استفاده از ماوس در زبان ++C
نویسنده: ahmadflasher تاریخ: 20 آذر 1388 بازدید: 653 بار

قبل از هر چیز باید با چند مفهوم مانند وقفه ها , ثباتها و ... آشنا بشویم.
مقدمه:
اول لازمه که یک نگاه دقیق تری به ساختمان کامپیوتر داشته باشیم. هسته و قلب یک کامپیوتر پردازنده (Processor) است که پردازش داده ها و دستور ها رو بر عهده داره و از دو بخش تشکیل شده:
1) ( EU (Execution Unit یا واحد اجرا.
2) (BIU (Bus Interfac Unit یا واحد واسط گذرگاه.
ٍEU وظیفه اجرای دستورالعمل ها را برعهده دارد و ,BIU داده ها و دستور العمل های مورد نیاز EU رو فراهم میکند. EU شامل واحد محاسبه و منطق(ALU) , واحد کنترل (CU) و چند ثبات (register) است. ثبات ها حافظه های بسیار سریعی هستند, برای انجام محاسبات و سایر اعمال پردازنده. BIU شامل واحد هایی مثل واحد کنترل گذرگاه(BCU) , صف دستورالعمل ها , ثبات های سگمنت (segment registers) و ... است که کارهایی از قبیل :
1) کنترل BUS در انتقال داده ها به EU , حافظه و دستگاه های ورودی و خروجی.
2) کنترل کردن آدرس دهی حافظه توسط Segment registers .
3) دستیابی به دستورالعمل ها.
.....>>>

کاری که BIU انجام میدهد این است که دستورالعمل ها را یکی یکی از حافظه می خواند و در صف (queue) قرار میده , در نتیجه دستورالعمل ها برای EU آماده هستند. بدین ترتیب این دو واحد با هم و به صورت هماهنگ کار میکنند.
خانواده پردازنده های 8086 (80X86) دارای چهار ثبات( حافظه هایی سریع برای انجام محاسبات و سایر اعمال پردازنده) عمومی به نامهای AX , BX ,CX ,DX و... هستند البته تعداد این ثباتها بیشترند ( دو ثبات شاره گرپشته SP , اشاره گر پایه BP, دو ثبات ایندکس منبع SI, ایندکس مقصد DI, یک ثبات دستورالعمل IP, یک ثبات وضعیت Flag register و چهار ثبات سگمنت با نامهای CS,DS,SS,ES که همه این ثباتها 16 بیتی هستند) که برای کار ما همین چهار ثبات (AX,BX,CX,DX) کافی هستند.
ثباتهای عمومی برای کار با وقفه ها ( توضیح میدم ) بسیار خوبند. ساختار هریک از این ثباتها 16 بیتی است که تمام این چهار ثبات از دو قسمت 1 بایتی تشکیل شده اند که با پسوند H و L مشخص میشوند برای مثال ثبات AX از دو بخش AH (بایت بالا) و AL (بایت پیین) تشکیل شده.
ثبات AX : برای انجام اعمال محاسباتی ورودی و خروجی
ثبات BX: برای آدرس دهی و اعمال محاسباتی
ثبات :CX به عنوان شمارنده به کار گرفته میشود
ثبات :DX این ثبات , ثبات داده در نظر گرفته میشود و برای بعضی از اعمال ورودی و خروجی به کار گرفته میشود.
" تا اینجا تنها چیزی که نیاز است مطالب رنگی بالا است. "

شروع:
وقفه(Interrupt) سیگنالی است که از طرف نرم افزار یا سخت افزار به CPU داده می شود و از CPU عملی رو درخواست میکند. وقفه ها به دو دسته وقفه های سخت افزاری و وقفه های نرم افزاری تقسیم میشوند.
وقفه های سخت افزاری در اثر بروز اعمال ویژه ای اتفاق می افتند.
وقفه های نرم افزاری به دوسته تقسیم میشوند:
- وقفه های سیستم.
- وقفه های نوشته شده توسط برنامه نویس.
تعداد وقفه های سیستم 256 است که از 0 تا 255 شماره گذاری شده اند. علاوه بر این 256 وقفه خود برنامه نویس میتواند وقفه ها مورد نیاز رو بنویسد. وقفه های سیستم نیز به دو دسته تقسیم میشوند
- وقفه های DOS
- وقفه های BIOS
(BIOS زیر برنامه های سطح پایین و DOS زیر برنامه های سطح بالاتری را برای انجام اعمال ورودی و خروجی انجام میدهد)
هر وقفه با شماره ای در مبنای 16 مشخص میشود مثل وقفه های 5H,10H,33H و ... .
(یک کم تخصصی: هر وقت وقفه ای اتفاق می افته اجرای برنامه موقتا قطع میشه و محتویات CX و IP به stack منتقل میشه و کنترل به زیر برنامه ای برای پاسخگویی به وقفه میره و بعد از اتمام زیر برنامه محتویات CX و IP از stack فراخوانی میشوند و اجرای برنامه ها ادامه پیدا میکنه)
هر وقفه با توجه به کاربردش میتواند دارای توابعی باشد که هر تابع کار خاص خو را نجام میدهد.
وقفه مربوط به موس چگونه است؟
برای کار با موس باید از وقفه 33H استفاده کرد. که تعداد توابع آن زیاد است. شماره وقفه را در AX قرار می دهیم و وقفه را فراخوانی میکنیم ( در ادامه بصورت کامل توضیح میدم )

معرفی تعدادی از توابع وقفه 33H :

تابع 0000H :
این تابه برای reset کردن درایور موس و خواندن موقعیت موس در زمان اجرای وقفه است. بدین صورت که ابتدا در ثبات AX مقدار 0000H را قرار میدهیم و وقفه را فراخوانی میکنیم. بعد از فراخوانی وقفه(توضیح میدم) در AX موقعیت درایور موس قرار میگیرد اگر 0000H بود یعنی سخت افزار یا درایور نصب نیست و اگر ffffH بود سخت افزار یا درایور نصب است. در داخل BX نوع دکمه های موس قرار داده میشود که مهمترین آنها 0003H به معنی سه دکمه ای و ffffH به معنی 2 دکمه ای است

تابع 0001H :
این تابع موس را ظاهر میکه.
فقط کافیه AX رو 0001H قرار بدید و وقفه رو فراخوانی کنید.


تابع 0002H :
این تابع عکس عمل تابع 0001H رو انجام میده. فقط اگر دو بار وقفه رو با تابع 0002H فراخوانی کنید دو باره cursor را نمایش میدهد.

تابع 0003H :
این تابع را میتوان ترکیبی از دو تابع بعد به حساب آورد (البته با تفاوت هایی). این تابع موقعیت موس در صفحه و کلید فشرده شده را برمیگرداند. بدین صورت که :
در AX مقدار 0003H قرار میدهید و وقفه را فراخوانی می کنید . اکنود در BX شماره کلید فشرده شده قرار میگیرد .اگر 0 بود کلید چپ و اگر 1 بود کلید راست واگر 2 بود کلید میانی فشرده شده است. CX شماره ستونی که موس در آن قرار دارد را میدهد و DX شماره سطر را میدهد.
در محیط متن هر کاراکتر را 8X8 در نظر بگیرید. یعنی موقعیت موس روی هر کاراکتر 64 حالت دارد.


چگونه وقفه را فراخوانی کنیم: وقفه را میتوان با دستورات اسمبلی یا توابع زبان C فراخوانی کرد . ما با استفاده از تابع int86 این کار را انجام میدهیم.
بدین صورت که (ثبات مقصد , ثبات پایه , شماره وقفه)int86.
ابتدا باید متغیری از نوع ثبات ایجاد کنیم و مقدار تابع را در آن قرار دهیم و بعد وقفه را فراخوانی کنیم.
Header file مربوط به ثبات ها است.
تابع active در اینجا درایور موس را فعال میکند

#include<...>
#include<...>
#include
#include<...>
#include<...>
void active(){
union REGS r1,r2;
r1.x.ax=0;
int86(0x33,&r1,&r2);
}



تابع show در اینجا موس را نمایش میدهد:

void show(){
union REGS r1,r2;
r1.x.ax=1;
int86(0x33,&r1,&r2);
}


تابع hide در اینجا موس را مخفی می کند:

void hide(){
union REGS r1,r2;
r1.x.ax=2;
int86(0x33,&r1,&r2);
}


تابع click با گرفتن کلید چپ نام کلید و مختصات آن را در صفحه را چاپ میکند:


void click(){
union REGS r1,r2;
do{
r1.x.ax=3;
int86(0x33,&r1,&r2);
delay(100);
} while(r2.x.bx==0);
cout<<"left click \n";

cout<<"x="<<.r2.x.cx;

cout<<" y="<<.r2.x.dx;

getch();

}


نمونه مثال زیر رو ببینید:

      #include<graphics.h>
       #include<stdio.h>
       #include<conio.h>
       #include<dos.h>
       union REGS in,out;

       int callmouse()
       {
              in.x.ax=1;
              int86(51,&in,&out);
              return 1;
       }
       void mouseposi(int &xpos,int &ypos,int &click)
       {
              in.x.ax=3;
              int86(51,&in,&out);
              click=out.x.bx;
              xpos=out.x.cx;
              ypos=out.x.dx;
        }
       int mousehide()
       {
              in.x.ax=2;
              int86(51,&in,&out);
              return 1;
       }
      void setposi(int &xpos,int &ypos)
      {
             in.x.ax=4;
             in.x.cx=xpos;
             in.x.dx=ypos;
             int86(51,&in,&out);
      }
     int main()
      {
             int x,y,cl,a,b;
             clrscr();
             int g=DETECT,m;
             initgraph(&g,&m,"c:\tc\bgi");
             a=100;
             b=400;
             setposi(a,b);
             callmouse();
             do
             {
                    mouseposi(x,y,cl);
                    gotoxy(10,9);
                    printf("\n\tMouse Position is: %d,%d",x,y);
                    printf("\n\tClick: %d",cl);
                    printf("\n\tPress any key to hide the mouse");
             }while(!kbhit());
             getch();
             mousehide();
             printf("\n\n\tPress any key to Exit");
             getch();
     }



 
فقط کاربران عضو می توانند این بخش را مشاهده کنند...

مطالب مشابه:

  • برنامه رسم لوزی با کاراکتر * در ++C
  • برنامه تبدیل عبارت infix_2_postfix
  • تبدیل عبارت پست فیکس به اینفیکس
  • نوشته های سایه دار توسط CSS
  • پياده سازي پشته (Stack) درس ساختمان داده
  • لوله‌كشي به‌روش جديد


  • نظرات (2)   نسخه قابل چاپ
     ( امتيازها: 3)

    نظر 1 توسط: tohid68
    تاریخ: 31/02/1389 - 01:53




    گروه: عضو سايت
    تاریخ عضویت: 31/02/1389
    مثالی که برای برنامه گذاشتی خطا داره . لطفا یه راهنمایی کن

    ممنون

    نویسنده ی 0 مطلب و 1 نظر پاسخ    
     
    نظر 2 توسط: ahmadflasher
    تاریخ: 31/02/1389 - 14:40




    گروه: مدير سايت
    تاریخ عضویت: 2/02/1388
    این برنامه در محیط ++ Turbo C تست شده و هیچ مشکلی نداره.


    --------------------
    قلبتان خالی از عشق و مملو از شادی باد

    نویسنده ی 204 مطلب و 24 نظر پاسخ    
     
    ارسال نظر
    نام:
    ایمیل:

    کد امنیتی:
    تصوير كد امنيتي
    ريست کد
    کد امنیتی:

     

     
     
    منوی اصلی
     صفحه اصلی    آمار سایت    جستجوی پیشرفته   مطالب جدید    دیکشنری آنلاین   آخرین نظرات    تماس با ما  
     
    موضوعات
     
    نظر سنجی
    نظرشما در مورد این سایت؟

    عالي
    خوب
    متوسط
    بد
     
    آمار
    نويسندگان برتر 1- (ahmadflasher (204
    2- (ramin-sahar (72
    3- (ALUx (60
    4- (SeZaR 800 (32
    آمار مطالب يک ساعت پيش: 0
    امروز: 0
    اين ماه: 2
    کل: 368
    کل نظرات: 193
    آمار اعضا يک ساعت پيش: 1
    امروز: 3
    اين ماه: 108
    کل: 943
    بن شدگان: 1
    سه عضو آخر:
    soooosk
    mgh71
    c901

    آمار بازدیدها
     
    لینکهای سایت
    » آموزشگاه کامپیوتر HDsoft
    » دانلود بهترین نرم افزار،فیلم،بازی
    » ایران پی اچ پی
    » برنامه نویس
    » کارشناسی دات کام
     
     
     
    CopyRight All Reserved By .:Web2Fa.com:.-2008-2009- Powered By DataLife Engine