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

allow to have game window bigger than screen size

This commit is contained in:
FunkyFr3sh 2023-08-24 18:37:16 +02:00
parent 8372627b82
commit aca18912b3
3 changed files with 45 additions and 3 deletions

View File

@ -4,7 +4,7 @@
#define VERSION_MAJOR 5
#define VERSION_MINOR 7
#define VERSION_BUILD 0
#define VERSION_REVISION 0
#define VERSION_REVISION 1
#define VERSION VERSION_MAJOR, VERSION_MINOR, VERSION_BUILD, VERSION_REVISION
#define VERSION_STRING ver_str(VERSION_MAJOR, VERSION_MINOR, VERSION_BUILD, VERSION_REVISION)

View File

@ -719,7 +719,7 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl
if (ChangeDisplaySettings(&g_ddraw->render.mode, CDS_TEST) != DISP_CHANGE_SUCCESSFUL)
{
/* everything failed, use windowed mode instead */
/* everything failed, use windowed/borderless mode instead */
g_ddraw->render.width = g_ddraw->width;
g_ddraw->render.height = g_ddraw->height;
@ -727,6 +727,20 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl
g_ddraw->render.mode.dmPelsHeight = g_ddraw->render.height;
g_ddraw->windowed = TRUE;
if (g_ddraw->render.width <= real_GetSystemMetrics(SM_CXSCREEN) &&
g_ddraw->render.height <= real_GetSystemMetrics(SM_CYSCREEN))
{
/* Switch to borderless mode if window fits into screen */
g_ddraw->fullscreen = TRUE;
}
else
{
/* Make window titlebar visible if window does not fit into screen */
g_config.window_rect.left = -32000;
g_config.window_rect.top =
real_GetSystemMetrics(SM_CYCAPTION) + real_GetSystemMetrics(SM_CYSIZEFRAME);
}
}
}
}

View File

@ -41,7 +41,6 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
switch (uMsg)
{
case WM_GETMINMAXINFO:
case WM_MOVING:
case WM_NCLBUTTONDOWN:
case WM_NCLBUTTONUP:
@ -51,6 +50,35 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
{
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
case WM_GETMINMAXINFO:
{
MINMAXINFO* mmi = (MINMAXINFO*)lParam;
if (g_ddraw->windowed && g_ddraw->width)
{
RECT rc = { 0, 0, g_ddraw->width, g_ddraw->height };
AdjustWindowRectEx(
&rc,
real_GetWindowLongA(g_ddraw->hwnd, GWL_STYLE),
GetMenu(g_ddraw->hwnd) != NULL,
real_GetWindowLongA(g_ddraw->hwnd, GWL_EXSTYLE));
// set minimum window size
//mmi->ptMinTrackSize.x = rc.right - rc.left;
//mmi->ptMinTrackSize.y = rc.bottom - rc.top;
if (mmi->ptMaxTrackSize.x < rc.right - rc.left)
mmi->ptMaxTrackSize.x = rc.right - rc.left;
if (mmi->ptMaxTrackSize.y < rc.bottom - rc.top)
mmi->ptMaxTrackSize.y = rc.bottom - rc.top;
return 0;
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
case WM_NCACTIVATE:
{
if (g_ddraw->noactivateapp)