سؤال

أنا حاليا العبث مع تغيير مؤشر الماوس داخل لعبة مثل تطبيق 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، فسيكون من الصعب عزل المصحح من التطبيق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top