المساعدة - البحث - قائمة الأعضاء - التقويم
نسخة كاملة: الفائدة الثامنة - تغيير شكل المؤشر -
برمجة - شبكات - كمبيوتر - منتديات الفريق العربي للبرمجة > منتديات لغات البرمجة العام > منتدى مبرمجي C و ++C و C++.NET > أرشيف منتدى قسم السي ++
عبدالرحمن
ستكون هذه الفائدة عن تغيير شكل الماوس (Cursor) وذلك كالتالي :-
نبدأ بمشروع جديد من MFC
من Class wizard ومن قسم ال Messages نختار WM_LButtonDown ومن ثم نضيف لها Function
و بعدها نضيف الكود التالي :-
[code2]
// TODO: Add your message handler code here and/or call default

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

CDialog::OnLButtonDown(nFlags, point);
[/code2]

السطر الاول تعليق ثابت
السطر الثاني عرفنا متغير من فئة مؤشرات الفارة
السطر الثالث اضفنا الدالة LoadStandardCursor وهي من الدوال الثابتة من AfxGetApp
ومن ثم وضعنا اسم المؤشر وهو IDC_WAIT
وهناك اسماء كثيرة للمؤشرات
اما السطر الرابع فهو لتغيير شكل المؤشر فعليا . وما بين القوسين هو المتغير الذي وضعنا فيه المؤشر IDC_WAIT
والسطر الخامس فهو سطر ثابت .
أرجو ان اكون قد افدت وان ارجو ان يناقش الموضوع بصورة اوسع
نسال الله ان يكون هذا المنتدى عامرا بالعلم .
لاني شايف هذي اليومين جهود اخواننا زادت وما اقول الا الله يقويكم .
اخوكم عبدالرحمن ..
Adel Khayata
السلام عليكم.
الله يعطيك العافية أخي عبد الرحمنregular_smile.gif
و أود أن أضيف المداخلة التالية :
يمكنك إخفاء ال Cursor وإظهارها عن طريق التابع ShowCursor حيث يوجد متحول داخلي يتم زيادته بمقدار 1 عند تنفيذ التابع بالشكل التالي :
[code2]
ShowCursor(true);
[/code2]
بينما يتم انقاص هذا المتحول بمقدار 1 عند تنفيذ التابع بالشكل التالي:
[code2]
ShowCursor(false);
[/code2]
و عندما نقوم بتنفيذ هذا التابع بالشكل التالي:
[code2]
ShowCursor(false);
ShowCursor(false);
[/code2]
أي طلبنا عملية إخفاء ال Cursor مرتين متتاليتين فلإظهار ال Cursor يجب تنفيذ التالي:
[code2]
ShowCursor(true);
ShowCursor(true);
[/code2]
مع التحيات.
عبدالرحمن
الله يبارك فيك ..
Adel Khayata
ميييية السلااااااامةteeth_smile.gif
هاني الأتاسي
بانسبة إلى استخدام SetCursor في أي محل في كود الفورم قد يؤدي إلى الحصول على نتائج غير مرغوب فيها ..

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

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

قم عن طريق ال ClassWizard بوضع كود تنفيذ الرسالة السابقة في الديالوج . وسوف تحصل على هذا التابع :
[code2]
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);
}
[/code2]
أما البارامترات فهي :
pWnd : مؤشر إلى النافذة التي عليها المؤشر حاليا ، فقد يكون مؤشر إلى Button أو Listbox مثلا . ويمكن استخدام العنصر m_hWnd منه لمقارنته مع Handles معروفة مسبقا في نافذتك .
nHitTest : ويرسل فيها قيمة تدل على موقع المشيرة ، أي في الاطار HTBORDER أو في منطقة العمل HTCLIENT أو في شريط العنوان HTCAPTION أو الزاوية السفلية اليمنى HTBOTTOMRIGHT وهكذا ..
message : وهي رقم رسالة الفأرة ، فقد تكون WM_MOUSEMOVE أو WM_LBUTTONDOWN أو .. أو ..

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

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

وإذا كان عندك أي استفسار أو سؤال فأنا جاهز .. regular_smile.gif
Adel Khayata
السلام عليكم.
يمكن أيضا بطريقة أخرى تغيير المؤشر للنافذة باستخدام التابع SetClassLong و ذلك كالتالي :
[code2]
HCURSOR hCursor;
hCursor = AfxGetApp()->LoadStandardCursor(IDC_WAIT);
SetClassLong(m_hWnd,GCL_HCURSOR,(long)hCursor);
[/code2]
حيث يتم تغيير ال Cursor المسجلة ضمن إلى النافذة و قد استخدمت نفس التابع في إحدى تجاربي و ذلك من أجل تغيير الأيقونة المسجلة في النافذة
مع التحيات.
هذه "نسخة - خفيفة" من محتويات الرئيسية للإستعراض الكامل مع المزيد من الصور والخيارات الرجاء إضغط هنا.
Invision Power Board © 2001-2009 Invision Power Services, Inc.