/*++ Copyright (c) 2000 Microsoft Corporation Module Name: DirtTrackRacing.cpp Abstract: App shows a white (or whatever your default window background color is) screen when starting up which is inconsistent behavior from on 9x because on 9x it doesn't draw anything if the app's window class doesn't have a background brush. Use a black brush for the background. Notes: This is an app specific shim. History: 10/01/2000 maonis Created 11/07/2000 maonis Added checking for Dirt Track Racing Sprint Cars window class. 11/29/2000 andyseti Converted into AppSpecific shim. --*/ #include "precomp.h" IMPLEMENT_SHIM_BEGIN(DirtTrackRacing) #include "ShimHookMacro.h" APIHOOK_ENUM_BEGIN APIHOOK_ENUM_ENTRY(RegisterClassA) APIHOOK_ENUM_ENTRY(CreateWindowExA) APIHOOK_ENUM_END /*++ Register a black brush for the window class. --*/ ATOM APIHOOK(RegisterClassA)( CONST WNDCLASSA *lpwcx ) { CSTRING_TRY { CString csClassName(lpwcx->lpszClassName); if ( !csClassName.CompareNoCase(L"DTR Class") || !csClassName.CompareNoCase(L"DTRSC Class")) { WNDCLASSA wcNewWndClass = *lpwcx; wcNewWndClass.hbrBackground = (HBRUSH) GetStockObject(BLACK_BRUSH); LOGN( eDbgLevelError, "RegisterClassA called. Register a black brush for the window class=%s.", lpwcx->lpszClassName); return ORIGINAL_API(RegisterClassA)(&wcNewWndClass); } } CSTRING_CATCH { // Do nothing } return ORIGINAL_API(RegisterClassA)(lpwcx); } /*++ We need to hide the window at first so after you choose the mode and start the app it won't flicker. DDraw will automatically unhide the window. --*/ HWND APIHOOK(CreateWindowExA)( DWORD dwExStyle, LPCSTR lpClassName, // registered class name LPCSTR lpWindowName, // window name DWORD dwStyle, // window style int x, // horizontal position of window int y, // vertical position of window int nWidth, // window width int nHeight, // window height HWND hWndParent, // handle to parent or owner window HMENU hMenu, // menu handle or child identifier HINSTANCE hInstance, // handle to application instance LPVOID lpParam // window-creation data ) { CSTRING_TRY { CString csClassName(lpClassName); if ( !csClassName.CompareNoCase(L"DTR Class") || !csClassName.CompareNoCase(L"DTRSC Class")) { dwStyle &= ~WS_VISIBLE; LOGN( eDbgLevelError, "CreateWindowExA called. Hide the window at first for the window class=%s.", lpClassName); } } CSTRING_CATCH { // Do nothing } return ORIGINAL_API(CreateWindowExA)( dwExStyle, lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam); } /*++ Register hooked functions --*/ HOOK_BEGIN APIHOOK_ENTRY(USER32.DLL, RegisterClassA) APIHOOK_ENTRY(USER32.DLL, CreateWindowExA) HOOK_END IMPLEMENT_SHIM_END