diff --git a/src/win/win_ui.c b/src/win/win_ui.c index fa06e4c26..190535aac 100644 --- a/src/win/win_ui.c +++ b/src/win/win_ui.c @@ -8,7 +8,7 @@ * * user Interface module for WinAPI on Windows. * - * Version: @(#)win_ui.c 1.0.38 2018/11/18 + * Version: @(#)win_ui.c 1.0.39 2019/3/20 * * Authors: Sarah Walker, * Miran Grca, @@ -17,6 +17,7 @@ * Copyright 2008-2018 Sarah Walker. * Copyright 2016-2018 Miran Grca. * Copyright 2017,2018 Fred N. van Kempen. + * Copyright 2019 GH Cao. */ #define UNICODE #include @@ -50,6 +51,7 @@ HWND hwndMain, /* application main window */ HMENU menuMain; /* application main menu */ HICON hIcon[256]; /* icon data loaded from resources */ RECT oldclip; /* mouse rect */ +int sbar_height = 23; /* statusbar height */ int infocus = 1; int rctrl_is_lalt = 0; int user_resize = 0; @@ -273,9 +275,10 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) HMENU hmenu; int sb_borders[3]; - RECT rect; + RECT rect, rc; int temp_x, temp_y; + int non_client_width, non_client_height; switch (message) { case WM_CREATE: @@ -337,7 +340,6 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) case IDM_VID_RESIZE: vid_resize = !vid_resize; CheckMenuItem(hmenu, IDM_VID_RESIZE, (vid_resize)? MF_CHECKED : MF_UNCHECKED); - GetWindowRect(hwnd, &rect); if (vid_resize) SetWindowLongPtr(hwnd, GWL_STYLE, (WS_OVERLAPPEDWINDOW) | WS_VISIBLE); @@ -346,10 +348,15 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) SendMessage(hwndSBAR, SB_GETBORDERS, 0, (LPARAM) sb_borders); + GetWindowRect(hwnd, &rect); + GetClientRect(hwnd, &rc); + non_client_width = (rect.right-rect.left) - (rc.right-rc.left); + non_client_height = (rect.bottom-rect.top) - (rc.bottom-rc.top); + /* Main Window. */ - MoveWindow(hwnd, rect.left, rect.top, - unscaled_size_x + (GetSystemMetrics(vid_resize ? SM_CXSIZEFRAME : SM_CXFIXEDFRAME) * 2), -unscaled_size_y + (GetSystemMetrics(SM_CYEDGE) * 2) + (GetSystemMetrics(vid_resize ? SM_CYSIZEFRAME : SM_CYFIXEDFRAME) * 2) + GetSystemMetrics(SM_CYMENUSIZE) + GetSystemMetrics(SM_CYCAPTION) + 17 + sb_borders[1] + 1, + MoveWindow(hwnd, rect.left, rect.top, + unscaled_size_x + non_client_width, + unscaled_size_y + non_client_height + sbar_height, TRUE); /* Render window. */ @@ -556,7 +563,7 @@ unscaled_size_y + (GetSystemMetrics(SM_CYEDGE) * 2) + (GetSystemMetrics(vid_resi SendMessage(hwndSBAR, SB_GETBORDERS, 0, (LPARAM) sb_borders); temp_x = (lParam & 0xFFFF); - temp_y = (lParam >> 16) - (21 + sb_borders[1]); + temp_y = (lParam >> 16) - sbar_height; if (temp_x < 1) temp_x = 1; if (temp_y < 1) @@ -728,6 +735,7 @@ ui_init(int nCmdShow) MSG messages; /* received-messages buffer */ HWND hwnd = NULL; /* handle for our window */ HACCEL haccel; /* handle to accelerator table */ + RECT sbar_rect; /* RECT of the status bar */ int bRet; if (settings_only) { @@ -838,6 +846,12 @@ ui_init(int nCmdShow) /* Create the status bar window. */ StatusBarCreate(hwndMain, IDC_STATUS, hinstance); + /* Get the actual height of the statusbar, + * since that is not something we can change. + */ + GetWindowRect(hwndSBAR, &sbar_rect); + sbar_height = sbar_rect.bottom - sbar_rect.top; + /* * Before we can create the Render window, we first have * to prepare some other things that it depends on. @@ -1002,7 +1016,9 @@ void plat_resize(int x, int y) { int sb_borders[3]; - RECT r; + RECT r, rc; + int non_client_width; + int non_client_height; /* First, see if we should resize the UI window. */ if (!vid_resize) { @@ -1011,11 +1027,14 @@ plat_resize(int x, int y) SendMessage(hwndSBAR, SB_GETBORDERS, 0, (LPARAM) sb_borders); GetWindowRect(hwndMain, &r); + GetClientRect(hwndMain, &rc); + non_client_width = (r.right-r.left) - (rc.right-rc.left); + non_client_height = (r.bottom-r.top) - (rc.bottom-rc.top); + MoveWindow(hwndMain, r.left, r.top, - x + (GetSystemMetrics(vid_resize ? SM_CXSIZEFRAME : SM_CXFIXEDFRAME) * 2), - y + (GetSystemMetrics(SM_CYEDGE) * 2) + (GetSystemMetrics(vid_resize ? SM_CYSIZEFRAME : SM_CYFIXEDFRAME) * 2) + GetSystemMetrics(SM_CYMENUSIZE) + GetSystemMetrics(SM_CYCAPTION) + 17 + sb_borders[1] + 1, + x + non_client_width, + y + non_client_height + sbar_height, TRUE); - GetWindowRect(hwndMain, &r); MoveWindow(hwndRender, 0, 0, x, y, TRUE); GetWindowRect(hwndRender, &r);