-*gui_w32.txt* For Vim version 9.1. Last change: 2025 Aug 06
+*gui_w32.txt* For Vim version 9.1. Last change: 2025 Sep 29
VIM REFERENCE MANUAL by Bram Moolenaar
set VIM_KEYCODE_TRANS_STRATEGY=experimental
gvim.exe
<
+
+Title Bar's Behaviour *gui-w32-title-bar-behaviour*
+
+The color of the gVim title bar (sometimes also called the caption bar) is
+treated as part of the application's background. Starting with Windows 11,
+it follows the background color defined by |hl-Normal|, so it matches the
+background of the current colorscheme.
+
vim:tw=78:sw=4:ts=8:noet:ft=help:norl:
gui-w32-dialogs gui_w32.txt /*gui-w32-dialogs*
gui-w32-printing gui_w32.txt /*gui-w32-printing*
gui-w32-start gui_w32.txt /*gui-w32-start*
+gui-w32-title-bar-behaviour gui_w32.txt /*gui-w32-title-bar-behaviour*
gui-w32-various gui_w32.txt /*gui-w32-various*
gui-w32-windowid gui_w32.txt /*gui-w32-windowid*
gui-w32s os_win32.txt /*gui-w32s*
-*version9.txt* For Vim version 9.1. Last change: 2025 Sep 28
+*version9.txt* For Vim version 9.1. Last change: 2025 Sep 29
VIM REFERENCE MANUAL by Bram Moolenaar
Platform specific ~
- MS-Winodws: Paths like "\Windows" and "/Windows" are now considered to be
absolute paths (to the current drive) and no longer relative.
+- MS-Windows: The title bar background follows the |hl-Normal| highlighting
+ group background color.
- macOS: increase default scheduler priority to TASK_DEFAULT_APPLICATION.
Others: ~
# define SPI_SETWHEELSCROLLCHARS 0x006D
#endif
+#ifndef DWMWA_CAPTION_COLOR
+# define DWMWA_CAPTION_COLOR 35
+#endif
+
+#ifndef DWMWA_TEXT_COLOR
+# define DWMWA_TEXT_COLOR 36
+#endif
+
#ifdef PROTO
/*
* Define a few things for generating prototypes. This is just to avoid
static DPI_AWARENESS_CONTEXT (WINAPI *pSetThreadDpiAwarenessContext)(DPI_AWARENESS_CONTEXT dpiContext) = NULL;
static DPI_AWARENESS (WINAPI *pGetAwarenessFromDpiAwarenessContext)(DPI_AWARENESS_CONTEXT) = NULL;
+// Sets the value of Desktop Window Manager (DWM) non-client rendering attributes for a window.
+static HRESULT (WINAPI *pDwmSetWindowAttribute)(HWND, DWORD, LPCVOID, DWORD) = NULL;
+
static int WINAPI
stubGetSystemMetricsForDpi(int nIndex, UINT dpi UNUSED)
{
}
}
+ static void
+load_dwm_func(void)
+{
+ static HMODULE hLibDwm = NULL;
+ hLibDwm = vimLoadLib("dwmapi.dll");
+ if (hLibDwm == NULL)
+ return;
+
+ pDwmSetWindowAttribute = (HRESULT (WINAPI *)(HWND, DWORD, LPCVOID, DWORD))
+ GetProcAddress(hLibDwm, "DwmSetWindowAttribute");
+}
+
+extern BOOL win11_or_later; // this is in os_win32.c
+
/*
* Called when the foreground or background color has been changed.
*/
s_hwnd, GCLP_HBRBACKGROUND, (LONG_PTR)s_brush);
InvalidateRect(s_hwnd, NULL, TRUE);
DeleteObject(prevBrush);
+
+ // Set The Caption Bar
+
+ if (pDwmSetWindowAttribute == NULL)
+ return;
+
+ if (win11_or_later)
+ {
+ const COLORREF captionColor = gui.back_pixel;
+ pDwmSetWindowAttribute(s_hwnd, DWMWA_CAPTION_COLOR,
+ &captionColor, sizeof(captionColor));
+ const COLORREF textColor = gui.norm_pixel;
+ pDwmSetWindowAttribute(s_hwnd, DWMWA_TEXT_COLOR,
+ &textColor, sizeof(textColor));
+ }
}
/*
load_dpi_func();
+ load_dwm_func();
+
s_dpi = pGetDpiForSystem();
update_scrollbar_size();
static WCHAR *exe_pathw = NULL;
-static BOOL win8_or_later = FALSE;
-static BOOL win10_22H2_or_later = FALSE;
+BOOL win8_or_later = FALSE;
+BOOL win10_22H2_or_later = FALSE;
+BOOL win11_or_later = FALSE;
+
#if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
static BOOL use_alternate_screen_buffer = FALSE;
#endif
|| ovi.dwMajorVersion > 10)
win10_22H2_or_later = TRUE;
+ if ((ovi.dwMajorVersion == 10 && ovi.dwBuildNumber >= 22000)
+ || ovi.dwMajorVersion > 10)
+ win11_or_later = TRUE;
+
#ifdef HAVE_ACL
// Enable privilege for getting or setting SACLs.
if (!win32_enable_privilege(SE_SECURITY_NAME))
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 1813,
/**/
1812,
/**/