peekmessage () إعادة تعيين مؤشر الماوس
-
12-09-2019 - |
سؤال
أنا حاليا العبث مع تغيير مؤشر الماوس داخل لعبة مثل تطبيق C ++ لنظام التشغيل Windows XP.
لتغيير المؤشر الذي أستخدمه SetCursor()
والتمرير في المؤشر المرغوب، الذي يعمل. لكن خلال فترة الحلقة التي PeekMessage()
يسمى المؤشر الاستمرار في إعادة تعيين العودة إلى السهم الافتراضي.
هذه هي الحلقة المخالفة:
MSG msg;
while( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
أثناء تصحيح الأخطاء وجدت أن المؤشر تغير أثناء الاتصال PeekMessage()
بعد ذلك msg.message == 0x200، والتي يجب أن تجعل الرسالة واحدة من هذه:
WM_MOUSEFIRST = 0x200
WM_MOUSEMOVE = 0x200
لم أتمكن من العثور على أي معلومات حول سبب حدوث ذلك، وليس لديك أي خبرة في رسائل Windows.
شكرا.
يحرر:
وفق هنا قام النظام بإعادة توجيه مؤشر الطبقة في كل مرة يتحرك فيها الماوس، مما يعيده بفعالية إلى المؤشر الافتراضي. مع مراعاة ذلك، أضفت هذا إلى وظيفة رد الاتصال برسالة النافذة:
case WM_SETCURSOR:
return 0;
تم حل المشكلة.
المحلول
كيف قمت بتصحيح ذلك؟ ما لم تستخدم Softice أو بعض التطبيقات الأخرى التي لا تشارك مؤشر ماوس Windows، فسيكون من الصعب عزل المصحح من التطبيق.