Add native wxOverlay implementation for wxMSW
Using generic implementation doesn't work any longer since the switch to using composited windows (i.e. turning on WS_EX_COMPOSITED) by default as drawing using wxClientDC has no effect. So implement wxOverlay in a different way by using a layered window covering the original window and drawing on it instead. This is similar to Cocoa implementation of wxOverlay. Closes #23047.
This commit is contained in:
parent
487018f42e
commit
91031bcfee
10 changed files with 321 additions and 8 deletions
36
Makefile.in
36
Makefile.in
|
|
@ -4976,7 +4976,8 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS = \
|
|||
monodll_uuid.o \
|
||||
monodll_msw_evtloop.o \
|
||||
monodll_access.o \
|
||||
monodll_msw_bmpbndl.o
|
||||
monodll_msw_bmpbndl.o \
|
||||
monodll_msw_overlay.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)
|
||||
|
|
@ -5704,7 +5705,8 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_1 = \
|
|||
monodll_uuid.o \
|
||||
monodll_msw_evtloop.o \
|
||||
monodll_access.o \
|
||||
monodll_msw_bmpbndl.o
|
||||
monodll_msw_bmpbndl.o \
|
||||
monodll_msw_overlay.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)
|
||||
|
|
@ -6732,7 +6734,8 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_2 = \
|
|||
monolib_uuid.o \
|
||||
monolib_msw_evtloop.o \
|
||||
monolib_access.o \
|
||||
monolib_msw_bmpbndl.o
|
||||
monolib_msw_bmpbndl.o \
|
||||
monolib_msw_overlay.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)
|
||||
|
|
@ -7460,7 +7463,8 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_3 = \
|
|||
monolib_uuid.o \
|
||||
monolib_msw_evtloop.o \
|
||||
monolib_access.o \
|
||||
monolib_msw_bmpbndl.o
|
||||
monolib_msw_bmpbndl.o \
|
||||
monolib_msw_overlay.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)
|
||||
|
|
@ -8642,7 +8646,8 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_4 = \
|
|||
coredll_uuid.o \
|
||||
coredll_msw_evtloop.o \
|
||||
coredll_access.o \
|
||||
coredll_msw_bmpbndl.o
|
||||
coredll_msw_bmpbndl.o \
|
||||
coredll_msw_overlay.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)
|
||||
|
|
@ -9370,7 +9375,8 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_5 = \
|
|||
coredll_uuid.o \
|
||||
coredll_msw_evtloop.o \
|
||||
coredll_access.o \
|
||||
coredll_msw_bmpbndl.o
|
||||
coredll_msw_bmpbndl.o \
|
||||
coredll_msw_overlay.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)
|
||||
|
|
@ -10128,7 +10134,8 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_6 = \
|
|||
corelib_uuid.o \
|
||||
corelib_msw_evtloop.o \
|
||||
corelib_access.o \
|
||||
corelib_msw_bmpbndl.o
|
||||
corelib_msw_bmpbndl.o \
|
||||
corelib_msw_overlay.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)
|
||||
|
|
@ -10856,7 +10863,8 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_7 = \
|
|||
corelib_uuid.o \
|
||||
corelib_msw_evtloop.o \
|
||||
corelib_access.o \
|
||||
corelib_msw_bmpbndl.o
|
||||
corelib_msw_bmpbndl.o \
|
||||
corelib_msw_overlay.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)
|
||||
|
|
@ -17407,6 +17415,9 @@ monodll_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONODLL_ODEP)
|
|||
@COND_TOOLKIT_MSW_USE_GUI_1@monodll_msw_bmpbndl.o: $(srcdir)/src/msw/bmpbndl.cpp $(MONODLL_ODEP)
|
||||
@COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/msw/bmpbndl.cpp
|
||||
|
||||
@COND_TOOLKIT_MSW_USE_GUI_1@monodll_msw_overlay.o: $(srcdir)/src/msw/overlay.cpp $(MONODLL_ODEP)
|
||||
@COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/msw/overlay.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
|
||||
|
||||
|
|
@ -22171,6 +22182,9 @@ monolib_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONOLIB_ODEP)
|
|||
@COND_TOOLKIT_MSW_USE_GUI_1@monolib_msw_bmpbndl.o: $(srcdir)/src/msw/bmpbndl.cpp $(MONOLIB_ODEP)
|
||||
@COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/msw/bmpbndl.cpp
|
||||
|
||||
@COND_TOOLKIT_MSW_USE_GUI_1@monolib_msw_overlay.o: $(srcdir)/src/msw/overlay.cpp $(MONOLIB_ODEP)
|
||||
@COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/msw/overlay.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
|
||||
|
||||
|
|
@ -27034,6 +27048,9 @@ coredll_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(COREDLL_ODEP)
|
|||
@COND_TOOLKIT_MSW_USE_GUI_1@coredll_msw_bmpbndl.o: $(srcdir)/src/msw/bmpbndl.cpp $(COREDLL_ODEP)
|
||||
@COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/msw/bmpbndl.cpp
|
||||
|
||||
@COND_TOOLKIT_MSW_USE_GUI_1@coredll_msw_overlay.o: $(srcdir)/src/msw/overlay.cpp $(COREDLL_ODEP)
|
||||
@COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/msw/overlay.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
|
||||
|
||||
|
|
@ -30769,6 +30786,9 @@ corelib_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(CORELIB_ODEP)
|
|||
@COND_TOOLKIT_MSW_USE_GUI_1@corelib_msw_bmpbndl.o: $(srcdir)/src/msw/bmpbndl.cpp $(CORELIB_ODEP)
|
||||
@COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/msw/bmpbndl.cpp
|
||||
|
||||
@COND_TOOLKIT_MSW_USE_GUI_1@corelib_msw_overlay.o: $(srcdir)/src/msw/overlay.cpp $(CORELIB_ODEP)
|
||||
@COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/msw/overlay.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
|
||||
|
||||
|
|
|
|||
|
|
@ -1764,6 +1764,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
|
|||
src/msw/evtloop.cpp
|
||||
src/msw/ole/access.cpp
|
||||
src/msw/bmpbndl.cpp
|
||||
src/msw/overlay.cpp
|
||||
</set>
|
||||
<set var="MSW_LOWLEVEL_HDR" hints="files">
|
||||
wx/msw/nonownedwnd.h
|
||||
|
|
|
|||
|
|
@ -1640,6 +1640,7 @@ set(MSW_LOWLEVEL_SRC
|
|||
src/msw/evtloop.cpp
|
||||
src/msw/ole/access.cpp
|
||||
src/msw/bmpbndl.cpp
|
||||
src/msw/overlay.cpp
|
||||
)
|
||||
|
||||
set(MSW_LOWLEVEL_HDR
|
||||
|
|
|
|||
|
|
@ -1626,6 +1626,7 @@ MSW_LOWLEVEL_SRC =
|
|||
src/msw/ole/oleutils.cpp
|
||||
src/msw/ole/safearray.cpp
|
||||
src/msw/ole/uuid.cpp
|
||||
src/msw/overlay.cpp
|
||||
src/msw/palette.cpp
|
||||
src/msw/pen.cpp
|
||||
src/msw/popupwin.cpp
|
||||
|
|
|
|||
|
|
@ -1926,6 +1926,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \
|
|||
$(OBJS)\monodll_evtloop.o \
|
||||
$(OBJS)\monodll_access.o \
|
||||
$(OBJS)\monodll_msw_bmpbndl.o \
|
||||
$(OBJS)\monodll_overlay.o \
|
||||
$(OBJS)\monodll_clrpickerg.o \
|
||||
$(OBJS)\monodll_collpaneg.o \
|
||||
$(OBJS)\monodll_filepickerg.o \
|
||||
|
|
@ -2274,6 +2275,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \
|
|||
$(OBJS)\monodll_evtloop.o \
|
||||
$(OBJS)\monodll_access.o \
|
||||
$(OBJS)\monodll_msw_bmpbndl.o \
|
||||
$(OBJS)\monodll_overlay.o \
|
||||
$(OBJS)\monodll_generic_accel.o \
|
||||
$(OBJS)\monodll_clrpickerg.o \
|
||||
$(OBJS)\monodll_collpaneg.o \
|
||||
|
|
@ -2775,6 +2777,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \
|
|||
$(OBJS)\monolib_evtloop.o \
|
||||
$(OBJS)\monolib_access.o \
|
||||
$(OBJS)\monolib_msw_bmpbndl.o \
|
||||
$(OBJS)\monolib_overlay.o \
|
||||
$(OBJS)\monolib_clrpickerg.o \
|
||||
$(OBJS)\monolib_collpaneg.o \
|
||||
$(OBJS)\monolib_filepickerg.o \
|
||||
|
|
@ -3123,6 +3126,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \
|
|||
$(OBJS)\monolib_evtloop.o \
|
||||
$(OBJS)\monolib_access.o \
|
||||
$(OBJS)\monolib_msw_bmpbndl.o \
|
||||
$(OBJS)\monolib_overlay.o \
|
||||
$(OBJS)\monolib_generic_accel.o \
|
||||
$(OBJS)\monolib_clrpickerg.o \
|
||||
$(OBJS)\monolib_collpaneg.o \
|
||||
|
|
@ -3506,6 +3510,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \
|
|||
$(OBJS)\coredll_evtloop.o \
|
||||
$(OBJS)\coredll_access.o \
|
||||
$(OBJS)\coredll_msw_bmpbndl.o \
|
||||
$(OBJS)\coredll_overlay.o \
|
||||
$(OBJS)\coredll_clrpickerg.o \
|
||||
$(OBJS)\coredll_collpaneg.o \
|
||||
$(OBJS)\coredll_filepickerg.o \
|
||||
|
|
@ -3854,6 +3859,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \
|
|||
$(OBJS)\coredll_evtloop.o \
|
||||
$(OBJS)\coredll_access.o \
|
||||
$(OBJS)\coredll_msw_bmpbndl.o \
|
||||
$(OBJS)\coredll_overlay.o \
|
||||
$(OBJS)\coredll_generic_accel.o \
|
||||
$(OBJS)\coredll_clrpickerg.o \
|
||||
$(OBJS)\coredll_collpaneg.o \
|
||||
|
|
@ -4194,6 +4200,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \
|
|||
$(OBJS)\corelib_evtloop.o \
|
||||
$(OBJS)\corelib_access.o \
|
||||
$(OBJS)\corelib_msw_bmpbndl.o \
|
||||
$(OBJS)\corelib_overlay.o \
|
||||
$(OBJS)\corelib_clrpickerg.o \
|
||||
$(OBJS)\corelib_collpaneg.o \
|
||||
$(OBJS)\corelib_filepickerg.o \
|
||||
|
|
@ -4542,6 +4549,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \
|
|||
$(OBJS)\corelib_evtloop.o \
|
||||
$(OBJS)\corelib_access.o \
|
||||
$(OBJS)\corelib_msw_bmpbndl.o \
|
||||
$(OBJS)\corelib_overlay.o \
|
||||
$(OBJS)\corelib_generic_accel.o \
|
||||
$(OBJS)\corelib_clrpickerg.o \
|
||||
$(OBJS)\corelib_collpaneg.o \
|
||||
|
|
@ -8465,6 +8473,11 @@ $(OBJS)\monodll_msw_bmpbndl.o: ../../src/msw/bmpbndl.cpp
|
|||
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
|
||||
endif
|
||||
|
||||
ifeq ($(USE_GUI),1)
|
||||
$(OBJS)\monodll_overlay.o: ../../src/msw/overlay.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) $<
|
||||
|
|
@ -11052,6 +11065,11 @@ $(OBJS)\monolib_msw_bmpbndl.o: ../../src/msw/bmpbndl.cpp
|
|||
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
|
||||
endif
|
||||
|
||||
ifeq ($(USE_GUI),1)
|
||||
$(OBJS)\monolib_overlay.o: ../../src/msw/overlay.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) $<
|
||||
|
|
@ -13600,6 +13618,11 @@ $(OBJS)\coredll_msw_bmpbndl.o: ../../src/msw/bmpbndl.cpp
|
|||
$(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
|
||||
endif
|
||||
|
||||
ifeq ($(USE_GUI),1)
|
||||
$(OBJS)\coredll_overlay.o: ../../src/msw/overlay.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) $<
|
||||
|
|
@ -15353,6 +15376,11 @@ $(OBJS)\corelib_msw_bmpbndl.o: ../../src/msw/bmpbndl.cpp
|
|||
$(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<
|
||||
endif
|
||||
|
||||
ifeq ($(USE_GUI),1)
|
||||
$(OBJS)\corelib_overlay.o: ../../src/msw/overlay.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) $<
|
||||
|
|
|
|||
|
|
@ -2243,6 +2243,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \
|
|||
$(OBJS)\monodll_evtloop.obj \
|
||||
$(OBJS)\monodll_access.obj \
|
||||
$(OBJS)\monodll_msw_bmpbndl.obj \
|
||||
$(OBJS)\monodll_overlay.obj \
|
||||
$(OBJS)\monodll_clrpickerg.obj \
|
||||
$(OBJS)\monodll_collpaneg.obj \
|
||||
$(OBJS)\monodll_filepickerg.obj \
|
||||
|
|
@ -2589,6 +2590,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \
|
|||
$(OBJS)\monodll_evtloop.obj \
|
||||
$(OBJS)\monodll_access.obj \
|
||||
$(OBJS)\monodll_msw_bmpbndl.obj \
|
||||
$(OBJS)\monodll_overlay.obj \
|
||||
$(OBJS)\monodll_generic_accel.obj \
|
||||
$(OBJS)\monodll_clrpickerg.obj \
|
||||
$(OBJS)\monodll_collpaneg.obj \
|
||||
|
|
@ -3092,6 +3094,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \
|
|||
$(OBJS)\monolib_evtloop.obj \
|
||||
$(OBJS)\monolib_access.obj \
|
||||
$(OBJS)\monolib_msw_bmpbndl.obj \
|
||||
$(OBJS)\monolib_overlay.obj \
|
||||
$(OBJS)\monolib_clrpickerg.obj \
|
||||
$(OBJS)\monolib_collpaneg.obj \
|
||||
$(OBJS)\monolib_filepickerg.obj \
|
||||
|
|
@ -3438,6 +3441,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \
|
|||
$(OBJS)\monolib_evtloop.obj \
|
||||
$(OBJS)\monolib_access.obj \
|
||||
$(OBJS)\monolib_msw_bmpbndl.obj \
|
||||
$(OBJS)\monolib_overlay.obj \
|
||||
$(OBJS)\monolib_generic_accel.obj \
|
||||
$(OBJS)\monolib_clrpickerg.obj \
|
||||
$(OBJS)\monolib_collpaneg.obj \
|
||||
|
|
@ -3873,6 +3877,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \
|
|||
$(OBJS)\coredll_evtloop.obj \
|
||||
$(OBJS)\coredll_access.obj \
|
||||
$(OBJS)\coredll_msw_bmpbndl.obj \
|
||||
$(OBJS)\coredll_overlay.obj \
|
||||
$(OBJS)\coredll_clrpickerg.obj \
|
||||
$(OBJS)\coredll_collpaneg.obj \
|
||||
$(OBJS)\coredll_filepickerg.obj \
|
||||
|
|
@ -4219,6 +4224,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \
|
|||
$(OBJS)\coredll_evtloop.obj \
|
||||
$(OBJS)\coredll_access.obj \
|
||||
$(OBJS)\coredll_msw_bmpbndl.obj \
|
||||
$(OBJS)\coredll_overlay.obj \
|
||||
$(OBJS)\coredll_generic_accel.obj \
|
||||
$(OBJS)\coredll_clrpickerg.obj \
|
||||
$(OBJS)\coredll_collpaneg.obj \
|
||||
|
|
@ -4559,6 +4565,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \
|
|||
$(OBJS)\corelib_evtloop.obj \
|
||||
$(OBJS)\corelib_access.obj \
|
||||
$(OBJS)\corelib_msw_bmpbndl.obj \
|
||||
$(OBJS)\corelib_overlay.obj \
|
||||
$(OBJS)\corelib_clrpickerg.obj \
|
||||
$(OBJS)\corelib_collpaneg.obj \
|
||||
$(OBJS)\corelib_filepickerg.obj \
|
||||
|
|
@ -4905,6 +4912,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \
|
|||
$(OBJS)\corelib_evtloop.obj \
|
||||
$(OBJS)\corelib_access.obj \
|
||||
$(OBJS)\corelib_msw_bmpbndl.obj \
|
||||
$(OBJS)\corelib_overlay.obj \
|
||||
$(OBJS)\corelib_generic_accel.obj \
|
||||
$(OBJS)\corelib_clrpickerg.obj \
|
||||
$(OBJS)\corelib_collpaneg.obj \
|
||||
|
|
@ -8910,6 +8918,11 @@ $(OBJS)\monodll_msw_bmpbndl.obj: ..\..\src\msw\bmpbndl.cpp
|
|||
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\msw\bmpbndl.cpp
|
||||
!endif
|
||||
|
||||
!if "$(USE_GUI)" == "1"
|
||||
$(OBJS)\monodll_overlay.obj: ..\..\src\msw\overlay.cpp
|
||||
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\msw\overlay.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
|
||||
|
|
@ -11497,6 +11510,11 @@ $(OBJS)\monolib_msw_bmpbndl.obj: ..\..\src\msw\bmpbndl.cpp
|
|||
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\msw\bmpbndl.cpp
|
||||
!endif
|
||||
|
||||
!if "$(USE_GUI)" == "1"
|
||||
$(OBJS)\monolib_overlay.obj: ..\..\src\msw\overlay.cpp
|
||||
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\msw\overlay.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
|
||||
|
|
@ -14045,6 +14063,11 @@ $(OBJS)\coredll_msw_bmpbndl.obj: ..\..\src\msw\bmpbndl.cpp
|
|||
$(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) ..\..\src\msw\bmpbndl.cpp
|
||||
!endif
|
||||
|
||||
!if "$(USE_GUI)" == "1"
|
||||
$(OBJS)\coredll_overlay.obj: ..\..\src\msw\overlay.cpp
|
||||
$(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) ..\..\src\msw\overlay.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
|
||||
|
|
@ -15798,6 +15821,11 @@ $(OBJS)\corelib_msw_bmpbndl.obj: ..\..\src\msw\bmpbndl.cpp
|
|||
$(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) ..\..\src\msw\bmpbndl.cpp
|
||||
!endif
|
||||
|
||||
!if "$(USE_GUI)" == "1"
|
||||
$(OBJS)\corelib_overlay.obj: ..\..\src\msw\overlay.cpp
|
||||
$(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) ..\..\src\msw\overlay.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
|
||||
|
|
|
|||
|
|
@ -1079,6 +1079,7 @@
|
|||
<ClCompile Include="..\..\src\common\bmpcboxcmn.cpp" />
|
||||
<ClCompile Include="..\..\src\generic\rowheightcache.cpp" />
|
||||
<ClCompile Include="..\..\src\generic\creddlgg.cpp" />
|
||||
<ClCompile Include="..\..\src\msw\overlay.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="..\..\src\msw\version.rc">
|
||||
|
|
|
|||
|
|
@ -942,6 +942,9 @@
|
|||
<ClCompile Include="..\..\src\msw\ole\uuid.cpp">
|
||||
<Filter>MSW Sources</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\msw\overlay.cpp">
|
||||
<Filter>MSW Sources</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\msw\ownerdrw.cpp">
|
||||
<Filter>MSW Sources</Filter>
|
||||
</ClCompile>
|
||||
|
|
|
|||
|
|
@ -17,6 +17,8 @@
|
|||
#define wxHAS_NATIVE_OVERLAY 1
|
||||
#elif defined(__WXOSX__) && wxOSX_USE_COCOA
|
||||
#define wxHAS_NATIVE_OVERLAY 1
|
||||
#elif defined(__WXMSW__)
|
||||
#define wxHAS_NATIVE_OVERLAY 1
|
||||
#elif defined(__WXGTK3__)
|
||||
#define wxHAS_NATIVE_OVERLAY 1
|
||||
#define wxHAS_GENERIC_OVERLAY 1
|
||||
|
|
|
|||
228
src/msw/overlay.cpp
Normal file
228
src/msw/overlay.cpp
Normal file
|
|
@ -0,0 +1,228 @@
|
|||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/msw/overlay.cpp
|
||||
// Author: Ali Kettab
|
||||
// Copyright: (c) 2022 Ali Kettab
|
||||
// Licence: wxWindows licence
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "wx/wxprec.h"
|
||||
|
||||
#include "wx/private/overlay.h"
|
||||
#include "wx/nativewin.h"
|
||||
#include "wx/dcclient.h"
|
||||
#include "wx/dcmemory.h"
|
||||
#include "wx/msw/dc.h"
|
||||
#include "wx/msw/private.h"
|
||||
|
||||
namespace // anonymous
|
||||
{
|
||||
class wxOverlayWindow : public wxNativeContainerWindow
|
||||
{
|
||||
public:
|
||||
static wxWindow* New(const wxRect& rect)
|
||||
{
|
||||
WNDCLASS wndclass;
|
||||
wxZeroMemory(wndclass);
|
||||
|
||||
wndclass.lpfnWndProc = ::DefWindowProc;
|
||||
wndclass.hInstance = wxGetInstance();
|
||||
wndclass.lpszClassName = GetOverlayWindowClass();
|
||||
|
||||
if ( !::RegisterClass(&wndclass) )
|
||||
{
|
||||
wxLogLastError(wxS("RegisterClass() in wxOverlayWindow::Create()"));
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const wxPoint pos = rect.GetPosition();
|
||||
const wxSize size = rect.GetSize();
|
||||
WXDWORD exStyle = WS_EX_LAYERED | WS_EX_TRANSPARENT | WS_EX_NOACTIVATE;
|
||||
|
||||
HWND hwnd = ::CreateWindowEx
|
||||
(
|
||||
exStyle,
|
||||
GetOverlayWindowClass(),
|
||||
nullptr,
|
||||
WS_POPUP | WS_VISIBLE,
|
||||
pos.x, pos.y,
|
||||
size.x, size.y,
|
||||
(HWND)nullptr,
|
||||
(HMENU)nullptr,
|
||||
wxGetInstance(),
|
||||
(LPVOID)nullptr
|
||||
);
|
||||
|
||||
if ( !hwnd )
|
||||
{
|
||||
wxLogLastError(wxS("CreateWindowEx() in wxOverlayWindow::Create()"));
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if ( !::SetLayeredWindowAttributes(hwnd, 0, 128, LWA_COLORKEY|LWA_ALPHA) )
|
||||
{
|
||||
wxLogLastError(wxS("SetLayeredWindowAttributes() in wxOverlayWindow::Create()"));
|
||||
}
|
||||
|
||||
return new wxOverlayWindow(hwnd);
|
||||
}
|
||||
|
||||
static const wxChar* GetOverlayWindowClass()
|
||||
{
|
||||
return wxS("wxOverlayWindow");
|
||||
}
|
||||
|
||||
virtual bool Show(bool show) override
|
||||
{
|
||||
if ( !GetHandle() || !wxWindowBase::Show(show) )
|
||||
return false;
|
||||
|
||||
if ( show )
|
||||
{
|
||||
::SetWindowPos(GetHandle(), nullptr, 0, 0, 0, 0,
|
||||
SWP_NOSIZE |
|
||||
SWP_NOMOVE |
|
||||
SWP_NOREDRAW |
|
||||
SWP_NOOWNERZORDER |
|
||||
SWP_NOACTIVATE |
|
||||
SWP_SHOWWINDOW);
|
||||
}
|
||||
else
|
||||
{
|
||||
::ShowWindow(GetHandle(), SW_HIDE);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
virtual bool Destroy() override
|
||||
{
|
||||
HWND hwnd = GetHandle();
|
||||
|
||||
if ( hwnd && !::DestroyWindow(hwnd) )
|
||||
{
|
||||
wxLogLastError(wxS("DestroyWindow() in wxOverlayWindow::Destroy()"));
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( !::UnregisterClass(GetOverlayWindowClass(), wxGetInstance()) )
|
||||
{
|
||||
wxLogLastError(wxS("UnregisterClass() in wxOverlayWindow::Destroy()"));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private:
|
||||
wxOverlayWindow(HWND hwnd) : wxNativeContainerWindow(hwnd) {}
|
||||
~wxOverlayWindow() {}
|
||||
};
|
||||
} // anonymous namespace
|
||||
|
||||
class wxOverlayImpl : public wxOverlay::Impl
|
||||
{
|
||||
public:
|
||||
wxOverlayImpl() { }
|
||||
~wxOverlayImpl() { }
|
||||
|
||||
virtual bool IsNative() const override { return true; }
|
||||
virtual void Reset() override;
|
||||
virtual bool IsOk() override;
|
||||
virtual void Init(wxDC* dc, int x , int y , int width , int height) override;
|
||||
virtual void BeginDrawing(wxDC* dc) override;
|
||||
virtual void EndDrawing(wxDC* dc) override;
|
||||
virtual void Clear(wxDC* dc) override;
|
||||
|
||||
public:
|
||||
// window the overlay is associated with
|
||||
wxWindow* m_window = nullptr;
|
||||
// the overlay window itself. doesn't have to be child of any window
|
||||
// and is totally managed by this class
|
||||
wxWindow* m_overlayWindow = nullptr;
|
||||
|
||||
wxRect m_rect;
|
||||
|
||||
// Drawing on the overlay window is achieved by hijacking the existing wxDC.
|
||||
// i.e. any drawing done through wxDC should go to the offscreen bitmap m_bitmap
|
||||
// which will eventually be drawn on the overlay window.
|
||||
wxBitmap m_bitmap;
|
||||
wxMemoryDC m_memDC; // for memory dc construction only.
|
||||
WXHDC m_hdc; // the original HDC
|
||||
|
||||
wxDECLARE_NO_COPY_CLASS(wxOverlayImpl);
|
||||
};
|
||||
|
||||
bool wxOverlayImpl::IsOk()
|
||||
{
|
||||
return m_overlayWindow != nullptr;
|
||||
}
|
||||
|
||||
void wxOverlayImpl::Init(wxDC* dc, int , int , int , int )
|
||||
{
|
||||
if ( IsOk() )
|
||||
return;
|
||||
|
||||
m_window = dc->GetWindow();
|
||||
|
||||
m_rect.SetSize(m_window->GetClientSize());
|
||||
m_rect.SetPosition(m_window->GetScreenPosition());
|
||||
|
||||
m_bitmap.CreateWithDIPSize(m_rect.GetSize(), m_window->GetDPIScaleFactor());
|
||||
|
||||
m_overlayWindow = wxOverlayWindow::New(m_rect);
|
||||
}
|
||||
|
||||
void wxOverlayImpl::BeginDrawing(wxDC* dc)
|
||||
{
|
||||
wxCHECK_RET( IsOk(), wxS("overlay not initialized") );
|
||||
|
||||
m_memDC.SelectObject(m_bitmap);
|
||||
|
||||
auto impl = dc->GetImpl();
|
||||
auto msw_impl = static_cast<wxMSWDCImpl*>(impl);
|
||||
|
||||
m_hdc = GetHdcOf(*msw_impl); // save the original hdc
|
||||
|
||||
msw_impl->SetHDC(GetHdcOf(m_memDC));
|
||||
msw_impl->UpdateClipBox();
|
||||
}
|
||||
|
||||
void wxOverlayImpl::EndDrawing(wxDC* dc)
|
||||
{
|
||||
wxCHECK_RET( IsOk(), wxS("overlay not initialized") );
|
||||
|
||||
m_memDC.SelectObject(wxNullBitmap);
|
||||
|
||||
auto impl = dc->GetImpl();
|
||||
auto msw_impl = static_cast<wxMSWDCImpl*>(impl);
|
||||
|
||||
msw_impl->SetHDC(m_hdc); // restore the original hdc
|
||||
msw_impl->UpdateClipBox();
|
||||
|
||||
wxWindowDC winDC(m_overlayWindow);
|
||||
winDC.DrawBitmap(m_bitmap, wxPoint(0, 0));
|
||||
}
|
||||
|
||||
void wxOverlayImpl::Clear(wxDC* WXUNUSED(dc))
|
||||
{
|
||||
wxCHECK_RET( IsOk(), wxS("overlay not initialized") );
|
||||
|
||||
// doesn't work with non double buffered m_window
|
||||
// m_memDC.SetBackground(*wxTRANSPARENT_BRUSH);
|
||||
|
||||
m_memDC.SetBackground(wxBrush(wxTransparentColour));
|
||||
m_memDC.Clear();
|
||||
}
|
||||
|
||||
void wxOverlayImpl::Reset()
|
||||
{
|
||||
if ( IsOk() )
|
||||
{
|
||||
m_overlayWindow->Destroy();
|
||||
m_overlayWindow = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
wxOverlay::Impl* wxOverlay::Create()
|
||||
{
|
||||
return new wxOverlayImpl;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue