diff --git a/main.c b/main.c index d93c4c4..ff6fcc2 100644 --- a/main.c +++ b/main.c @@ -349,6 +349,10 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) } return 0; + case WM_MOUSELEAVE: + mouse_unlock(); + return 0; + case WM_ACTIVATEAPP: /* C&C and RA stop drawing when they receive this with FALSE wParam, disable in windowed mode */ if (ddraw->windowed) @@ -406,6 +410,13 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) fake_GetCursorPos(NULL); /* update our own cursor */ lParam = MAKELPARAM(ddraw->cursor.x, ddraw->cursor.y); } + + if (ddraw->devmode) + { + mouse_lock(); + ddraw->cursor.x = GET_X_LPARAM(lParam); + ddraw->cursor.y = GET_Y_LPARAM(lParam); + } break; /* make sure we redraw when WM_PAINT is requested */ @@ -457,10 +468,7 @@ HRESULT __stdcall ddraw_SetCooperativeLevel(IDirectDrawImpl *This, HWND hWnd, DW return DD_OK; } - if(!This->devmode) - { - SetWindowLong(This->hWnd, GWL_WNDPROC, (LONG)WndProc); - } + SetWindowLong(This->hWnd, GWL_WNDPROC, (LONG)WndProc); if(!This->render.hDC) { diff --git a/mouse.c b/mouse.c index f5e98f4..868f0e6 100644 --- a/mouse.c +++ b/mouse.c @@ -187,7 +187,13 @@ void mouse_lock() { RECT rc; - if(mouse_active && !ddraw->locked) + if (ddraw->devmode) + { + while(ShowCursor(FALSE) > 0); + return; + } + + if (mouse_active && !ddraw->locked) { GetWindowRect(ddraw->hWnd, &rc); @@ -208,6 +214,12 @@ void mouse_unlock() RECT rc; POINT pt; + if (ddraw->devmode) + { + while(ShowCursor(TRUE) < 0); + return; + } + if(!mouse_active) { return; @@ -236,7 +248,7 @@ void mouse_unlock() void mouse_init(HWND hWnd) { - if(ddraw->mhack) + if(ddraw->mhack || ddraw->devmode) { hack_iat(&hacks[0]); mouse_active = TRUE;