1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-15 06:04:49 +01:00

add new .ini settings fixwndprochook

This commit is contained in:
FunkyFr3sh 2021-06-02 14:29:25 +02:00
parent 7a7b84088f
commit 96714b01c0
3 changed files with 28 additions and 2 deletions

View File

@ -111,6 +111,7 @@ typedef struct cnc_ddraw
BOOL nonexclusive;
BOOL fixpitch;
BOOL fixchildwindows;
BOOL fixwndprochook;
BOOL d3d9linear;
BOOL backbuffer;
BOOL passthrough;

View File

@ -50,6 +50,7 @@ void cfg_load()
g_ddraw->nonexclusive = cfg_get_bool("nonexclusive", FALSE);
g_ddraw->fixpitch = cfg_get_bool("fixpitch", FALSE);
g_ddraw->fixchildwindows = cfg_get_bool("fixchildwindows", TRUE);
g_ddraw->fixwndprochook = cfg_get_bool("fixwndprochook", FALSE);
g_ddraw->d3d9linear = cfg_get_bool("d3d9linear", TRUE);
g_ddraw->backbuffer = cfg_get_bool("backbuffer", TRUE);
g_ddraw->passthrough = cfg_get_bool("passthrough", TRUE);

View File

@ -288,10 +288,34 @@ LRESULT WINAPI fake_SendMessageA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lPar
return result;
}
static WNDPROC g_compat_wndproc;
LRESULT CALLBACK compat_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
return CallWindowProcA(g_compat_wndproc, hWnd, uMsg, wParam, lParam);
}
LONG WINAPI fake_SetWindowLongA(HWND hWnd, int nIndex, LONG dwNewLong)
{
if (g_ddraw && g_ddraw->hwnd == hWnd && nIndex == GWL_STYLE)
return 0;
if (g_ddraw && g_ddraw->hwnd == hWnd)
{
if (nIndex == GWL_STYLE)
return 0;
if (nIndex == GWL_WNDPROC && g_ddraw->fixwndprochook)
{
if (dwNewLong == (LONG)compat_WndProc)
{
LONG result = real_SetWindowLongA(hWnd, nIndex, (LONG)g_compat_wndproc);
g_compat_wndproc = NULL;
return result;
}
else if (!g_compat_wndproc)
{
g_compat_wndproc = (WNDPROC)real_SetWindowLongA(hWnd, nIndex, dwNewLong);
return g_compat_wndproc ? (LONG)compat_WndProc : 0;
}
}
}
return real_SetWindowLongA(hWnd, nIndex, dwNewLong);
}