diff --git a/build/cmake/functions.cmake b/build/cmake/functions.cmake
index 13b861e20d..7d772546da 100644
--- a/build/cmake/functions.cmake
+++ b/build/cmake/functions.cmake
@@ -658,7 +658,27 @@ function(wx_add_sample name)
else()
set(exe_type WIN32 MACOSX_BUNDLE)
endif()
+
+ if (WXMSW AND DEFINED wxUSE_DPI_AWARE_MANIFEST)
+ set(wxDPI_MANIFEST_PRFIX "wx")
+ if (wxARCH_SUFFIX)
+ set(wxDPI_MANIFEST_PRFIX "amd64")
+ endif()
+ set(wxUSE_DPI_AWARE_MANIFEST_VALUE 0)
+ if (${wxUSE_DPI_AWARE_MANIFEST} MATCHES "system")
+ set(wxUSE_DPI_AWARE_MANIFEST_VALUE 1)
+ list(APPEND src_files "${wxSOURCE_DIR}/include/wx/msw/${wxDPI_MANIFEST_PRFIX}-dpi-aware.manifest")
+ elseif(${wxUSE_DPI_AWARE_MANIFEST} MATCHES "per-monitor")
+ set(wxUSE_DPI_AWARE_MANIFEST_VALUE 2)
+ list(APPEND src_files "${wxSOURCE_DIR}/include/wx/msw/${wxDPI_MANIFEST_PRFIX}-dpi-aware-pmv2.manifest")
+ endif()
+ endif()
+
add_executable(${target_name} ${exe_type} ${src_files})
+
+ if (DEFINED wxUSE_DPI_AWARE_MANIFEST_VALUE)
+ target_compile_definitions(${target_name} PRIVATE wxUSE_DPI_AWARE_MANIFEST=${wxUSE_DPI_AWARE_MANIFEST_VALUE})
+ endif()
endif()
# All samples use at least the base library other libraries
# will have to be added with wx_link_sample_libraries()
diff --git a/build/cmake/options.cmake b/build/cmake/options.cmake
index d86c47cc26..c9196f766e 100644
--- a/build/cmake/options.cmake
+++ b/build/cmake/options.cmake
@@ -23,6 +23,10 @@ wx_option(wxBUILD_COMPATIBILITY
set(wxBUILD_CUSTOM_SETUP_HEADER_PATH "" CACHE PATH "Include path containing custom wx/setup.h")
mark_as_advanced(wxBUILD_CUSTOM_SETUP_HEADER_PATH)
+if(WIN32)
+ wx_option(wxUSE_DPI_AWARE_MANIFEST "DPI Awareness" "per-monitor" STRINGS "none" "system" "per-monitor")
+endif()
+
wx_option(wxBUILD_DEBUG_LEVEL "Debug Level" Default STRINGS Default 0 1 2)
mark_as_advanced(wxBUILD_DEBUG_LEVEL)
diff --git a/include/wx/msw/amd64-dpi-aware-pmv2.manifest b/include/wx/msw/amd64-dpi-aware-pmv2.manifest
new file mode 100644
index 0000000000..09588bff37
--- /dev/null
+++ b/include/wx/msw/amd64-dpi-aware-pmv2.manifest
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PerMonitorV2, system
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/include/wx/msw/amd64-dpi-aware.manifest b/include/wx/msw/amd64-dpi-aware.manifest
new file mode 100644
index 0000000000..c2170185ac
--- /dev/null
+++ b/include/wx/msw/amd64-dpi-aware.manifest
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/include/wx/msw/wx-dpi-aware-pmv2.manifest b/include/wx/msw/wx-dpi-aware-pmv2.manifest
new file mode 100644
index 0000000000..efbb36f994
--- /dev/null
+++ b/include/wx/msw/wx-dpi-aware-pmv2.manifest
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PerMonitorV2, system
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/include/wx/msw/wx-dpi-aware.manifest b/include/wx/msw/wx-dpi-aware.manifest
new file mode 100644
index 0000000000..95c5a992b2
--- /dev/null
+++ b/include/wx/msw/wx-dpi-aware.manifest
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/include/wx/msw/wx.rc b/include/wx/msw/wx.rc
index f71bb61e0a..799d79ca24 100644
--- a/include/wx/msw/wx.rc
+++ b/include/wx/msw/wx.rc
@@ -100,17 +100,17 @@ wxBITMAP_STD_COLOURS BITMAP "wx/msw/colours.bmp"
// see "about isolated applications" topic in MSDN
#ifdef ISOLATION_AWARE_ENABLED
-#define wxMANIFEST_ID 2
+ #define wxMANIFEST_ID ISOLATIONAWARE_MANIFEST_RESOURCE_ID
#else
-#define wxMANIFEST_ID 1
+ #define wxMANIFEST_ID CREATEPROCESS_MANIFEST_RESOURCE_ID
#endif
#if defined(WX_CPU_AMD64)
-wxMANIFEST_ID 24 "wx/msw/amd64.manifest"
+ #define wxMANIFEST_CPU "amd64"
#elif defined(WX_CPU_IA64)
-wxMANIFEST_ID 24 "wx/msw/ia64.manifest"
+ #define wxMANIFEST_CPU "ia64"
#elif defined(WX_CPU_X86)
-wxMANIFEST_ID 24 "wx/msw/wx.manifest"
+ #define wxMANIFEST_CPU "wx"
#else
// Notice that if the manifest is included, WX_CPU_XXX constant corresponding
// to the architecture we're compiling for must be defined. This can be done
@@ -118,9 +118,20 @@ wxMANIFEST_ID 24 "wx/msw/wx.manifest"
// compiler paths to search in $(WXWIN)/lib/$(COMPILER_PREFIX)_lib/mswu[d]
// directory for its include files, as wx/msw/rcdefs.h file in this directory
// is generated during wxWidgets build and contains the correct definition.
-#error "One of WX_CPU_XXX constants must be defined. See comment above."
+ #error "One of WX_CPU_XXX constants must be defined. See comment above."
#endif
+#if !defined(wxUSE_DPI_AWARE_MANIFEST) || wxUSE_DPI_AWARE_MANIFEST == 0
+ #define wxMANIFEST_DPI ""
+#elif wxUSE_DPI_AWARE_MANIFEST == 1
+ #define wxMANIFEST_DPI "-dpi-aware"
+#elif wxUSE_DPI_AWARE_MANIFEST == 2
+ #define wxMANIFEST_DPI "-dpi-aware-pmv2"
+#endif
+
+#define wxMANIFEST_FILE "wx/msw/" wxMANIFEST_CPU wxMANIFEST_DPI ".manifest"
+wxMANIFEST_ID RT_MANIFEST wxMANIFEST_FILE
+
#endif // wxUSE_RC_MANIFEST
#endif // !defined(wxUSE_NO_MANIFEST) || (wxUSE_NO_MANIFEST == 0)