سؤال

لدي تطبيق MFC يفلت عددا من مؤشرات ترابط العامل المختلفة ومجموعة مع VS2003.

عند استدعاء CTREECTRL :: GetitemState () أنا أحيانا احصل على حوار تأكيد Debug Popup. أفترض أن هذا لأنني مررت بمقبض لعنصر غير صالح ولكن هذا ليس اهتمامي الفوري.

قلقي هو: من سجلاتي، يبدو كما لو أن مؤشر ترابط MFC يستمر في خدمة عدد من رسائل Windows مع عرض مربع حوار التأكيد. اعتقدت أن حوار التأكيد كان مشروط، لذا كنت أتساءل عما إذا كان هذا ممكنا؟

هل كانت مفيدة؟

المحلول

يحتوي مربع الرسالة الذي يوضح فشل التأكيد بمضخة رسالة لأغراضها الخاصة. ولكن سوف ترسل جميع الرسائل التي تأتي، وليس فقط تلك الخاصة بصندوق الرسالة (وإلا فقد يتم حظر الأشياء).

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

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

يمكنك تغيير كيفية فشل مكتبة مكتبة وقت تشغيل Visual Studio في Display _crtsetReportMode.. وبعد يمكنك إيقاف تشغيله في مصحح الأخطاء و / أو تسجيل الدخول إلى نافذة الإخراج بدلا من محاولة إظهار مربع الحوار.

نصائح أخرى

تحتاج مربعات الحوار (حتى صندوق الرسائل) إلى ضخ قائمة انتظار الرسائل، حتى لو كانت مشرفة. وإلا كيف يعرفون أنك نقرت على زر "موافق"؟

إذا كنت بحاجة إلى إيقاف كل شيء عند مشغلات تأكيد أنه عادة ما لا يصعب كتابة تنفيذك الخاص assert() (أو ASSERT() أو أيا كان) من شأنه أن ينكسر المصحح بدلا من عرض صندوق رسائل يسأل عما إذا كنت ترغب في اقتحام المصحح (ربما فقط إذا كان يحدد مصحح الأخطاء مرفقا).

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