الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الماوس في C++

مغلق
بدأه medo_elkorsan في 20 فبراير 2004 · 12 رد · 2,654 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

كيف يمكن ادخال الماوس الي التطبيق ؟؟؟

محمد بركات

مصر

لا اله الا الله
#2

يمكن ادخال تطبيقات الفارة في لغة سي++ تحت نظام التشغيل دوز وذلك عن طريق

استخدام الايعاز int86 or the instraction int86x

الموجود في الهدر فايل dos.h

مع تحيات الصديق حيدر بالتعاون مع الصديق عمار

call us at http://www.geocities.com/triple_3_c]Triple C

#3
#include <dos.h>
#include <stdio.h>
#include <conio.h>

struct Mouse
{
int x;
int y;
int but;
};

void show_mouse()
{
_AX=001;
geninterrupt(0x33);
_AX=1;
geninterrupt(0x33);
}

Mouse GetMouse()
{
	Mouse t;
	_AX=3;
	geninterrupt(0x33);
	t.x=_CX;
	t.y=_DX;
	t.but=_BX;
	return t;
}


int main()
{
	Mouse m;
	_AX=0;
	geninterrupt(0x33);
	if(_AX==0)
	{
	printf("Mouse not");
	}
	else
	{

	printf("\n\nMouse Installed");
	show_mouse();
	}
	while(1)
	{
	m=GetMouse();
	gotoxy(65,1);
	printf("%d,%d",m.x,m.y);
	if(m.button==1)
  printf("\nLeft Button");
  break;
	}
getch();

return 0;
}

تم تعديل هذه المشاركة بواسطة HGB في 19 أبريل 2004 في 12:56

#4

السلام عليكم ,,

بارك الله فيك أخي khabini.com على سرعة الاستجابة :)

وقمت بوضع الكود الخاص بك بين معقفات

 لتبدو بشكل أجمل للناظر ,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#5

شكرا للأخ الكريم

و لكن لى ملاحظه

لا يعمل هذا الكود على فيجوال سى ++

#6

شكرا لك جدا جدا جدا .....

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

انا استفدت منه طبعا (وخصوصا من المشرف) بس عن طريق مصطلحات او كلام عم

بس دي اول مره حد يديني كود ....

بس في حاجه .انا اصراحه متعودتش اخد كود من غير مفهمه .يارين ان مكانش فيها ايلت زوق تشرح الكود وبالتفصيل , وبعدين هي الاوامر اللي زي mouse move و الحاجات بتاعت الفيجوال بيسيك دي هتتعمل ازاي

شكرا

محمد بركات

_مصر_

لا اله الا الله
#7

إذا كنت تريد تعلم السي فعليك أن تنسى الفيجوال بيسيك

و أنا لا أزال مبتدأ

و أتمنى أن نوصل مع بعض لحل مثل ماوس موف

#8

السلام عليكم,

حين نريد أن نستعمل الماوس في برامج من نوع الكنسول فإننا نقترب شيئا ما من نوع برمجة الوندوز التي تعتمد على البرمجة Events .فإنه لا يمكن أن نضع الكود الخاص للماوس في سطر واحد بل يجب أن يكون في حلقة ويقوم بانتظار أي رسالة من طرف الماوس أو غيرها. والدالة المستعملة لهدا الغرض في الفجوال س++ هي :

ReadConsoleInput وإدا رأينا ما تقول عليها MSDN فهي كما يلي :

BOOL ReadConsoleInput(
  HANDLE hConsoleInput,  // handle to a console input buffer
  PINPUT_RECORD lpBuffer,  // address of the buffer for read data
  DWORD nLength,         // number of records to read
  LPDWORD lpNumberOfEventsRead 
                         // address of number of records read
);

وهي تطلب أربع بارامترات:

1 - وهو الهاندل لنافدة الكونسول المستعملة ويمكن أن نعثر عليه باستدعاء الدالة التالية :

GetStdHandle التي تعطينا الهاندل لنافدة الكنسول التي نحن شغالين فيها.

2- وهو من نوع ستراكت وفيه نجد كل ما نريد معالجته : الماوس - الكايبورد وغيره ومن MSDN أنقل لكم هده :

typedef struct _INPUT_RECORD { // ir 
    WORD EventType; 
    union { 
        KEY_EVENT_RECORD KeyEvent; 
        MOUSE_EVENT_RECORD MouseEvent; 
        WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent; 
        MENU_EVENT_RECORD MenuEvent; 
        FOCUS_EVENT_RECORD FocusEvent; 
    } Event; 
} INPUT_RECORD;

3- نعطي عدد الستركت السابقة التي نريد قراءتها وهي بمثابة عدد Events التي نريد أن نقرأها

4- وهو مؤشر لعدد الستراكت المقروءة فعليا فمثلا يمكن أن نطلب قراءة العدد 200 ولكن في الحقيقة لا يكون هدا العدد كله متوفر فهدا العدد يعطينا الرقم الدي تم قراءته فعليا.

وهكدا يجب عمل حلقة تقرأ هده الستركت المتوفرة ونقارن هل هي مرسولة من الماوس إدا كنا نهتم بالماوس وفي هده الحالة نعمل ما نريد.

هدا فيما يخص النظري وإدا أراد الإخوان سأحاول إن شاء الله بوضع مثال عن هدا.

أتمنى لكم التوفيق وإلى اللقاء.

#9

بعد الشكر ..

فأنا اختلف معك في اننا هنتكلم عن ال consol wizard والصراحه انا كان نفسي اسئل في الموضوع ده عن اهميه البرمجة بالسي لعمل برامج تعمل في بيئة window فانا اعتبر ده _ اسف _ اي كلام .

ده بالنسبة لطموح الواحد في استخدام ++ C . انا مثلا اقصي طموحي (متهيقلي صعب)

هو برمجة الانظمة . عشان كده انا رافض اي كلام من الاساس عن consol wizard .

انا مش مس هستفيد من برامج تعمل مع الوندوز بس !

انت ايه رأيك (مهم جا بالنسبة لي (رأيك يعني))

محمد بركات

_مصر_

لا اله الا الله
#10

السلام عليكم أخى و الله إنى لى نفس الطموح

و لهذا أرسل لك بعض الأمثله الهامه

و أرغب فى التعاون

Win Example.zip

#11

السلام عليكم,

الأخ محمد : اسمح لي فأنا لم أفهم كثيرا ما تقصده . إن كنت تريد البرمجة تحت الوندوز فالأمر سهل جدا سواءا ب س أو س++ .

وإدا كنت تريد برمجة الماوس تحت بيئة الدوس وحدها - 16 بايت - فلنعلم أنه الفجوال س++ 6 وما فوق لا يتيح هدا النوع من البرمجة فهو خاص للنظام المحروس 32 بايت.

ولبرمجة الأنظمة لم يسبق لي أن جربتها ب س ولكن لدي تجربة فيها بالأسمبلر وهنا نعلم أن هناك Interruptions خاصة بالماوس يمكن استعمالها لهدا الغرض. وعلما أيضا أنه يمكن أن نزيد كود بالأسمبلر داخل البرمجة ب س أو س++ فأغلب الكمبايلرز المشهورة تتيح هدا. وكما أن في البرنامج الدي كتبه الأخ khabini هنا فالدوال مثل geninterrupt فهي تقوم باستدعاء Interruption ووضعت على هدا الشكل حتى تسهل البرمجة بالنسبة لمبرمجي س.

إلى اللقاء.

#12

ان كان نفسي أسئلكم في المندي عن الالوان ال 32 بايت مينفعش اخليها تبقي موجوده في برنامج اندر دوس يعني متشتغلش إلا وكرت الشاشة متعرف . اكيد (متهيقلي ) ده ينفع اني اشغل true color في ال dosh .

لا اله الا الله
#13

السلام عليكم ,,

الأخ medo_elkorsan كان يقصد أنه ما من داع للتبحر في برمجة السي في ال Console ,, وهذا صحيح ,, فالكونسول فقط لتعلم أساسيات برمجة السي++ ولاداعي فيه للتبحر في استخدام الماوس والرسم والامور الأخرى ,, حيث انها مضيعة للوقت ,, الا بالطبع لو كانت تدرس في الجامعات والمعاهد ,, وربنا يستر :)

banner_60_468.gif

NOTHING IS IMPOSSIBLE

هذا الموضوع مغلق.

مواضيع مشابهة