• پایان فعالیت بخشهای انجمن: امکان ایجاد موضوع یا نوشته جدید برای عموم کاربران غیرفعال شده است

آموزش C++ سي پلاس پلاس از پايه

littlerabbit

مدیر بازنشسته
کاربر فعال
تاریخ عضویت
13 جولای 2003
نوشته‌ها
678
لایک‌ها
6
سن
43
محل سکونت
Iran
من که شوکه شدم دیدم رسیده به صفحه 17 حالا اگه احسان میتونه بگه من فروم جدید واسه سی درست نمیکنم!!! سالک جان بدون تعارف میگم. کارت درسته. حوصلتم قابل ستایش!!!

اما خیلی خوبه که اینا از ه پست تفکیک بشن. اونقت راحت تر میشه اینا رو جستجو کرد و خوند. اینطوری اونا که خیلی جالبترن میرن به بخش مقالات.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
البته من خودم به دنبال نظم خيلي بالا هستم ولي چون خودم در حال ياگيري هستم و به كمك دوستان نياز دارم و همچنين به دنبال ايجاد بحث با خواننده ها بودم تا با هم تمرين كنيم ، به اين شكل درآمده ولي همين الان هم دارم در ذهن خود مباحث را مرتب مي كنم تا تاپيكهاي منظم و بدرد خوري ساخته شود.
حدود 5 تا 10 تاپيك با موضوع مشخص.
و ساخت يك گالري از ملزومات سي.
من شديدا به اين زبان يعني سي علاقه دارم و معتقدم ما هر زباني كه كار مي كنيم در كنارش بايد سي هم كار كنيم .
.
==========================.

در مورد انجمن ، من تابع اساتيد معظم سايت هستم.
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
به نقل از littlerabbit :
من که شوکه شدم دیدم رسیده به صفحه 17 حالا اگه احسان میتونه بگه من فروم جدید واسه سی درست نمیکنم!!! سالک جان بدون تعارف میگم. کارت درسته. حوصلتم قابل ستایش!!!

اما خیلی خوبه که اینا از ه پست تفکیک بشن. اونقت راحت تر میشه اینا رو جستجو کرد و خوند. اینطوری اونا که خیلی جالبترن میرن به بخش مقالات.

اقا سلام
ببخشيد دخالت ميكنم
اما فكر كنم يه بخش سي بد نباشه نه ؟:hmm:
اگر ميخواي بگو ما هم يه نامه پر كنمي و بعد امضا بزنيم به مديريت كل (احسان عزيز) تا اين بخش ايجاد بشه
:lol: :wacko:
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
برنامه زير حلقه اي محيا مي كند كه تا وقتي كليدي زده نشده ادامه يابد. و ميشه حلقه ثانويه اي علاوه بر اين حلقه در مكان ديگر ساخت تا كارهاي ديگري انجام دهد.
كلا مي خواهم بگويم كه اگر مي خواهيد برنامه اي هوشمند بنويسيد كه مدام كار كنه ولي گاهي هم بايد بهش دستوري بدهيد اين برنامه ياريگر شماست. مثل يك بازي كه مدام محاسبه مي كنه ولي بازي كننده هم شرايط بازي را مي تواند عوض كند.

اساس كار بر تابع kbhit() است كه در پايين شرح مي دهيم.

کد:
#include <conio.h>		
#include <iostream.h>				
				
void main()						
{		
clrscr();char c ;


  menu:
  // --------- halghye 1 ---
while(!kbhit())
{
cout<<c;
}
 // ------------
// --------- halghye 2 ---
c=getch();

goto menu;
// -----------------------	
}

البته در برنامه بالا ، در حقيقت حلقه دوئي وجود ندارد ولي ميشه ساخت كه ميشه حلقه اي كه مثل يك ترمينال كنترل كل برنامه را در دست دارد و هر وقت خواست كنترل را به حلقه 1 پس مي دهد. بديهي است كه جاي دو حلقه هم دلخواه است ، من براي راحتي زير هم نوشته ام . به علامت نقيض ( ! ) هم قبل تابع توجه كنيد. يعني وقتي كه كليدي فشرده نشده حلقه يك ادامه يابد.
توضيحات help توربو سي راجع به اين تابع كه در conio.h هم قرار داره. يعني همان جايي كه getch قرار داره. و با getch هم اين تابع ميشه بگي دوست است ، به شرح زير توجه كنيد.

کد:
ـــــــ
 kbhit                            <CONIO.H>
 -------
 Checks for currently available keystrokes

 Declaration:  int kbhit(void);

 Remarks:
kbhit checks to see if a keystroke is currently available.

Any available keystrokes can be retrieved with getch or getche.

 Return Value:
  ‏ On success (if a keystroke is available),
    returns a non-zero integer
  ‏ If a keystroke is not available, returns 0.

مي گه كه اين تابع چك مي كند براي اينكه نواختن كليدي در دسترس هست يا نه.
وقتي در دسترس باشه مي تواند با getch و getche دريافت شود.
مقدار بازگشتي: وقتي كليدي زده شده باشد ، مقدار بازگشتي تابع مقداري غيرصفر است.
و وقتي كليدي زده نشده باشد ، مقدار بازگشتي صفر است.
.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
کد:
ــــــــ
 random                          <STDLIB.H>
 ---------
 Macro that returns an integer

 Declaration:
  ‏ Macro:    random(num);
  ‏[color=red] Function: int random(int num);[/color]

 Remarks:
random returns a random number between 0 and (num-1).

random(num) is a macro defined in STDLIB.H.

 Return Value:
Returns an integer between 0 and (num - 1).

تابع راندوم ، كارش اينه كه يك عدد تصادفي توليد مي كنه. ورودي و خروجي ، هر دو ، int است. محدوده خروجي از بزرگتر-مساوي صفر تا (ورودي –1) است .
همين طور كه در بالا مشخصه ، stdlib بايد اينكلود بشه.

کد:
#include <conio.h>		
#include <iostream.h>				
[color=red]#include <stdlib.h>[/color]
void main()						
{		
clrscr();char c ;
 menu:
 // ----------- shoroe ghaaleb -------------
 int x=10;
 int y;

y=[color=red]random[/color](x);

cout<<"y="<<y<<endl;


 // ----------- entehaye ghaaleb -----------
    cout<<"----------------------new run"<<endl;
	c=getch();if(c != 'q') goto menu;
}

در مثال بالا ، ورودي يعني x مساوي 10 بوده و اعداد تصادفي ما از صفر مي تواند باشد تا 9 .
 

mohammad_110

کاربر فعال برنامه نویسی
کاربر فعال
تاریخ عضویت
22 ژانویه 2006
نوشته‌ها
60
لایک‌ها
0
خیلی ممنون از مطالب شما

یه مسئله ای هست که برام سئوال شده ؟ چرا به جای goto از while استفاده نمی کنید.
کد:
while(1)
{

}
 

mohammad_110

کاربر فعال برنامه نویسی
کاربر فعال
تاریخ عضویت
22 ژانویه 2006
نوشته‌ها
60
لایک‌ها
0
کتابخانه stdlib یکی از کتابخانه های مهم هست کار یه چند تا از توابعش به این صورته :

علاوه بر توابع تولید اعداد تصادفی یکسری توابع برای تبدیل رشته ها به اعداد اعشاری و صحیح داره (atoi , atof ,...)

در ضمن چند تا از مهمترین توابع در C مثل malloc , calloc رو داره که این توابع برای گرفتن حافظه پویا استفاده می شوند . مثلا می تونید در حین اجرای یک حلقه به مقدار دلخواه متغییر ایجاد کنید و برای اونها حافظه بگیرید و هر وقت که خواستید اونها رو با پس دادن حافظه به سیستم از بین ببرید اینطوری در مصرف حافظه صرفه جویی می شه. البته در C++ معمولا دیگه از این توابع استفاده نمیشه بلکه از کلمات کلیدی new ,delete استفاده میشه که قویتره و استفاده از اونها خیلی راحتتره . البته اینها رو فقط برای آشنایی گفتم.

و چند تا تابع برای خروج از برنامه داره مثلا تابع exit(0); به برنامه (در هر جایی از اجرای برنامه که باشه ) خاتمه میده

توابع دیگه ای هم داره
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
سلام دوست عزيز.
اولا راجع به اين كه چرا
goto
استفاده كردم ، جواب: عادته و هيچ دليل خاصي نداره با روش شما مي تواند بهتر باشد.

دوما لازمه براي هر
header
تاپيك جدايي باز بشه و توابعش بحث بشه.

راجع به توضيحات خوبتان ، خيلي ممنونم. حتما باز هم بنويسيد. اگر هم كم توضيح بدهيد من بعدا با شرح بيشتر ميگم. پس شما بنويسيد تبديل و شرحش با من.
اتفاقا من داشتم ديشب calloc و malloc را مي خواندم.
راجع به اين ، يك مثال بزنيد . البته اگر وقت داشتيد. و يك حلقه معمولي هم بسازيد تا فرقش با اين روش معلوم بشه.
البته شايد كلا سئوالم اشتباه است. كلا بيشتر توضيح بدهيد تا كاربرد عملي اش دستمون بياد.
.
 

mohammad_110

کاربر فعال برنامه نویسی
کاربر فعال
تاریخ عضویت
22 ژانویه 2006
نوشته‌ها
60
لایک‌ها
0
به نقل از saalek :
سلام دوست عزيز.
اولا راجع به اين كه چرا
goto
استفاده كردم ، جواب: عادته و هيچ دليل خاصي نداره با روش شما مي تواند بهتر باشد.
سلام سالک جان

فکر می کنم به خاطر اینه که اسمبلی زیاد کار کردی ولی به هر حال بهتره توی اینجور زبانها تا اونجایی که میشه از goto استفاده نشه چون باعث ایجاد کد اسپاگتی میشه و پیدا کردن اشکال رو در برنامه به کابوس تبدیل می کنه و خوانایی برنامه رو کم می کنه (یعنی با یک نگاه بفهمی چی نوشتی ) . اصلا توی همه کتابها توصیه کردن که استفاده نکنید .

البته بعضی ها هم گفتن که در بعضی موارد خاص بهتره استفاده بشه . مثلا اگر چند حلقه تو در تو داشته باشیم و بخواهیم از حلقه داخلی یکباره بیرون بیاییم . که اینکار با break نمیشه .
کد:
while(   )
{
   for(    )
   {
      for(   )
      {
       goto a;
      }
   }
}
a:

البته ثابت شده که میشه تمام برنامه ها رو بدون goto و به صورت ساخت یافته نوشت .

تازه اصلا در خود اسمبلی هم که مجبوریم از goto استفاده کنیم بهتره یه جورایی ساخت یافته بنویسیم یعنی هر حلقه یک کار مخصوصی رو به طور کامل انجام بده تا کنترل برنامه از دستمون خارج نشه .

با این حال اگه به while و for عادت کنی دیگه حاضر نمیشی با goto بنویسی
 

mohammad_110

کاربر فعال برنامه نویسی
کاربر فعال
تاریخ عضویت
22 ژانویه 2006
نوشته‌ها
60
لایک‌ها
0
کد:
#include <conio.h>		
#include <iostream.h>				
[color=black]#include <stdlib.h>[/color]
void main()						
{		
clrscr();char c ;
[COLOR="red"] menu:[/COLOR]
 // ----------- shoroe ghaaleb -------------
 int x=10;
 int y;

y=[color=black]random[/color](x);

cout<<"y="<<y<<endl;


 // ----------- entehaye ghaaleb -----------
    cout<<"----------------------new run"<<endl;
[COLOR="red"]	c=getch();if(c != 'q') goto menu;[/COLOR]
}

برای مثال بهتر نیست این کد بالا رو اینطوری بنویسیم ؟
کد:
#include <conio.h>		
#include <iostream.h>				
#include <stdlib.h>
void main()						
{		
  clrscr();
  char c ;
[COLOR="red"]
  while((c=getch()) != 'q')
  {[/COLOR]
    // ----------- shoroe ghaaleb -------------
    int x=10;
    int y;
 
    y=random(x);
 
    cout<<"y="<<y<<endl; 

    // ----------- entehaye ghaaleb -----------
    cout<<"----------------------new run"<<endl;
  [COLOR="Red"]}[/COLOR]
}
 

mohammad_110

کاربر فعال برنامه نویسی
کاربر فعال
تاریخ عضویت
22 ژانویه 2006
نوشته‌ها
60
لایک‌ها
0
به نقل از saalek :
راجع به توضيحات خوبتان ، خيلي ممنونم. حتما باز هم بنويسيد. اگر هم كم توضيح بدهيد من بعدا با شرح بيشتر ميگم. پس شما بنويسيد تبديل و شرحش با من.
.
خواهش می کنم . اینطوری خیلی خوبه .
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
اين عادت را من از
qbasic
آورده ام.
خداييش روش شما هم منطقي تر است هم قابل فهم تر و هم ساخت يافته تر. من هم من بعد
ghaaleb
كار خود را به اين شكل قرار خواهم داد.
.
 

mohammad_110

کاربر فعال برنامه نویسی
کاربر فعال
تاریخ عضویت
22 ژانویه 2006
نوشته‌ها
60
لایک‌ها
0
به نقل از saalek :
اتفاقا من داشتم ديشب calloc و malloc را مي خواندم.
راجع به اين ، يك مثال بزنيد . البته اگر وقت داشتيد. و يك حلقه معمولي هم بسازيد تا فرقش با اين روش معلوم بشه.
البته شايد كلا سئوالم اشتباه است. كلا بيشتر توضيح بدهيد تا كاربرد عملي اش دستمون بياد.
.

سئوال شما درسته منتها من خیلی با اینها کار نکردم:wacko: ، فقط میدونم چطوری کار می کنن .
احتمالا تا شنبه یه کدی پیدا کردم . ( آخه پنجشنبه و جمعه اینجا تعطیله ;) )
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
محمد جان منتظريم. بعدا بايد توابع مربوط به هدرهاي مختلف از اين تاپيك جدا بشه و در تاپيكهايي با نام هدر مربوطه قرار بگيره. فعلا شما همين جا پست كنيد تا ببينيم چي ميشه.
=====================
با تشكر از محمد جان ، من بعد از قالب زير استفاده مي كنم.
تغيير كوچكي نسبت به طرح محمد جان دادم و آن اين بود كه while را آخر حلقه گذاشتم تا اجراي اول بلافاصله صورت بگيره و اجراهاي بعدي نياز به press any key داشته باشه.

کد:
#include <conio.h>
#include <iostream.h>

void main()
{
  clrscr();char c ;

            do {
    // ----------- shoroe ghaaleb -------------
   
 
    cout<<"ghaaleb"<<endl; 


    // ----------- entehaye ghaaleb -----------
    cout<<"----------------------new run"<<endl;
              }while((c=getch()) != 'q');

}
.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
حالا براي اينكه قالب جديد را افتتاح كنيم ، برنامه زير را امتحان مي كنيم.

کد:
#include <conio.h>
#include <iostream.h>
#include <stdlib.h>
void main()
{
  clrscr();
  char c ;
  char g;char h;
do {
    // ----------- shoroe ghaaleb -------------
    
    cout<<"press a key for g"<<endl; 
    g=getch();
     cout<<"g="<<g<<endl; 

    cout<<"press a key for h"<<endl; 
    h=getch();
     cout<<"h="<<h<<endl; 

    // ----------- entehaye ghaaleb -----------
    cout<<"----------------------new run"<<endl;
  }while((c=getch()) != 'q');

}

اين برنامه را اجرا كنيد. با زدن بعضي كليدها ، انگار كه دو كليد زده ايم. يعني از روي 2 تا از getch ها مي پريم. مثل f1 تا f12 و كليدهاي arrow ( همان بالا – پايين – چپ – راست) و بعضي كليدهاي ديگر كه خودتان امتحان كنيد.
البته اكثر برنامه نويسها برايشان اين مسئله امري بديهي است. چون مي دانند كه اين نوع كليدها داراي دو كد هستند. كد اسكي و كد اسكن.
براي اين نوع كليدها معمولا دو تا getch تعبيه مي شود.
راستش من الان مسلط نيستم به قضيه كه خوب توضيح بدهم.

فعلا اين برنامه را نوشتم تا حواستان به اين قضيه باشد تا دچار مشكل نشويد.
.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
مطالب مربوط به ماوس از آدرس زير:

http://www.geocities.com/rk_page

همه برنامه هايي كه من تابحال ديدم كه ماوس را بكار گرته بودند از وقفه Dos استفاده كرده بودند. و من هم اينجا از اين روش استفاده مي كنم.

البته قبلا راجع به رجيسترها و وقفه ها كمي توضيح داديم ولي يك خلاصه باز بگم كه ميشه وقفه ها را تابع در نظر گرفت كه كاري انجام مي دهند. در اينجا وقفه شماره 33 مورد استفاده ماست براي بكارگيري ماوس.
و با مقدار دهي به رجيسترها(كه حافظه هايي در cpu هستند نه در ram ) به نوعي وقفه را تنظيم مي كنيم براي كارهاي مختلفي كه انجام مي تواند بدهد. ميشه اين مقداردهي ها را ورودي تابع در نظر گرفت.
همچنين وقفه ها خروجي خود را به رجيسترها برمي گردانند كه مي تواند دقيقا جايي باشد كه ورودي گرفته. مثلا روي ah برگرداند.
اين مقدمه كافيه تا برنامه هاي خود را بگيم.

ولي قبلش بگم كه ماوس را هم ميشه در حالت متني احضار كرد و هم در حالت گرافيكي.
در حالت متني ، ماوس ، به شكل مستطيلي ايستاده است ولي در حالت گرافيكي به همان شكل معمول ماوس.
ولي روش كار در هر دو حالت يكي است و فرقي ندارد و من فقط در حالت متني مي گم. و همين كدها را اگر در حالت گرافيكي بكار بريد هم عمل مي كنه.(من امتحان كردم)
ولي وقتي اينجا cout مي نويسيم ، معلومه كه در گرافيك بايد چيز ديگه بنويسيم . كدهايي كه آنجا عمل مي كند ، منظور ، قسمت اسمبلي است.

و يك نكته هم اين كه dos.h را بايد include كرد.

اولين برنامه تشخيص مي دهد كه ماوس قابل دسترسي هست يا نه.

کد:
#include <conio.h>
#include <iostream.h>
#include <dos.h>
void main()
{
  clrscr();
  char c ;

              do {
    // ----------- shoroe ghaaleb -------------
     union REGS i,o;

    i.x.ax=0;
    int86(0x33,&i,&o);
    
   if(o.x.ax==0)
 cout<<"No Mouse Available"<<endl; 
   else
  cout<<"Mouse Available"<<endl; 

    // ----------- entehaye ghaaleb -----------
    cout<<"----------------------new run"<<endl;
                  }while((c=getch()) != 'q');

}

در اينجا ax را صفر مي گيريم و وقفه 33 را احضار مي كنيم ، و خروجي اين وقفه هم در ax برميگرده كه از آن مي فهميم كه ماوس قابل دسترس هست يا نه.
به نوعي ميشه بگي از سرويس شماره صفر اين وقفه استفاده شده.
.
البته قانونا با
ah
كار مي كنند ولي آن سايت اين طور نوشته بود و عمل هم مي كنه پس من تغيير ندادم.
.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
ديگه سرويسهاي ديگه هم مشابه بالا.
سرويس 1 براي show كردن ماوس.
سرويس 2 براي hide كردن ماوس.
سرويس 3 براي يافتن محل ماوس. و همچنين فهميدن دكمه هاي فشرده ماوس. يعني كليك چپ و راست و مياني يا با همديگر.
سرويس 4 براي set كردن محل ماوس.

کد:
#include <conio.h>
#include <iostream.h>
#include <dos.h>
#include <stdlib.h>
void main()
{
  clrscr();
  char c ;

do {
    // ----------- shoroe ghaaleb -------------
     union REGS i,o;

  i.x.ax=1;
 int86(0x33,&i,&o);  // show mouse

    // ----------- entehaye ghaaleb -----------
    cout<<"----------------------new run"<<endl;
  }while((c=getch()) != 'q');

}

برنامه بالا باعث نمايش ماوس است.

کد:
#include <conio.h>
#include <iostream.h>
#include <dos.h>
void main()
{
  clrscr();
  char c ;

do {
    // ----------- shoroe ghaaleb -------------
     union REGS i,o;
  
    i.x.ax=1;
    int86(0x33,&i,&o);  
getch();
    i.x.ax=2;
    int86(0x33,&i,&o); 

    // ----------- entehaye ghaaleb -----------
    cout<<"----------------------new run"<<endl;
  }while((c=getch()) != 'q');

}

برنامه بالا ابتدا ماوس را نشان مي دهد و بعد با فشردن دكمه اي از getch رد ميشه و به كد مخفي كردن ماوس مي رسه. در سايت مذكور علت اين كه چرا مخفي شدن ماوس را مفيد دانسته بود ، گفته بود كه گاهي نمي خواهيم ماوس شكلي را كه داريم مي كشيم را پاك كند كه من نفهميدم ولي عينا نقل كردم شايد شما متوجه بشيد.
===============
ويرايش 3 تا 4 روز بعد:
من يك برنامه داشتم كار مي كردم ديشب، جايي كه ماوس بود شكل ناقص كشيده مي شد. حالا فهميدم مخفي كردن ماوس چه كاربردي دارد. يعني بايد قبل رسم، ماوس را مخفي كنيم و بعد رسم ظاهر كنيم. البته اگر ماوس آنجايي است كه مي خواهيم رسم كنيم.

کد:
#include <conio.h>
#include <iostream.h>
#include <dos.h>
void main()
{
  clrscr();
  char c ;

do {
    // ----------- shoroe ghaaleb -------------
     union REGS i,o;
  
  i.x.ax=1;
  int86(0x33,&i,&o);  
while(!kbhit())
  {
   i.x.ax=3;
   int86(0x33,&i,&o);
   gotoxy(9,9);
  
   cout<<o.x.cx<<"      "<<o.x.dx;
  
  }


    // ----------- entehaye ghaaleb -----------
    cout<<"----------------------new run"<<endl;
  }while((c=getch()) != 'q');

}

برنامه بالا حلقه اي تشكيل داده براي نمايش x و y محل ماوس. اين نوع حلقه را قبلا گفتيم كه با فشردن يك كليد خاتمه ميابد. ولي با حركت ماوس اختلالي در چرخش آن پيش نمي آيد.

کد:
#include <conio.h>
#include <iostream.h>
#include <dos.h>
void main()
{
  clrscr();
  char c ;

do {
    // ----------- shoroe ghaaleb -------------
     union REGS i,o;
  int button;


  
  i.x.ax=1;
 int86(0x33,&i,&o);  
while(!kbhit())
  {
   i.x.ax=3;
   int86(0x33,&i,&o);

  gotoxy(8,8);  
 button=o.x.bx&7;
 switch(button)
    {
      case 1:
cout<<"Left button pressed                                  ";
      break;

      case 2:
cout<<"Right button pressed                                  ";
      break;

      case 4:
cout<<"Middle button pressed                                  ";
      break;

      case 3:
cout<<"Left and Right buttons pressed                          ";
      break;

      case 5:
cout<<"Left and Middle buttons pressed                          ";
      break;

      case 6:
cout<<"Right and Middle buttons pressed                          ";
      break;

      case 7:
cout<<"All the three buttons pressed                          ";
      break;

      default:
cout<<"No button pressed....";
    }
  }


    // ----------- entehaye ghaaleb -----------
    cout<<"----------------------new run"<<endl;
  }while((c=getch()) != 'q');

}

برنامه بالا باز از همان نوع حلقه دارد و فشردن دكمه هاي مختلف ماوس را گزارش مي كند.

کد:
#include <conio.h>
#include <iostream.h>
#include <dos.h>
void main()
{
  clrscr();
  char c ;

do {
    // ----------- shoroe ghaaleb -------------
     union REGS i,o;
  int button;


  
  i.x.ax=1;
 int86(0x33,&i,&o);  
while(!kbhit())
  {
   i.x.ax=3;
   int86(0x33,&i,&o);
   gotoxy(2,2);
 
   cout<<o.x.cx<<endl;
    cout<<o.x.dx<<endl;
getch();

 i.x.ax=4;
    i.x.cx=150;
    i.x.dx=100;
    int86(0x33,&i,&o);
  }


    // ----------- entehaye ghaaleb -----------
    cout<<"----------------------new run"<<endl;
  }while((c=getch()) != 'q');

}

برنامه بالا با كدنويسي ماوس را به نقطه اي پرتاب مي كند. نمي دانم كاربردش چيه ولي طرز كار برنامه بالا اينه كه با زدن كليدي از صفحه كليد ، از getch عبور مي كنه برنامه و ماوس به جاي دلخواه يعني 150 و 100 مي پرد.

در سايت يك برنامه هم گفته بود براي محدود كردن ماوس در محدوده اي كه من ديگر نقل نكردم و برنامه هاي ديگه هم بود. خودتان مي توانيد مراجعه كنيد.
.
يك نگاهي هم به :

http://electrosofts.com/cgraphics/mouse.html

بياندازيد. البته من دقيق نمي دانم چيه. فعلا آدرسش را گذاشتم تا بعدا باز مراجعه كنم.

و اين:

http://www.codeproject.com/Purgatory/mouseasp.asp

.
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
نمي دانم كاربردش چيه
خوب فرض كن دو دكمه روي پنجره است و بعد هنگامي كه كدي وارد ميشه ماوس رو دوست داري بره رو دكمه ok و اگه هيچز وارد نشد يا اطلاعات پاك شد بره رو دكمه كنسل يا مثل اينها
اميدوارم كمك كنه
 

mohammad_110

کاربر فعال برنامه نویسی
کاربر فعال
تاریخ عضویت
22 ژانویه 2006
نوشته‌ها
60
لایک‌ها
0
اين برنامه را اجرا كنيد. با زدن بعضي كليدها ، انگار كه دو كليد زده ايم. يعني از روي 2 تا از getch ها مي پريم. مثل f1 تا f12 و كليدهاي arrow ( همان بالا – پايين – چپ – راست) و بعضي كليدهاي ديگر كه خودتان امتحان كنيد.
البته اكثر برنامه نويسها برايشان اين مسئله امري بديهي است. چون مي دانند كه اين نوع كليدها داراي دو كد هستند. كد اسكي و كد اسكن.
براي اين نوع كليدها معمولا دو تا getch تعبيه مي شود.

بعضی از کلید ها دو کد ارسال می کنند . این کلید هایی که گفتید ابتدا کد 0 و بعد کد مربوط به به آن کلید رو ارسال می کنند (فکر می کنم به این کلید ها کلید های کنترلی می گن . البته مطمئن نیستم ) . برا ی همین بعد از getch باید چک کنیم که کدی که دریافت کردیم صفر هست یا نه اگر صفر بود یک بار دیگه getch می کنیم تا کد مشخص کننده کلید رو بگیریم .
 
بالا