Merge branch 'msw-dark-taskdlg'

Add dark mode support to wxMSW task dialog-based dialogs.

See #26570.
This commit is contained in:
Vadim Zeitlin
2026-06-13 20:28:01 +02:00
25 changed files with 1698 additions and 88 deletions
+28 -8
View File
@@ -5067,7 +5067,8 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS = \
monodll_darkmode.o \
monodll_msw_appprogress.o \
monodll_taskbarbutton.o \
monodll_msw_power.o
monodll_msw_power.o \
monodll_taskdlg.o
@COND_TOOLKIT_MSW@__LOWLEVEL_SRC_OBJECTS = $(COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS)
@COND_TOOLKIT_OSX_COCOA@__LOWLEVEL_SRC_OBJECTS = \
@COND_TOOLKIT_OSX_COCOA@ $(__OSX_LOWLEVEL_SRC_OBJECTS)
@@ -5811,7 +5812,8 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_1 = \
monodll_darkmode.o \
monodll_msw_appprogress.o \
monodll_taskbarbutton.o \
monodll_msw_power.o
monodll_msw_power.o \
monodll_taskdlg.o
@COND_TOOLKIT_MSW@__LOWLEVEL_SRC_OBJECTS_1 = $(COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_1)
@COND_TOOLKIT_OSX_COCOA@__LOWLEVEL_SRC_OBJECTS_1 = \
@COND_TOOLKIT_OSX_COCOA@ $(__OSX_LOWLEVEL_SRC_OBJECTS)
@@ -6855,7 +6857,8 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_2 = \
monolib_darkmode.o \
monolib_msw_appprogress.o \
monolib_taskbarbutton.o \
monolib_msw_power.o
monolib_msw_power.o \
monolib_taskdlg.o
@COND_TOOLKIT_MSW@__LOWLEVEL_SRC_OBJECTS_2 = $(COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_2)
@COND_TOOLKIT_OSX_COCOA@__LOWLEVEL_SRC_OBJECTS_2 = \
@COND_TOOLKIT_OSX_COCOA@ $(__OSX_LOWLEVEL_SRC_OBJECTS_17)
@@ -7599,7 +7602,8 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_3 = \
monolib_darkmode.o \
monolib_msw_appprogress.o \
monolib_taskbarbutton.o \
monolib_msw_power.o
monolib_msw_power.o \
monolib_taskdlg.o
@COND_TOOLKIT_MSW@__LOWLEVEL_SRC_OBJECTS_3 = $(COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_3)
@COND_TOOLKIT_OSX_COCOA@__LOWLEVEL_SRC_OBJECTS_3 = \
@COND_TOOLKIT_OSX_COCOA@ $(__OSX_LOWLEVEL_SRC_OBJECTS_17)
@@ -8789,7 +8793,8 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_4 = \
coredll_darkmode.o \
coredll_msw_appprogress.o \
coredll_taskbarbutton.o \
coredll_msw_power.o
coredll_msw_power.o \
coredll_taskdlg.o
@COND_TOOLKIT_MSW@__LOWLEVEL_SRC_OBJECTS_4 = $(COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_4)
@COND_TOOLKIT_OSX_COCOA@__LOWLEVEL_SRC_OBJECTS_4 = \
@COND_TOOLKIT_OSX_COCOA@ $(__OSX_LOWLEVEL_SRC_OBJECTS_1_1)
@@ -9533,7 +9538,8 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_5 = \
coredll_darkmode.o \
coredll_msw_appprogress.o \
coredll_taskbarbutton.o \
coredll_msw_power.o
coredll_msw_power.o \
coredll_taskdlg.o
@COND_TOOLKIT_MSW@__LOWLEVEL_SRC_OBJECTS_5 = $(COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_5)
@COND_TOOLKIT_OSX_COCOA@__LOWLEVEL_SRC_OBJECTS_5 = \
@COND_TOOLKIT_OSX_COCOA@ $(__OSX_LOWLEVEL_SRC_OBJECTS_1_1)
@@ -10302,7 +10308,8 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_6 = \
corelib_darkmode.o \
corelib_msw_appprogress.o \
corelib_taskbarbutton.o \
corelib_msw_power.o
corelib_msw_power.o \
corelib_taskdlg.o
@COND_TOOLKIT_MSW@__LOWLEVEL_SRC_OBJECTS_6 = $(COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_6)
@COND_TOOLKIT_OSX_COCOA@__LOWLEVEL_SRC_OBJECTS_6 = \
@COND_TOOLKIT_OSX_COCOA@ $(__OSX_LOWLEVEL_SRC_OBJECTS_1_4)
@@ -11046,7 +11053,8 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_7 = \
corelib_darkmode.o \
corelib_msw_appprogress.o \
corelib_taskbarbutton.o \
corelib_msw_power.o
corelib_msw_power.o \
corelib_taskdlg.o
@COND_TOOLKIT_MSW@__LOWLEVEL_SRC_OBJECTS_7 = $(COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_7)
@COND_TOOLKIT_OSX_COCOA@__LOWLEVEL_SRC_OBJECTS_7 = \
@COND_TOOLKIT_OSX_COCOA@ $(__OSX_LOWLEVEL_SRC_OBJECTS_1_4)
@@ -18082,6 +18090,9 @@ monodll_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONODLL_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@monodll_msw_power.o: $(srcdir)/src/msw/power.cpp $(MONODLL_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/msw/power.cpp
@COND_TOOLKIT_MSW_USE_GUI_1@monodll_taskdlg.o: $(srcdir)/src/msw/taskdlg.cpp $(MONODLL_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/msw/taskdlg.cpp
@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1@monodll_artmac.o: $(srcdir)/src/osx/artmac.cpp $(MONODLL_ODEP)
@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/osx/artmac.cpp
@@ -22876,6 +22887,9 @@ monolib_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONOLIB_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@monolib_msw_power.o: $(srcdir)/src/msw/power.cpp $(MONOLIB_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/msw/power.cpp
@COND_TOOLKIT_MSW_USE_GUI_1@monolib_taskdlg.o: $(srcdir)/src/msw/taskdlg.cpp $(MONOLIB_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/msw/taskdlg.cpp
@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1@monolib_artmac.o: $(srcdir)/src/osx/artmac.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/osx/artmac.cpp
@@ -27733,6 +27747,9 @@ coredll_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(COREDLL_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@coredll_msw_power.o: $(srcdir)/src/msw/power.cpp $(COREDLL_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/msw/power.cpp
@COND_TOOLKIT_MSW_USE_GUI_1@coredll_taskdlg.o: $(srcdir)/src/msw/taskdlg.cpp $(COREDLL_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/msw/taskdlg.cpp
@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1@coredll_artmac.o: $(srcdir)/src/osx/artmac.cpp $(COREDLL_ODEP)
@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/osx/artmac.cpp
@@ -31489,6 +31506,9 @@ corelib_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(CORELIB_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@corelib_msw_power.o: $(srcdir)/src/msw/power.cpp $(CORELIB_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/msw/power.cpp
@COND_TOOLKIT_MSW_USE_GUI_1@corelib_taskdlg.o: $(srcdir)/src/msw/taskdlg.cpp $(CORELIB_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/msw/taskdlg.cpp
@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1@corelib_artmac.o: $(srcdir)/src/osx/artmac.cpp $(CORELIB_ODEP)
@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/osx/artmac.cpp
+1
View File
@@ -1765,6 +1765,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
src/msw/appprogress.cpp
src/msw/taskbarbutton.cpp
src/msw/power.cpp
src/msw/taskdlg.cpp
</set>
<set var="MSW_LOWLEVEL_HDR" hints="files">
wx/msw/nonownedwnd.h
+1
View File
@@ -1641,6 +1641,7 @@ set(MSW_LOWLEVEL_SRC
src/msw/appprogress.cpp
src/msw/taskbarbutton.cpp
src/msw/power.cpp
src/msw/taskdlg.cpp
)
set(MSW_LOWLEVEL_HDR
+1
View File
@@ -1641,6 +1641,7 @@ MSW_LOWLEVEL_SRC =
src/msw/sound.cpp
src/msw/taskbar.cpp
src/msw/taskbarbutton.cpp
src/msw/taskdlg.cpp
src/msw/textmeasure.cpp
src/msw/tooltip.cpp
src/msw/toplevel.cpp
+28
View File
@@ -2145,6 +2145,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_appprogress.o \
$(OBJS)\monodll_taskbarbutton.o \
$(OBJS)\monodll_power.o \
$(OBJS)\monodll_taskdlg.o \
$(OBJS)\monodll_clrpickerg.o \
$(OBJS)\monodll_collpaneg.o \
$(OBJS)\monodll_filepickerg.o \
@@ -2498,6 +2499,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_appprogress.o \
$(OBJS)\monodll_taskbarbutton.o \
$(OBJS)\monodll_power.o \
$(OBJS)\monodll_taskdlg.o \
$(OBJS)\monodll_generic_accel.o \
$(OBJS)\monodll_clrpickerg.o \
$(OBJS)\monodll_collpaneg.o \
@@ -3015,6 +3017,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_appprogress.o \
$(OBJS)\monolib_taskbarbutton.o \
$(OBJS)\monolib_power.o \
$(OBJS)\monolib_taskdlg.o \
$(OBJS)\monolib_clrpickerg.o \
$(OBJS)\monolib_collpaneg.o \
$(OBJS)\monolib_filepickerg.o \
@@ -3368,6 +3371,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_appprogress.o \
$(OBJS)\monolib_taskbarbutton.o \
$(OBJS)\monolib_power.o \
$(OBJS)\monolib_taskdlg.o \
$(OBJS)\monolib_generic_accel.o \
$(OBJS)\monolib_clrpickerg.o \
$(OBJS)\monolib_collpaneg.o \
@@ -3760,6 +3764,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\coredll_appprogress.o \
$(OBJS)\coredll_taskbarbutton.o \
$(OBJS)\coredll_power.o \
$(OBJS)\coredll_taskdlg.o \
$(OBJS)\coredll_clrpickerg.o \
$(OBJS)\coredll_collpaneg.o \
$(OBJS)\coredll_filepickerg.o \
@@ -4113,6 +4118,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\coredll_appprogress.o \
$(OBJS)\coredll_taskbarbutton.o \
$(OBJS)\coredll_power.o \
$(OBJS)\coredll_taskdlg.o \
$(OBJS)\coredll_generic_accel.o \
$(OBJS)\coredll_clrpickerg.o \
$(OBJS)\coredll_collpaneg.o \
@@ -4461,6 +4467,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\corelib_appprogress.o \
$(OBJS)\corelib_taskbarbutton.o \
$(OBJS)\corelib_power.o \
$(OBJS)\corelib_taskdlg.o \
$(OBJS)\corelib_clrpickerg.o \
$(OBJS)\corelib_collpaneg.o \
$(OBJS)\corelib_filepickerg.o \
@@ -4814,6 +4821,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\corelib_appprogress.o \
$(OBJS)\corelib_taskbarbutton.o \
$(OBJS)\corelib_power.o \
$(OBJS)\corelib_taskdlg.o \
$(OBJS)\corelib_generic_accel.o \
$(OBJS)\corelib_clrpickerg.o \
$(OBJS)\corelib_collpaneg.o \
@@ -9297,6 +9305,11 @@ $(OBJS)\monodll_power.o: ../../src/msw/power.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\monodll_taskdlg.o: ../../src/msw/taskdlg.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\monodll_clrpickerg.o: ../../src/generic/clrpickerg.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
@@ -11925,6 +11938,11 @@ $(OBJS)\monolib_power.o: ../../src/msw/power.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\monolib_taskdlg.o: ../../src/msw/taskdlg.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\monolib_clrpickerg.o: ../../src/generic/clrpickerg.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
@@ -14493,6 +14511,11 @@ $(OBJS)\coredll_power.o: ../../src/msw/power.cpp
$(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\coredll_taskdlg.o: ../../src/msw/taskdlg.cpp
$(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\coredll_clrpickerg.o: ../../src/generic/clrpickerg.cpp
$(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
@@ -16278,6 +16301,11 @@ $(OBJS)\corelib_power.o: ../../src/msw/power.cpp
$(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\corelib_taskdlg.o: ../../src/msw/taskdlg.cpp
$(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\corelib_clrpickerg.o: ../../src/generic/clrpickerg.cpp
$(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<
+28
View File
@@ -2531,6 +2531,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_appprogress.obj \
$(OBJS)\monodll_taskbarbutton.obj \
$(OBJS)\monodll_power.obj \
$(OBJS)\monodll_taskdlg.obj \
$(OBJS)\monodll_clrpickerg.obj \
$(OBJS)\monodll_collpaneg.obj \
$(OBJS)\monodll_filepickerg.obj \
@@ -2882,6 +2883,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_appprogress.obj \
$(OBJS)\monodll_taskbarbutton.obj \
$(OBJS)\monodll_power.obj \
$(OBJS)\monodll_taskdlg.obj \
$(OBJS)\monodll_generic_accel.obj \
$(OBJS)\monodll_clrpickerg.obj \
$(OBJS)\monodll_collpaneg.obj \
@@ -3401,6 +3403,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_appprogress.obj \
$(OBJS)\monolib_taskbarbutton.obj \
$(OBJS)\monolib_power.obj \
$(OBJS)\monolib_taskdlg.obj \
$(OBJS)\monolib_clrpickerg.obj \
$(OBJS)\monolib_collpaneg.obj \
$(OBJS)\monolib_filepickerg.obj \
@@ -3752,6 +3755,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_appprogress.obj \
$(OBJS)\monolib_taskbarbutton.obj \
$(OBJS)\monolib_power.obj \
$(OBJS)\monolib_taskdlg.obj \
$(OBJS)\monolib_generic_accel.obj \
$(OBJS)\monolib_clrpickerg.obj \
$(OBJS)\monolib_collpaneg.obj \
@@ -4196,6 +4200,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\coredll_appprogress.obj \
$(OBJS)\coredll_taskbarbutton.obj \
$(OBJS)\coredll_power.obj \
$(OBJS)\coredll_taskdlg.obj \
$(OBJS)\coredll_clrpickerg.obj \
$(OBJS)\coredll_collpaneg.obj \
$(OBJS)\coredll_filepickerg.obj \
@@ -4547,6 +4552,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\coredll_appprogress.obj \
$(OBJS)\coredll_taskbarbutton.obj \
$(OBJS)\coredll_power.obj \
$(OBJS)\coredll_taskdlg.obj \
$(OBJS)\coredll_generic_accel.obj \
$(OBJS)\coredll_clrpickerg.obj \
$(OBJS)\coredll_collpaneg.obj \
@@ -4895,6 +4901,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\corelib_appprogress.obj \
$(OBJS)\corelib_taskbarbutton.obj \
$(OBJS)\corelib_power.obj \
$(OBJS)\corelib_taskdlg.obj \
$(OBJS)\corelib_clrpickerg.obj \
$(OBJS)\corelib_collpaneg.obj \
$(OBJS)\corelib_filepickerg.obj \
@@ -5246,6 +5253,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\corelib_appprogress.obj \
$(OBJS)\corelib_taskbarbutton.obj \
$(OBJS)\corelib_power.obj \
$(OBJS)\corelib_taskdlg.obj \
$(OBJS)\corelib_generic_accel.obj \
$(OBJS)\corelib_clrpickerg.obj \
$(OBJS)\corelib_collpaneg.obj \
@@ -9799,6 +9807,11 @@ $(OBJS)\monodll_power.obj: ..\..\src\msw\power.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\msw\power.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\monodll_taskdlg.obj: ..\..\src\msw\taskdlg.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\msw\taskdlg.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\monodll_clrpickerg.obj: ..\..\src\generic\clrpickerg.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\generic\clrpickerg.cpp
@@ -12427,6 +12440,11 @@ $(OBJS)\monolib_power.obj: ..\..\src\msw\power.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\msw\power.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\monolib_taskdlg.obj: ..\..\src\msw\taskdlg.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\msw\taskdlg.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\monolib_clrpickerg.obj: ..\..\src\generic\clrpickerg.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\generic\clrpickerg.cpp
@@ -14995,6 +15013,11 @@ $(OBJS)\coredll_power.obj: ..\..\src\msw\power.cpp
$(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) ..\..\src\msw\power.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\coredll_taskdlg.obj: ..\..\src\msw\taskdlg.cpp
$(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) ..\..\src\msw\taskdlg.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\coredll_clrpickerg.obj: ..\..\src\generic\clrpickerg.cpp
$(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) ..\..\src\generic\clrpickerg.cpp
@@ -16780,6 +16803,11 @@ $(OBJS)\corelib_power.obj: ..\..\src\msw\power.cpp
$(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) ..\..\src\msw\power.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\corelib_taskdlg.obj: ..\..\src\msw\taskdlg.cpp
$(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) ..\..\src\msw\taskdlg.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\corelib_clrpickerg.obj: ..\..\src\generic\clrpickerg.cpp
$(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) ..\..\src\generic\clrpickerg.cpp
+1
View File
@@ -1706,6 +1706,7 @@
<ClCompile Include="..\..\src\common\curbndl.cpp" />
<ClCompile Include="..\..\src\common\imagwebp.cpp" />
<ClCompile Include="..\..\src\common\webpdecoder.cpp" />
<ClCompile Include="..\..\src\msw\taskdlg.cpp" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\..\src\msw\version.rc">
+3
View File
@@ -1044,6 +1044,9 @@
<ClCompile Include="..\..\src\msw\taskbarbutton.cpp">
<Filter>MSW Sources</Filter>
</ClCompile>
<ClCompile Include="..\..\src\msw\taskdlg.cpp">
<Filter>MSW Sources</Filter>
</ClCompile>
<ClCompile Include="..\..\src\msw\textctrl.cpp">
<Filter>MSW Sources</Filter>
</ClCompile>
+38
View File
@@ -195,6 +195,23 @@ struct WinStruct : public T
}
};
// Life wouldn't be fun if Windows didn't call the size member differently in
// different structs, so define the equivalent of the above for the ones where
// it's called dwSize.
//
// When we can require C++17 or preferably C++20 we could merge this with
// WinStruct by detecting the presence of cbSize/dwSize member using SFINAE,
// but for now just define it separately to keep things simple.
template <class T>
struct WinStructWordSize : public T
{
WinStructWordSize()
{
wxZeroMemory(*this);
this->dwSize = sizeof(T);
}
};
// Macros for converting wxString to the type expected by API functions.
//
@@ -313,6 +330,12 @@ extern HICON wxBitmapToHICON(const wxBitmap& bmp);
extern
HCURSOR wxBitmapToHCURSOR(const wxBitmap& bmp, int hotSpotX, int hotSpotY);
// Return DPI for the given window.
//
// Implemented in src/msw/window.cpp.
wxSize wxGetWindowDPI(HWND hwnd);
// Also implemented in src/msw/window.cpp.
extern int wxGetSystemMetrics(int nIndex, const wxWindow* win);
extern bool wxSystemParametersInfo(UINT uiAction, UINT uiParam,
@@ -1165,6 +1188,21 @@ inline wxLayoutDirection wxGetEditLayoutDirection(WXHWND hWnd)
: wxLayout_LeftToRight;
}
// Check if WM_SETTINGCHANGE notifies about the system colours change.
inline bool wxIsSystemColourChange(LPARAM lParam)
{
// Note that "ImmersiveColorSet" is set both when switching between
// light and dark themes and also when changing high contrast mode,
// for which an additional message with "WindowsThemeElement" is
// also sent, but we don't need to check for it as handling this
// one is enough
if ( !lParam )
return false;
auto* const what = reinterpret_cast<const TCHAR*>(lParam);
return wxStrcmp(what, wxT("ImmersiveColorSet")) == 0;
}
// ----------------------------------------------------------------------------
// functions mapping HWND to wxWindow
// ----------------------------------------------------------------------------
+5
View File
@@ -31,6 +31,11 @@ bool HasChanged();
// Enable or disable dark mode for the given TLW if appropriate.
void ConfigureTLW(HWND hwnd);
// Helper function: call SetWindowTheme() and log a debug error if it fails.
void SetTheme(HWND hwnd,
const wchar_t* themeName,
const wchar_t* themeId = nullptr);
// Set dark theme for the given (child) window if appropriate.
//
// Optional theme name and ID can be specified if something other than the
+56
View File
@@ -0,0 +1,56 @@
///////////////////////////////////////////////////////////////////////////////
// Name: wx/msw/private/taskdlg.h
// Purpose: Dark mode support for native TaskDialog.
// Author: Mohmed Abdel-Fattah (memoarfaa)
// Created: 2026-06-07
// Copyright: (c) 2026 wxWidgets development team
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#ifndef _WX_MSW_PRIVATE_TASKDLG_H_
#define _WX_MSW_PRIVATE_TASKDLG_H_
#include "wx/msw/wrapcctl.h"
namespace wxMSWDarkMode
{
// ----------------------------------------------------------------------------
// TaskDialog dark mode helpers
// ----------------------------------------------------------------------------
//
// These two functions bracket the lifetime of dark-mode theming for any
// TaskDialog-based dialog (wxMessageDialog, wxRichMessageDialog,
// wxProgressDialog, wxAboutBox).
//
// Typical usage inside a PFTASKDIALOGCALLBACK:
//
// case TDN_CREATED:
// wxMSWDarkMode::ApplyToTaskDialog(hwnd, pCfg);
// break;
// case TDN_DESTROYED:
// wxMSWDarkMode::RemoveFromTaskDialog(hwnd);
// break;
//
// Both functions are no-ops when IsActive() returns false, so no guard is
// needed at the call site.
// Apply dark mode theming to an existing TaskDialog window.
//
// Must be called from TDN_CREATED (not TDN_DIALOG_CONSTRUCTED) so that the
// complete child-window hierarchy exists and UI Automation can walk it.
//
// pCfg may be nullptr; when provided it enables correct icon overdraw on
// Windows 10 where there is no native dark TaskDialog theme.
void AllowForTaskDialog(HWND hwnd, const TASKDIALOGCONFIG* pCfg = nullptr);
// Remove all subclasses and free all GDI/theme resources installed by
// ApplyToTaskDialog().
//
// Must be called from TDN_DESTROYED or WM_DESTROY.
// Safe to call even if ApplyToTaskDialog() was never called for this HWND.
void RemoveFromTaskDialog(HWND hwnd);
} // namespace wxMSWDarkMode
#endif // _WX_MSW_PRIVATE_TASKDLG_H_
+45 -14
View File
@@ -204,9 +204,14 @@ public:
return NewAtStdDPI(0, classes, classesDark);
}
// Default ctor, use move assignment to really initialize this object later.
wxUxThemeHandle() = default;
// wxWindow pointer here must be valid and its DPI is always used.
// If classesDark is non-nullptr and the dark mode is active, it's used
// instead of classes.
//
// Prefer using factory functions above instead of this ctor for clarity.
wxUxThemeHandle(const wxWindowMSW* win,
const wchar_t* classes,
const wchar_t* classesDark = nullptr);
@@ -217,14 +222,20 @@ public:
other.m_hTheme = 0;
}
wxUxThemeHandle& operator=(wxUxThemeHandle&& other)
{
Free();
m_hTheme = other.m_hTheme;
other.m_hTheme = 0;
return *this;
}
operator HTHEME() const { return m_hTheme; }
~wxUxThemeHandle()
{
if ( m_hTheme )
{
::CloseThemeData(m_hTheme);
}
Free();
}
// Return the colour for the given part, property and state.
@@ -236,21 +247,34 @@ public:
// Return the size of a theme element, either "as is" (TS_TRUE size) or as
// it would be used for drawing (TS_DRAW size).
//
// For now we don't allow specifying the HDC or rectangle as they don't
// seem to be useful.
wxSize GetTrueSize(int part, int state = 0) const
// For now we don't allow specifying the rectangle as it doesn't seem to be
// useful.
wxSize GetTrueSize(int part, int state = 0, HDC hdc = 0) const
{
return DoGetSize(part, state, TS_TRUE);
return DoGetSize(hdc, part, state, TS_TRUE);
}
wxSize GetDrawSize(int part, int state = 0) const
wxSize GetDrawSize(int part, int state = 0, HDC hdc = 0) const
{
return DoGetSize(part, state, TS_DRAW);
return DoGetSize(hdc, part, state, TS_DRAW);
}
// Get the margins of a theme element in the output parameter.
//
// The output parameter is not modified if the function fails, so it can be
// initialized with some default values before calling this function.
bool
GetMargins(MARGINS& margins,
int part, int prop, int state = 0, HDC hdc = 0) const;
// Get the font of a theme element.
bool GetFont(LOGFONTW& lf, HDC hdc, int part, int state = 0) const;
// Draw theme background: if the caller already has a RECT, it can be
// provided directly, otherwise wxRect is converted to it.
void DrawBackground(HDC hdc, const RECT& rc, int part, int state = 0);
void DrawBackground(HDC hdc, const RECT& rc, int part, int state = 0,
const RECT* rcClip = nullptr);
void DrawBackground(HDC hdc, const wxRect& rect, int part, int state = 0);
private:
@@ -270,11 +294,18 @@ private:
{
}
wxSize DoGetSize(int part, int state, THEMESIZE ts) const;
void Free()
{
if ( m_hTheme )
{
::CloseThemeData(m_hTheme);
}
}
wxSize DoGetSize(HDC hdc, int part, int state, THEMESIZE ts) const;
// This is almost, but not quite, const: it's only reset in move ctor.
HTHEME m_hTheme;
HTHEME m_hTheme = 0;
wxDECLARE_NO_COPY_CLASS(wxUxThemeHandle);
};
-8
View File
@@ -1433,19 +1433,11 @@ public:
Known limitations of dark mode support include:
- Anything based on `TaskDialog()` Win32 API doesn't support dark mode:
wxMessageBox(), wxMessageDialog, wxRichMessageDialog, wxProgressDialog
and simple (i.e., without hyperlink or licence) wxAboutBox(). Consider
using generic versions (e.g. wxGenericMessageDialog or wxGenericProgressDialog)
if dark mode support is more important than using the native dialog.
- The following dialogs wrapping common windows dialogs don't support
dark mode: wxColourDialog, wxFindReplaceDialog, wxFontDialog,
wxPageSetupDialog, wxPrintDialog.
- wxTimePickerCtrl, wxDatePickerCtrl and wxCalendarCtrl don't support dark mode
and use the same (light) background as by default in it.
- Toolbar items for which wxToolBar::SetDropdownMenu() was called
don't draw the menu drop-down correctly, making it almost
invisible.
@param flags Can include @c wxApp::DarkMode_Always to force enabling
dark mode for the application, even if the system doesn't use the
+12 -8
View File
@@ -492,6 +492,16 @@ void ConfigureTLW(HWND hwnd)
wxMSWImpl::AllowDarkModeForWindow(hwnd, true);
}
void SetTheme(HWND hwnd, const wchar_t* themeName, const wchar_t* themeId)
{
HRESULT hr = ::SetWindowTheme(hwnd, themeName, themeId);
if ( FAILED(hr) )
{
wxLogApiError(wxString::Format("SetWindowTheme(%p, %s, %s)",
hwnd, themeName, themeId), hr);
}
}
void AllowForWindow(HWND hwnd, const wchar_t* themeName, const wchar_t* themeId)
{
if ( wxMSWImpl::AllowDarkModeForWindow(hwnd, true) )
@@ -499,12 +509,7 @@ void AllowForWindow(HWND hwnd, const wchar_t* themeName, const wchar_t* themeId)
if ( themeName || themeId )
{
HRESULT hr = ::SetWindowTheme(hwnd, themeName, themeId);
if ( FAILED(hr) )
{
wxLogApiError(wxString::Format("SetWindowTheme(%p, %s, %s)",
hwnd, themeName, themeId), hr);
}
SetTheme(hwnd, themeName, themeId);
}
// Some native controls need this message to switch themes, such as
@@ -769,8 +774,7 @@ HandleMenuMessage(WXLRESULT* result,
// We have to specify the text colour explicitly as by default
// black would be used, making the menu label unreadable on the
// (almost) black background.
DTTOPTS textOpts;
textOpts.dwSize = sizeof(textOpts);
WinStructWordSize<DTTOPTS> textOpts;
textOpts.dwFlags = DTT_TEXTCOLOR;
textOpts.crText = wxColourToRGB(GetMenuColour(colText));
+1 -2
View File
@@ -51,8 +51,7 @@ bool wxMSWDateControls::CheckInitialization()
// it's enough to give the error only once
s_initResult = false;
INITCOMMONCONTROLSEX icex;
icex.dwSize = sizeof(icex);
WinStructWordSize<INITCOMMONCONTROLSEX> icex;
icex.dwICC = ICC_DATE_CLASSES;
// see comment in wxApp::GetComCtl32Version() explaining the
+5 -10
View File
@@ -266,9 +266,8 @@ bool wxJoystick::GetButtonState(unsigned id) const
int wxJoystick::GetPOVPosition() const
{
#ifndef NO_JOYGETPOSEX
JOYINFOEX joyInfo;
WinStructWordSize<JOYINFOEX> joyInfo;
joyInfo.dwFlags = JOY_RETURNPOV;
joyInfo.dwSize = sizeof(joyInfo);
MMRESULT res = joyGetPosEx(m_joystick, & joyInfo);
if (res == JOYERR_NOERROR )
{
@@ -288,9 +287,8 @@ int wxJoystick::GetPOVPosition() const
int wxJoystick::GetPOVCTSPosition() const
{
#ifndef NO_JOYGETPOSEX
JOYINFOEX joyInfo;
WinStructWordSize<JOYINFOEX> joyInfo;
joyInfo.dwFlags = JOY_RETURNPOVCTS;
joyInfo.dwSize = sizeof(joyInfo);
MMRESULT res = joyGetPosEx(m_joystick, & joyInfo);
if (res == JOYERR_NOERROR )
{
@@ -306,9 +304,8 @@ int wxJoystick::GetPOVCTSPosition() const
int wxJoystick::GetRudderPosition() const
{
#ifndef NO_JOYGETPOSEX
JOYINFOEX joyInfo;
WinStructWordSize<JOYINFOEX> joyInfo;
joyInfo.dwFlags = JOY_RETURNR;
joyInfo.dwSize = sizeof(joyInfo);
MMRESULT res = joyGetPosEx(m_joystick, & joyInfo);
if (res == JOYERR_NOERROR )
{
@@ -324,9 +321,8 @@ int wxJoystick::GetRudderPosition() const
int wxJoystick::GetUPosition() const
{
#ifndef NO_JOYGETPOSEX
JOYINFOEX joyInfo;
WinStructWordSize<JOYINFOEX> joyInfo;
joyInfo.dwFlags = JOY_RETURNU;
joyInfo.dwSize = sizeof(joyInfo);
MMRESULT res = joyGetPosEx(m_joystick, & joyInfo);
if (res == JOYERR_NOERROR )
{
@@ -342,9 +338,8 @@ int wxJoystick::GetUPosition() const
int wxJoystick::GetVPosition() const
{
#ifndef NO_JOYGETPOSEX
JOYINFOEX joyInfo;
WinStructWordSize<JOYINFOEX> joyInfo;
joyInfo.dwFlags = JOY_RETURNV;
joyInfo.dwSize = sizeof(joyInfo);
MMRESULT res = joyGetPosEx(m_joystick, & joyInfo);
if (res == JOYERR_NOERROR )
{
+27 -3
View File
@@ -27,6 +27,7 @@
#include "wx/msw/private/darkmode.h"
#include "wx/msw/private/metrics.h"
#include "wx/msw/private/msgdlg.h"
#include "wx/msw/private/taskdlg.h"
#include "wx/modalhook.h"
#include "wx/fontutil.h"
#include "wx/textbuf.h"
@@ -588,12 +589,34 @@ namespace
{
HRESULT CALLBACK
wxTaskDialogCallback(HWND hwnd, UINT msg, WPARAM, LPARAM, LONG_PTR)
wxTaskDialogCallback(HWND hwnd,
UINT msg,
WPARAM wParam,
LPARAM WXUNUSED(lParam),
LONG_PTR refData)
{
const auto* const
config = reinterpret_cast<const TASKDIALOGCONFIG*>(refData);
switch ( msg )
{
case TDN_DIALOG_CONSTRUCTED:
wxMSWDarkMode::ConfigureTLW(hwnd);
case TDN_CREATED:
// The dialog is fully constructed now, so we can enable dark mode
// for it if necessary (doing it on TDN_DIALOG_CONSTRUCTED wouldn't
// work because all dialog elements wouldn't be constructed yet).
wxMSWDarkMode::AllowForTaskDialog(hwnd, config);
break;
case TDN_EXPANDO_BUTTON_CLICKED:
// Store the expanded state as a window property so the subclassed
// TaskPage panel can read it during WM_PAINT without a UIA call.
SetProp(hwnd, L"IsExpanded",
reinterpret_cast<HANDLE>(static_cast<ULONG_PTR>(wParam)));
break;
case TDN_DESTROYED:
// Clean up all resources allocated by AllowForTaskDialog().
wxMSWDarkMode::RemoveFromTaskDialog(hwnd);
break;
}
@@ -757,6 +780,7 @@ void wxMSWTaskDialogConfig::MSWCommonTaskDialogInit(TASKDIALOGCONFIG &tdc)
}
tdc.pfCallback = wxTaskDialogCallback;
tdc.lpCallbackData = (LONG_PTR) &tdc;
}
void wxMSWTaskDialogConfig::AddTaskDialogButton(TASKDIALOGCONFIG &tdc,
+20 -1
View File
@@ -30,8 +30,10 @@
#include "wx/msw/private.h"
#endif
#include "wx/msw/private/msgdlg.h"
#include "wx/evtloop.h"
#include "wx/msw/private/darkmode.h"
#include "wx/msw/private/msgdlg.h"
#include "wx/msw/private/taskdlg.h"
using namespace wxMSWMessageDialog;
@@ -1144,6 +1146,11 @@ wxProgressDialogTaskRunner::TaskDialogCallbackProc
switch ( uNotification )
{
case TDN_CREATED:
// The dialog is fully constructed now, so we can enable dark mode
// for it if necessary (doing it on TDN_DIALOG_CONSTRUCTED wouldn't
// work because all dialog elements wouldn't be constructed yet).
wxMSWDarkMode::AllowForTaskDialog(hwnd);
// Let the main thread know that the dialog can be used.
sharedData->m_status = wxProgressDialogStatus::Initialized;
@@ -1166,6 +1173,18 @@ wxProgressDialogTaskRunner::TaskDialogCallbackProc
EnableCloseButtons(hwnd, false);
break;
case TDN_EXPANDO_BUTTON_CLICKED:
// Store the expanded state as a window property so the subclassed
// TaskPage panel can read it during WM_PAINT without a UIA call.
SetProp(hwnd, L"IsExpanded",
reinterpret_cast<HANDLE>(static_cast<ULONG_PTR>(wParam)));
break;
case TDN_DESTROYED:
// Clean up all resources allocated by AllowForTaskDialog().
wxMSWDarkMode::RemoveFromTaskDialog(hwnd);
break;
case TDN_BUTTON_CLICKED:
switch ( wParam )
{
+1 -2
View File
@@ -956,8 +956,7 @@ void wxRendererXP::DrawItemText(wxWindow* win,
{
RECT rc = ConvertToRECT(dc, rect);
DTTOPTS textOpts;
textOpts.dwSize = sizeof(textOpts);
WinStructWordSize<DTTOPTS> textOpts;
textOpts.dwFlags = DTT_STATEID;
textOpts.iStateId = itemState;
+1 -9
View File
@@ -599,15 +599,7 @@ void wxStaticBox::PaintForeground(wxDC& dc, const RECT&)
if ( hTheme )
{
LOGFONTW themeFont;
if ( ::GetThemeFont
(
hTheme,
hdc,
BP_GROUPBOX,
GBS_NORMAL,
TMT_FONT,
&themeFont
) == S_OK )
if ( hTheme.GetFont(themeFont, hdc, BP_GROUPBOX, GBS_NORMAL) )
{
font.Init(themeFont);
if ( font )
+1344
View File
File diff suppressed because it is too large Load Diff
+1 -2
View File
@@ -725,8 +725,7 @@ void wxToolBar::MSWSetDarkOrLightMode(SetMode setmode)
// Update the separator above the toolbar which is drawn partially in
// white by default and so looks very ugly in dark mode.
COLORSCHEME colScheme;
colScheme.dwSize = sizeof(COLORSCHEME);
WinStructWordSize<COLORSCHEME> colScheme;
colScheme.clrBtnHighlight =
colScheme.clrBtnShadow = wxSysColourToRGB(wxSYS_COLOUR_WINDOW);
::SendMessage(GetHwnd(), TB_SETCOLORSCHEME, 0, (LPARAM)&colScheme);
+1 -3
View File
@@ -818,9 +818,7 @@ int wxKillAllChildren(long pid, wxSignal sig, wxKillError *krc, int flags)
}
//Fill in the size of the structure before using it.
PROCESSENTRY32 pe;
wxZeroMemory(pe);
pe.dwSize = sizeof(PROCESSENTRY32);
WinStructWordSize<PROCESSENTRY32> pe;
// Walk the snapshot of the processes, and for each process,
// kill it if its parent is pid.
+47 -5
View File
@@ -110,10 +110,11 @@ wxColour wxUxThemeHandle::GetColour(int part, int prop, int state) const
return wxRGBToColour(col);
}
wxSize wxUxThemeHandle::DoGetSize(int part, int state, THEMESIZE ts) const
wxSize
wxUxThemeHandle::DoGetSize(HDC hdc, int part, int state, THEMESIZE ts) const
{
SIZE size;
HRESULT hr = ::GetThemePartSize(m_hTheme, nullptr, part, state, nullptr, ts,
HRESULT hr = ::GetThemePartSize(m_hTheme, hdc, part, state, nullptr, ts,
&size);
if ( FAILED(hr) )
{
@@ -127,10 +128,51 @@ wxSize wxUxThemeHandle::DoGetSize(int part, int state, THEMESIZE ts) const
return wxSize{size.cx, size.cy};
}
void
wxUxThemeHandle::DrawBackground(HDC hdc, const RECT& rc, int part, int state)
bool
wxUxThemeHandle::GetMargins(MARGINS& margins,
int part,
int prop,
int state,
HDC hdc) const
{
HRESULT hr = ::DrawThemeBackground(m_hTheme, hdc, part, state, &rc, nullptr);
HRESULT hr = ::GetThemeMargins(m_hTheme, hdc, part, state, prop, nullptr,
&margins);
if ( FAILED(hr) )
{
wxLogApiError(
wxString::Format("GetThemeMargins(%i, %i, %i)", part, state, prop),
hr
);
return false;
}
return true;
}
bool
wxUxThemeHandle::GetFont(LOGFONTW& lf, HDC hdc, int part, int state) const
{
HRESULT hr = ::GetThemeFont(m_hTheme, hdc, part, state, TMT_FONT, &lf);
if ( FAILED(hr) )
{
wxLogApiError(
wxString::Format("GetThemeFont(%i, %i)", part, state),
hr
);
return false;
}
return true;
}
void
wxUxThemeHandle::DrawBackground(HDC hdc,
const RECT& rc,
int part,
int state,
const RECT* rcClip)
{
HRESULT hr = ::DrawThemeBackground(m_hTheme, hdc, part, state, &rc, rcClip);
if ( FAILED(hr) )
{
wxLogApiError(
+3 -13
View File
@@ -3555,12 +3555,7 @@ wxWindowMSW::MSWHandleMessage(WXLRESULT *result,
case WM_SETTINGCHANGE:
// Check for the special case of the message which notifies about
// the colours change.
// Note that "ImmersiveColorSet" is set both when switching between
// light and dark themes and also when changing high contrast mode,
// for which an additional message with "WindowsThemeElement" is
// also sent, but we don't need to check for it as handling this
// one is enough
if ( lParam && wxStrcmp((TCHAR*)lParam, wxT("ImmersiveColorSet")) == 0 )
if ( wxIsSystemColourChange(lParam) )
processed = HandleSysColorChange();
else
processed = HandleSettingChange(wParam, lParam);
@@ -4839,10 +4834,7 @@ wxWindowMSW::MSWOnMeasureItem(int id, WXMEASUREITEMSTRUCT *itemStruct)
// DPI
// ---------------------------------------------------------------------------
namespace
{
static wxSize GetWindowDPI(HWND hwnd)
wxSize wxGetWindowDPI(HWND hwnd)
{
typedef UINT (WINAPI *GetDpiForWindow_t)(HWND hwnd);
static GetDpiForWindow_t s_pfnGetDpiForWindow = nullptr;
@@ -4864,8 +4856,6 @@ static wxSize GetWindowDPI(HWND hwnd)
return wxSize();
}
}
/*extern*/
int wxGetSystemMetrics(int nIndex, const wxWindow* window)
{
@@ -4956,7 +4946,7 @@ wxSize wxWindowMSW::GetDPI() const
}
}
wxSize dpi = GetWindowDPI(hwnd);
wxSize dpi = wxGetWindowDPI(hwnd);
if ( !dpi.x || !dpi.y )
{