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

الفائدة الثامنة - تغيير شكل المؤشر -

مغلق
بدأه عبدالرحمن في 14 أغسطس 2001 · 5 رد · 4,393 مشاهدة · في قسم المواضيع الهامة في قسم السي /سي++
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

ستكون هذه الفائدة عن تغيير شكل الماوس (Cursor) وذلك كالتالي :-

نبدأ بمشروع جديد من MFC

من Class wizard ومن قسم ال Messages نختار WM_LButtonDown ومن ثم نضيف لها Function

و بعدها نضيف الكود التالي :-

	// TODO: Add your message handler code here and/or call default

	HCURSOR hCursor;
	hCursor = AfxGetApp()->LoadStandardCursor(IDC_WAIT);
	SetCursor(hCursor);

	CDialog::OnLButtonDown(nFlags, point);

السطر الاول تعليق ثابت

السطر الثاني عرفنا متغير من فئة مؤشرات الفارة

السطر الثالث اضفنا الدالة LoadStandardCursor وهي من الدوال الثابتة من AfxGetApp

ومن ثم وضعنا اسم المؤشر وهو IDC_WAIT

وهناك اسماء كثيرة للمؤشرات

اما السطر الرابع فهو لتغيير شكل المؤشر فعليا . وما بين القوسين هو المتغير الذي وضعنا فيه المؤشر IDC_WAIT

والسطر الخامس فهو سطر ثابت .

أرجو ان اكون قد افدت وان ارجو ان يناقش الموضوع بصورة اوسع

نسال الله ان يكون هذا المنتدى عامرا بالعلم .

لاني شايف هذي اليومين جهود اخواننا زادت وما اقول الا الله يقويكم .

اخوكم عبدالرحمن ..

#2

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

الله يعطيك العافية أخي عبد الرحمن:)

و أود أن أضيف المداخلة التالية :

يمكنك إخفاء ال Cursor وإظهارها عن طريق التابع ShowCursor حيث يوجد متحول داخلي يتم زيادته بمقدار 1 عند تنفيذ التابع بالشكل التالي :

ShowCursor(true);

بينما يتم انقاص هذا المتحول بمقدار 1 عند تنفيذ التابع بالشكل التالي:

ShowCursor(false);

و عندما نقوم بتنفيذ هذا التابع بالشكل التالي:

ShowCursor(false);
ShowCursor(false);

أي طلبنا عملية إخفاء ال Cursor مرتين متتاليتين فلإظهار ال Cursor يجب تنفيذ التالي:

ShowCursor(true);
ShowCursor(true);

مع التحيات.

#3

الله يبارك فيك ..

#4

ميييية السلااااااامة:D

#5

بانسبة إلى استخدام SetCursor في أي محل في كود الفورم قد يؤدي إلى الحصول على نتائج غير مرغوب فيها ..

إن SetCursor لا تقوم بتغير شكل المؤشر بشكل دائم حيث إذا قمت بتحريك المؤشر سوف ترجع الصورة الأساسية للمؤشر التي تم تسجيلها عند بناء الفورم .

أفضل موقع لاستدعاء SetCursor وذلك إذا حبيت أن يكون الشكل دائم وهو أن تضع الكود في جسم الرسالة WM_SETCURSOR وهذه الرسالة يرسلها الويندوز في حالة أنه يريد معرفة شكل مؤشر الفأرة ، يعني بالعربي ترسل في حالة أي حدث للفأرة .

قم عن طريق ال ClassWizard بوضع كود تنفيذ الرسالة السابقة في الديالوج . وسوف تحصل على هذا التابع :

BOOL CMyDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
{
	// TODO: Add your message handler code here and/or call default

	return CDialog::OnSetCursor(pWnd, nHitTest, message);
}

أما البارامترات فهي :

pWnd : مؤشر إلى النافذة التي عليها المؤشر حاليا ، فقد يكون مؤشر إلى Button أو Listbox مثلا . ويمكن استخدام العنصر m_hWnd منه لمقارنته مع Handles معروفة مسبقا في نافذتك .

nHitTest : ويرسل فيها قيمة تدل على موقع المشيرة ، أي في الاطار HTBORDER أو في منطقة العمل HTCLIENT أو في شريط العنوان HTCAPTION أو الزاوية السفلية اليمنى HTBOTTOMRIGHT وهكذا ..

message : وهي رقم رسالة الفأرة ، فقد تكون WM_MOUSEMOVE أو WM_LBUTTONDOWN أو .. أو ..

طبعا يمكنك استدعاء التابع GetCursorPos إذا حبيت من أجل معرفة احداثيات الفأرة بالنسبة إلى الشاشة .

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

وإذا كان عندك أي استفسار أو سؤال فأنا جاهز .. :)

Coding on the Cloud and for the Cloud!

My Blog

#6

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

يمكن أيضا بطريقة أخرى تغيير المؤشر للنافذة باستخدام التابع SetClassLong و ذلك كالتالي :

HCURSOR hCursor;
hCursor = AfxGetApp()->LoadStandardCursor(IDC_WAIT);
SetClassLong(m_hWnd,GCL_HCURSOR,(long)hCursor);

حيث يتم تغيير ال Cursor المسجلة ضمن إلى النافذة و قد استخدمت نفس التابع في إحدى تجاربي و ذلك من أجل تغيير الأيقونة المسجلة في النافذة

مع التحيات.

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

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