PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : استفاده از Mouse در c



shirin71
08-06-2011, 08:32 PM
براي استفاده از Mouse در Dos مي بايست از وقفه 33 كمك گرفت . بنابراين در اين مقاله قبل از توضيح بكارگيري مويس در C ابتدا به تشريح بكارگيري وقفه ها در C مي پردازيم.

كساني كه با زبان برنامه نويسي اسمبلي كار كرده اند ، با كار وقفه ها به خوبي آشنايي دارند . در واقع در زبان اسمبلي تمامي كارها با فراخواني وقفه ها انجام ميشود چرا كه اين زبان يك زبان سطح پايين است . اما در زبانهاي سطح بالا مثل C وقفه ها از چشم كاربر دور شده اند تا زبان برنامه نويسي به زبان محاوره اي انسان نزديكتر شود . با اين حال فراخواني وقفه ها در C براي برنامه نويس امكان پذير است .

در زبان C ايتدا بايد يك متغير از نوع رجيستر تعريف شود تا بتوان به كمك آن به رجيستر ها دستيابي داشت :



در تعريف بالا متغير r از نوع Register تعريف شده كه اين نوع در سرفايل Dos.h قرار دارد.

حال براي دستيابي به يك رجيستر مانند AX و يا اجزاي آن يعني AH , AL يك يونيون در Dos.h تعريف شده است كه ساختمان داخلي x در آن براي دستيابي به رجيستر 2 بايتي (رجيستر كامل ) مانند AX و ساختمان داخلي h براي دستيابي به اجزاي رجيستر 2 بايتي يعني AH , AL كه يك بايتي هستند ، مي باشند:



پس اگر بخواهيم به رجيستر AX و مانند آن دستيابي پيدا كنيم مي نويسيم :


و براي اجزاي آن مي نويسيم :



پس از مقدار دهي رجيستر ها و مشخص كردن شماره تابع يا سرويس ، نوبت به فراخواني وقفه يا اينتراپت مي رسد كه با فرمان زير انجام مي شود :




(آدرس متغير رجيستر خروجي,آدرس متغير رجيستر ورودي,شماره وقفه در مبناي 16);

اعداد مبناي 16 در C با 0x شروع مي شوند . مثلا اگر بخواهيم تابع شماره 1 از وقفه 33 را فراخواني كنيم بايد شماره تابع را در AH قرار داده و سپس وقفه را فراخواني كنيم :


كه البته در مثال بالا از آنجايي كه AH جزوي از AX مي باشد و در سمت راست مقدار دهي مي شود از AX استفاده شده است . در واقع AX=01 يعني AL=0 و AH=1 .

متغير in شامل ورودي هاي وقفه است و چنانچه وقفه خروجي هم داشته باشد خروجي هاي آن در out قرار مي گيرد.

حال به استفاده از Mouse مي پردازيم .

1- راه اندازي Mouse : تابع 0 از وقفه 33 : اگر پس از اجراي وقفه مقدار AX برابر 0 باشد يعني مويس راه اندازي نشده است .



لازم به ذكر است كه قبل از فراخواني اين تابع بايد درايور مويس در داس را اجرا كنيد مثلا : GMouse.com

2 - نمايش كرسر مويس : تابع 1 از وقفه 33 : پس از راه اندازي مويس اجرا مي شود .


3- مخفي كردن كرسر مويس : تابع 2 از وقفه 33 :




4-بدست آوردن مختصات مكان نماي مويس : تابع 3 از وقفه 33 : پس از اجراي وقفه شماره ستون در CX و سطر در DX قرار مي گيرد .




5- انتقال كرسر : تابع 4 از وقفه 33 : قبل از فراخواني مي بايست شماره ستون مورد نظر در CX و شماره سطر در DX قرار گيرد .





6- تست كليك شدن مويس : تابع 5 از وقفه 33 : شماره كليد مويس بايد در BX قرار گيرد ( 0 براي چپ - 1 براي راست و 2 براي وسط ) . اگر كليك شده باشد مقدار 1 در BX و گرنه 0 در آن قرار مي گيرد.



توابع گفته شده سرويسهاي مهم بكارگيري مويس بود . ساير توابع را مي توانيد در جدول وقفه هاي داس در ستون وقفه 33 بيابيد .

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