diff --git a/DDrawCompat/Gdi/WinProc.cpp b/DDrawCompat/Gdi/WinProc.cpp index 7674a6f..96f40ae 100644 --- a/DDrawCompat/Gdi/WinProc.cpp +++ b/DDrawCompat/Gdi/WinProc.cpp @@ -68,6 +68,7 @@ namespace void onUninitMenuPopup(HMENU menu); void onWindowPosChanged(HWND hwnd, const WINDOWPOS& wp); void onWindowPosChanging(HWND hwnd, WINDOWPOS& wp); + LONG WINAPI setWindowLongA(HWND hWnd, int nIndex, LONG dwNewLong); void setWindowProc(HWND hwnd, WNDPROC wndProcA, WNDPROC wndProcW); template @@ -195,6 +196,30 @@ namespace return ddcWindowProc(hwnd, uMsg, wParam, lParam, CallWindowProcW, getWindowProc(hwnd).wndProcW); } + LONG WINAPI ddrawSetWindowLongA(HWND hWnd, int nIndex, LONG dwNewLong) + { + LOG_FUNC("ddrawSetWindowLongA", hWnd, nIndex, dwNewLong); + if (GWL_WNDPROC == nIndex) + { + return setWindowLongA(hWnd, GWL_WNDPROC, dwNewLong); + } + + if (GWL_STYLE == nIndex) + { + auto style = CALL_ORIG_FUNC(GetWindowLongA)(hWnd, GWL_STYLE); + if (style & WS_CLIPCHILDREN) + { + dwNewLong = style | WS_CLIPCHILDREN; + if (dwNewLong == style) + { + return LOG_RESULT(style); + } + } + } + + return LOG_RESULT(CALL_ORIG_FUNC(SetWindowLongA)(hWnd, nIndex, dwNewLong)); + } + BOOL WINAPI getMessage(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax, decltype(&GetMessageA) origGetMessage) { @@ -670,6 +695,8 @@ namespace Gdi HOOK_FUNCTION(user32, SetWindowLongW, setWindowLongW); HOOK_FUNCTION(user32, SetWindowPos, setWindowPos); + Compat::hookIatFunction(Dll::g_origDDrawModule, "SetWindowLongA", ddrawSetWindowLongA); + SetWinEventHook(EVENT_OBJECT_CREATE, EVENT_OBJECT_CREATE, Dll::g_currentModule, &winEventProc, GetCurrentProcessId(), 0, WINEVENT_INCONTEXT); SetWinEventHook(EVENT_OBJECT_NAMECHANGE, EVENT_OBJECT_NAMECHANGE,