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

سؤال محييرني

مغلق
بدأه المبرمج القادم في 29 نوفمبر 2002 · 13 رد · 606 مشاهدة · في ارشيف قسم C/C++
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته.

طبعاً السؤال للجميع.

كيف أستطيع أن أرسم في vc++6 لأني حقيقة إحترت في ذلك.

حاولت إستخدام

include but ولكن مافيه فايدة.

أخوكم المبرمج القادم

#3

:o:o:oأعتذر منك اخي المبرمج القادم لأني ما أستخدم vc++6 و ما أقدر أفيدك.

لكن جرب نصيحة أخونا اسماعيل ;):cool:;).

و قلنا على النتائج.:confused:.

#4

السلام عليكم و رحمة الله وبركاته .

أخواني إسماعيل و مبرمج المستقبل .

أنا آسف جداً على تأخري في الرد وذلك لأني نسيت كلمة المرور فجلسة تقريباً يوم ونصف أحاول وأرسل رسائل لإدارة المنتدى لكن ما فيه فايدة أضن كلهم مسافرين وحاولت أن أسجل مرة ثانية لكن التسجيل مغلق حتى هذه اللحظة وقبل الإفطار بعد ما تعبة كتبة أرقام كنت أتوقع أنها هية فجأة إلا وهية جت صح حقيقة إني ماني مصدق .... والحمدلله على كل حال.

أخي إسما عيل ... أنا دخلت الموقع إلي أشرتلي عليه ولكن تفاجأة بالمعلومات إلي فيه وما فهمة منه لأنه كان مليان ردود فلاخبطة على ونسخت أحد الردود وقريته مرة ثانية فأصبح الفهم صعب .

لذلك فأرجوا منك و من الجميع مناقشة هذا الموضوع بطريقةمتسلسلة حتى تتم الفايدة للجميع ولي ولك أخي إسماعيل ولجميع الأعضاء الشكر والتقدير وآسف مرة آخرى على التأخير في الرد..........:o

أخوكم المبرمج القادم :D

#5

نفذ هذا المثال خطوة خطوة .. وأي خطوة لم تفهمها اسأل..

1) قم بإنشاء مشروع جديد : New-->MFC AppWizard(exe)

2) إختر اسم للمشروع .. واضغط التالي.. إختر نوع البرنامج single Document ,ثم التالي حتى النهاية,..

3) الان لديك مشروع فارغ - أو هيكلي.. أتذكر فئة العرض؟؟- > إضغط عليها بزر الماوس الايمن-> إختر Add Windows message handler-> إختر الرسالة التالية : MW_MOUSEMOVE

-> OK .. طبعا لا داعي لان اقول لك أن هذه الرسالة يتلقاها البرنامج عند تحريك الماوس فوق المنطقة البيضاء.. اليس كذلك.. ولاّ أقول؟؟ طيب لا داعي

الان بعد أن ضغطت OK أُضيفت دالة جديدة الى فئة العرض..إضغط دابل كليك على هذه الدالة وحررها لتبدو كذلك:

void CDsView::OnMouseMove(UINT nFlags, CPoint point) 
{
	if(nFlags ==MK_LBUTTON)
	{

		CClientDC dc(this);
		dc.MoveTo(p1);
		dc.LineTo(point);
		p1=point;
	}

طبعا إسم البرنامج عندي هو Ds لهذا فإن فئة العرض عندي اسمها CDsView. ^

شرح الكود : جملة الـ if هي الكود الخاص بالتعرف إذا ما كان زر الماوس الايسر مضغوط أم لا .MK_LBUTTON - قيمة تدل أن زر الماوس الايسر مضغوط.فإذا كانت قيمة ال nFlags مساوية لهذه القيمة فمعنى هذا أن زر الماوس الايسر مضغوط..

CClientDC dc(this - لوضع قيمة الـ Device Context في متغير بإسم dc و this هي مؤشر للفئة الحالية.. بمعنى نريد قيمة Device Context للفئة الحالية.

الآن dc هو الـ Device Context والدالة moveto و Lineto هن أعضاء في هذا المتغير..

لكي تفهم عمل الدالتين MoveTo ,LineTo انظر الى عنوان الدالة :

void CDsView::OnMouseMove(UINT nFlags, CPoint point

عند تحريك الماوس تستدعى هذه الدالة ويعطينا الويندوز مع هذه الدالة بارامترات الاول nFlags وهو يختص بحالات ازرار الماوس (إستعملناه قبل قليل) والثاني point عبارة عن إحداثيات النقطة التي يتحرك فوقها

الماوس هل فهمت لماذا نعطي للدالةLineTo متغير بإسم point .. لكي يمد خط من النقطة المركزية الى النقطة التي يتحرك فوقها الماوس.. لو لم نستخدم MoveTo لأصبح برنامجنا يمد خطوطا من الزاوية اليسرى العلوية الى موقع الماوس .. لتصبح الاف الخطوط كالشعاع.. ما نريده نحن هو آداة FreeHand لهذا نستعمل الدالة moveTo لكي تحول النقطة المركزية الى النقطة السابقة لهذا الغرض عرفنا متغير عام بإسم p1

ووضعنا داخله قيمة النقطة .. وفي المرة القادمة يبدأ الخط من هذه النقطة.. فنرى نحن وكأننا نرسم خط يدوي عادي..

لنعود للتطبيق.. لكي تستخدم p1 عليك بتعريف متغير عام من نوع CPoint كيف؟

إضغط بزر الماوس الايمن على فئة العرض ->add Member Variable ,وعبئه كما يلي:

variable type :CPoint

variable Name: p1

public(*)

واضغط موافق.

يمكنك تشغيل البرنامج .. سيعمل لكن هناك مشكلة (انصحك بالتجريب) المشكلة أنك لا تستطيع أن ترسم خط مستقل .. سيرتبط فورا بالنقطة التي إنهينا منها الخط السابق.. جرّب...

الحل :

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

إضغط بزر الماوس الايمن على فئة العرض إختر Add Windows message handler-> إختر الرسالة التالية WM_LBOTTONDOWN و OK ..

تظهر هذه الدالة الجديدة في فئة العرض واسمها : OnLButtonDown --> دابل كليك لتحررها..

أكتب فيها فقط السطر التالي:

;p1=point

الان شغل الرنامج .. وارسم ما تشاء..

#6

اخي اسماعيل مذا تعني بهذه

) الان لديك مشروع فارغ - أو هيكلي.. أتذكر فئة العرض؟؟- > إضغط عليها بزر الماوس الايمن-> إختر Add Windows message handler-> إختر الرسالة التالية : MW_MOUSEMOVE

#7

انا قمت بالعمليتين الآولى بنجاح لكن رقم 3

#8

أخ إسماعيل وينك؟!!:mad:

#9

السلام عليكم ...

آسف على التأخير .. لأنني الصراحة امبارح كتبتلك رد مفصّل ولما اردت ارفق ملف كان الملف كبير فانحذف كل الرد اللي رديته.. فقلت خلاص بكرة بكتبه كمان مرة:: يعني بلاش :mad: ..

في الجههة اليمنى من كل مشروع تكون هناك قائمة بالفئات المكونة للمشروع, إحدى هذه الفئات هي فئة العرض - أخي اذا كنت ما بتعرف شي في فيجيوال سي++ مفضل تبدأ من البداية.. المهم -

فئة العرض موجودة في الصورة المرفقة( ان شاء الله انجح في ارفاقها :) )

اضغط عليها بزر الماوس الايمن ستخرج لك قائمة منبثقة اختر منها :

Add Windows message handler .. وهذا معناه ان تضيف دالة للرد على احدى رسائل النظام.. يعرض عليك البرنامج كل الرسائل المتاحة لهذه الفئة .. إختر الرسالة باسم : MW_MOUSEMOVE وهي رسالة يتلقاها البرنامج من نظام التشغيل بمجرد وجود حركة للماوس في مساحة المستخدم.- بعد ان تختار الرسالة وتضغط أو كي , سيضيف معالج الفئات دالة بإسم:OnMouseMove

يتم استدعاء هذه الدالة عند تحريك الماوس في منطقة المستخدم .. الان ارجو ان اكون قد شرحت شرحا واضحا -- عد للرد السابق واكمل .. والله ولي التوفيق.. واذا في سؤال لا تتردد في السؤال بس بلاش :mad: ;)

---

اخي انا اجد صعوبة في الشرح لأني مش عارف اذا كنت انت تعرف في فيجيوال سي++ ولا لأ.. اذا ما كنت لسة بادي فيه فيفضل ان تبدأمن الاسس وهذه نصيحة.

#10

شكراً لك أخ إسماعيل على هذا الرد الجميل و الشعور الرائع :mad:صح إني مبتدء ولكن ..

بحاول اتعلم وتشوف إن شاء الله.

:mad:أخي اذا كنت ما بتعرف شي في فيجيوال سي++ مفضل تبدأ من البداية.. :mad:.(f):mad:(f)

#11

أخي.. أعتذر اذا كنت قد جرحتك بكلماتي فانا لم اقصد التقليل من شأنك - لا والله - بل قلت لك نصيحة للإبتداء السليم في تعلم الفيجيوال سي++ وهو من البداية وهذا لا يعني انني احاول ايصال شيء غير الذي اقوله....

أكرر إعتذراي واعرض عليك اي مساعدة اذا كان في امكاني تقديمها..

وتحياتي.

#12

اخ إسماعيل شكراً لك حقيقة أنا مازلت مبتدء وأنا باقي في الاساسيات لذلك يقول المثل من بغاها كلها خلاها كلها .

وهذه أحس انها مرحلة بعد مرحلة looping ,function,arryas and class فإذا عديت هذي كلها أقد أدخل في graphics وأنا مرتاح . وآسف أني أخذت ثوب ماهوا على مقاسي..

ولكن مازلت عند رأي إن شاء الله إني أتعلمها وأبدع فيها وأنا عند وعدي إن شاء الله .

وهذا مثال صلحته أنا بنفسي .

#include
#include
int month(int);
int day(int);
int year(int);
void main()
{
	int dd,yy,mm,m,c,e;
	cout<<"Enter your day.....?";
	cin>>dd;
	cout<<"Enter your month...?";
	cin>>mm;
	cout<<"Enter your year....?";
	cin>>yy;
	cout<<"[";
	m=month(mm);
	c=day(dd);
	e=year(yy);
	cout<<"]n";
	getch();	
}
int month(int mm)
{
	int m;
	if(mm==1)
		cout<<"January-";
	else if(mm==2)
		cout<<"February-";
	else if(mm==3)
		cout<<"March-";
	else if(mm==4)
		cout<<"April-";
	else if(mm==5)
		cout<<"may-";
	else if(mm==6)
		cout<<"June-";
	else if(mm==7)
		cout<<"July-";
	else if(mm==8)
		cout<<"August-";
	else if(mm==9)
		cout<<"September-";
	else if(mm==10)
		cout<<"October-";
	else if(mm==11)
		cout<<"November-";
	else if(mm==12)
		cout<<"December-";
	else
		cout<<" this is not month !n";
	return m;
}

int day(int dd)
{
	int c;
	if(dd>0 && dd<33)
		cout<	else 
		cout<<"there is no day....";
	return c;
}

int year(int yy)
{
	int e;
	if(yy>1990 && yy<2020)
		cout<	else 
		cout<<"there is no year....";
	return e;
}
#13

أخي هذا تقدم رائع ...

والى الامام...

(f)(f)

#14

شكرا أخي اسماعيل .:D

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

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