// App is being Activated or Deactivated
if(uMsg == WM_ACTIVATE)
{
if(wParam != WA_INACTIVE)
{
// the app should now active, but may not have input focus
GameApp::Instance->m_bAppActive = true;
}
else // app is being DeActivated
{
GameApp::Instance->m_bAppActive = false;
// if our windows has focus, then discard it
/*if(GetFocus() == hWnd)
SetFocus(NULL);*/
} // we handled the message of app activation
return 0;
}
وفي 10 نيسان 2008 03:52 م، أعرب وسام البهنسي عن رأيه بالموقف كالآتي:
أود أن أسأل من لديه الاستعداد لإضافة دعم عصا التحكم Joystick؟LDR: LdrpWalkImportDescriptor() failed to probe C:\Valley_of_Kings\Game\CoreLib.dll
for its manifest, ntstatus 0xc0150002
type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.21022.8"
processorArchitecture="x86"
publicKeyToken="1fc8b3b9a1e18e3b">
في 10 ابريل 2008 03:13 م، عقد سلوان الهلالي حاجبيه بتفكير وقال:
لاحظت مباشرة "Microsoft.VC90.DebugCRT", لقد قمت بتنصيب ملفات الـ runtime التابعة لـ VC90 قبل فترة, ولكن كما يعلم الجميع هذه الملفات توزعها مايكروسوفت مبنية بنمط الـ Release, في حين إن ملفات الـ Debug المقابلة لها محمية من التوزيع بحقوق طبع خاصة من مايكروسوفت.. أي لا يمكن الحصول عليها قانونياً إلا عن طريق تثبيت Visual Studio 2008, وبما إن المكتبة CoreLib مبنية كما يبدو بإستخدام نمط Debug فإنها ستحتاج ملفات التشغيل الـ Debug التي هي غير موجودة! وهنا تكمن المعضلة...إكتشفت أيضاً أحد الأخطاء التي إرتكتبها وهي تصوري بأني شغلت اللعبة من الفجوال ستوديو عن طريق بناء الكود... لا أعلم كيف كنت متأكداً ولكن يبدو لي الآن إني كنت على خطأ كبير (تحصل معي هكذا أشياء دائماَ)... آسف لذلك☺وفي 10 ابريل 2008 03:13 م، قال سلوان الهلالي متحمساً:
(تعديل: طبعاً, إكتشفت فيما بعد إنه كان بإمكاني أن أستخدم Dependency Walker لأتلافى ذلك كله, وأعثر على المشكلة مباشرة... فقط لو كنت تذكرته, ولكن هذه التجربة بأكملها كانت مفيدة بشكل ما.)وفي 10 ابريل 2008 10:48 ص، ظهر شبح ابتسامة على وجه سلوان الهلالي وهو يقول:
بالمناسبة... ما هو يا ترى "DSK|RenderSmith"؟... ;-)أما في 10 ابريل 2008 10:48 ص، فقد تنهد سلوان الهلالي بارتياح وهو يرد:
لاحظت أيضاً أن اللعبة تستخدم أكثر من thread واحد, وذلك جميل.وفي 11 نيسان 2008 03:20 ص، ظهر شبح ابتسامة على وجه وسام البهنسي وهو يقول:
نعتذر إن كان هذا قد تسبب بإضاعة وقتك. كل ما ذكرته صحيح إلى درجة كبيرة. كما وضحتُ في مشاركة سابقة في حديثي عن مكتبة CoreLib، فإن هذه المكتبة تساعدنا في عدة أمور. كونها مبنية بنمط Debug (هو ليس نمط Debug في الحقيقة، لكن شيء قريب من ذلك) هو أحد العوامل التي تساعدنا في تحقيق النقاط السابقة الذكر. إلا أنني سأعود وأؤكد ثانية، هذه المكتبة لن تتسبب بتعطيلنا عن أداء مهامنا، إلا إن كنا نفكر بالاتجاه الخطأ.أما في 11 نيسان 2008 03:20 ص، فقد تنهد وسام البهنسي بارتياح وهو يرد:
كحل لمشكلتك، لن تضطر إلى تنصيب VS.NET 2008 (وإن كنا ندعوك لذلك بشدة). ستجد كمرفق مع هذه المشاركة ملف zip يحوي النسخة الخاصة من CoreLib التي تعمل مع VS.NET 2005. فقط استخرج الملفات التي فيها وضعهم بدلاً من نظائرهم في دليل اللعبة. أعد بناء المشروع كلية، ومن ثم قم بتشغيل اللعبة، ويجب أن تعمل الآن دون أي مشاكل...////////////////// Input masking hack //////////////////
extern unsigned short windowActiveInputMask;
#define KEYDOWN(vkCode) (GetAsyncKeyState(vkCode) &0x8000 &windowActiveInputMask)
unsigned short windowActiveInputMask = 0xffff;
case WM_ACTIVATE:
if(LOWORD(wParam) == WA_INACTIVE)
windowActiveInputMask = 0x0000;
else
windowActiveInputMask = 0xffff;
break;
في 11 ابريل 2008 03:20 ص، غمغم وسام البهنسي باستغراب قائلاً:
إلا أنني كنت أفكر بالموضوع من منظور عام أو تخيلي. وقد توصلت لبعض الأفكار بهذا الصدد، ويمكننا أن نناقشها سوية إذا أردتم (وإن كان الموضوع متقدم جداً ولن يفيدنا في هذا المشروع).في 10 ابريل 2008 10:21 م، غمغم سلوان الهلالي باستغراب قائلاً:
والآن.... إستعدوا للـ hack السريع الذي عملته لحل مشكلة الإدخال.....const short KeyDown(int vKey) const;
static bool m_bAppActive;
bool GameApp::m_bAppActive = true;
case WM_ACTIVATE:
if( LOWORD(wParam) == WA_INACTIVE )
m_bAppActive = false;
else
m_bAppActive = true;
break;
/////////////////////////////////////////////////////////////////////////////////////////////
// Function Name : GameApp::KeyDown
//
// Purpose : Returns virtual key state using GetAsyncKeyState() taking into account the
// application's window focus state.
//
// Params :
// int vKey: Specifies one of 256 possible virtual-key codes.
//
// Return Value : Returns 0 if the application does not have focus, vKey state otherwise.
/////////////////////////////////////////////////////////////////////////////////////////////
const short GameApp::KeyDown(int vKey) const
{
return GameApp::Instance->m_bAppActive? GetAsyncKeyState(vKey) &0x8000 : 0;
}
KEYDOWN(VK_RIGHT)
GameApp::Instance->KeyDown(VK_RIGHT)
في 08/ربيع الثاني/1429 03:27 م، عقد سلوان الهلالي حاجبيه بتفكير وقال:
والآن, تغيير جميع إستدعاءات الماكرو KEYDOWN في كود اللعبة بالطريقة الآتية:KEYDOWN(VK_RIGHT)
GameApp::Instance->KeyDown(VK_RIGHT)
#define KEYDOWN(key) GameApp::Instance->KeyDown(key)
وفي 14 نيسان 2008 11:12 م، ظهر شبح ابتسامة على وجه سعيد بسيوني وهو يقول:
برأيي مفيش داعي تعمل كده. بكل بساطة غير تعريف الماكرو نفسو عشان يعمل نداء للإجراء الجديد بتاعك..#define KEYDOWN(key) GameApp::Instance->KeyDown(key)