From 4b8141b136232dcede2ff876d68e02f4e4807f90 Mon Sep 17 00:00:00 2001 From: gho tik Date: Mon, 30 Jan 2017 11:49:56 -0500 Subject: [PATCH] v2_04_09_src_fx1 Former-commit-id: 34ead633e5a81cb2e9ec4181e14a991f756bd540 --- Release/.gitattributes | 1 - Release/dxwnd.dll | 3 - build/dxwnd.dll | 4 +- build/dxwnd.exe | 2 +- build/exports/Dominant Species.dxw | 36 +++ build/exports/Hexen II (GDI).dxw | 36 +++ build/exports/Hexen II (OpenGl).dxw | 36 +++ build/exports/Interstate 76 Nitro Pack.dxw | 36 +++ .../Man TT Super Bike (fake fullscreen).dxw | 36 +++ build/exports/Man TT Super Bike.dxw | 14 +- build/exports/Martian Gothic Unification.dxw | 10 +- build/exports/NASCAR 2000.dxw | 36 +++ build/exports/ShipWreckers demo.dxw | 36 +++ build/exports/SuperBike 2000.dxw | 36 +++ build/exports/V-Rally 3.dxw | 36 +++ ...arcraft Adventures - Lord Of The Clans.dxw | 36 +++ .../Warhammer - Shadow of the Horned Rat.dxw | 2 +- build/exports/Wrestling MPire Remix.dxw | 36 +++ build/exports/dxwnd.ini | 40 ++- build/exports/dxwnd.log | 228 +----------------- build/exports/dxwnd.reg | 6 +- build/readme-relnotes.txt | 8 + dll/ddcreates.cpp | 34 +-- dll/ddraw.cpp | 98 ++++---- dll/dxmapping.cpp | 8 +- dll/dxwcapsdb.cpp | 14 +- dll/dxwcore.cpp | 5 +- dll/dxwcore.hpp | 2 + dll/dxwnd.cpp | 2 +- dll/dxwnd.vs2008.suo | Bin 680448 -> 709120 bytes dll/queryint.cpp | 19 +- dll/syslibs.h | 6 + dll/user32.cpp | 91 ++++++- dll/winproc.cpp | 4 +- host/dxwndhost.aps | Bin 260804 -> 260868 bytes host/dxwndhost.rc | Bin 150724 -> 150764 bytes host/dxwndhost.vs2008.suo | Bin 176128 -> 176640 bytes 37 files changed, 648 insertions(+), 349 deletions(-) delete mode 100644 Release/.gitattributes delete mode 100644 Release/dxwnd.dll create mode 100644 build/exports/Dominant Species.dxw create mode 100644 build/exports/Hexen II (GDI).dxw create mode 100644 build/exports/Hexen II (OpenGl).dxw create mode 100644 build/exports/Interstate 76 Nitro Pack.dxw create mode 100644 build/exports/Man TT Super Bike (fake fullscreen).dxw create mode 100644 build/exports/NASCAR 2000.dxw create mode 100644 build/exports/ShipWreckers demo.dxw create mode 100644 build/exports/SuperBike 2000.dxw create mode 100644 build/exports/V-Rally 3.dxw create mode 100644 build/exports/Warcraft Adventures - Lord Of The Clans.dxw create mode 100644 build/exports/Wrestling MPire Remix.dxw diff --git a/Release/.gitattributes b/Release/.gitattributes deleted file mode 100644 index b110a24..0000000 --- a/Release/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -*.{dll,exe} filter=lfs diff=lfs merge=lfs -text \ No newline at end of file diff --git a/Release/dxwnd.dll b/Release/dxwnd.dll deleted file mode 100644 index 13f54df..0000000 --- a/Release/dxwnd.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:941f77bf133938a99ebdcbea0c35f2f33248ac7c1d4e7d5fe9d799ce470b433d -size 782336 diff --git a/build/dxwnd.dll b/build/dxwnd.dll index 13f54df..52954a9 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:941f77bf133938a99ebdcbea0c35f2f33248ac7c1d4e7d5fe9d799ce470b433d -size 782336 +oid sha256:5fc4cf8ef5a8514260d213b7d89caebe950a9dcfc43e948b25bb835c57e2df28 +size 782848 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index 885de33..96e20d7 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:743ed4e87aa9d02d8b85936799f99eb83bab948207f13d1a98497644ddd27b20 +oid sha256:0478367b7c87124f807b20c7a3f5e3c6337815e9f8d63619ae023702f0efd817 size 673792 diff --git a/build/exports/Dominant Species.dxw b/build/exports/Dominant Species.dxw new file mode 100644 index 0000000..2170f96 --- /dev/null +++ b/build/exports/Dominant Species.dxw @@ -0,0 +1,36 @@ +[target] +title0=Dominant Species +path0=F:\Games\Dominant Species\DominantSpecies.exe +startfolder0= +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +monitorid0=-1 +coord0=0 +flag0=673185826 +flagg0=1207959552 +flagh0=20 +flagi0=138412036 +flagj0=4224 +flagk0=65536 +flagl0=0 +flagm0=4194304 +tflag0=0 +dflag0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=0 +swapeffect0=0 +maxddinterface0=7 +slowratio0=2 +scanline0=0 +initresw0=800 +initresh0=600 diff --git a/build/exports/Hexen II (GDI).dxw b/build/exports/Hexen II (GDI).dxw new file mode 100644 index 0000000..73e7fad --- /dev/null +++ b/build/exports/Hexen II (GDI).dxw @@ -0,0 +1,36 @@ +[target] +title0=Hexen II (GDI) +path0=D:\Games\Hexen II - RIP\h2.exe +startfolder0= +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +monitorid0=-1 +coord0=0 +flag0=673185827 +flagg0=1209401344 +flagh0=65556 +flagi0=138412036 +flagj0=4224 +flagk0=65536 +flagl0=0 +flagm0=0 +tflag0=0 +dflag0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=0 +swapeffect0=0 +maxddinterface0=7 +slowratio0=2 +scanline0=0 +initresw0=800 +initresh0=600 diff --git a/build/exports/Hexen II (OpenGl).dxw b/build/exports/Hexen II (OpenGl).dxw new file mode 100644 index 0000000..c7bc23b --- /dev/null +++ b/build/exports/Hexen II (OpenGl).dxw @@ -0,0 +1,36 @@ +[target] +title0=Hexen II (OpenGl) +path0=D:\Games\Hexen II - RIP\glh2.exe +startfolder0= +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +monitorid0=-1 +coord0=0 +flag0=673185827 +flagg0=1209401344 +flagh0=65556 +flagi0=138412036 +flagj0=4224 +flagk0=65536 +flagl0=0 +flagm0=0 +tflag0=0 +dflag0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=0 +swapeffect0=0 +maxddinterface0=7 +slowratio0=2 +scanline0=0 +initresw0=800 +initresh0=600 diff --git a/build/exports/Interstate 76 Nitro Pack.dxw b/build/exports/Interstate 76 Nitro Pack.dxw new file mode 100644 index 0000000..5042951 --- /dev/null +++ b/build/exports/Interstate 76 Nitro Pack.dxw @@ -0,0 +1,36 @@ +[target] +title0=Interstate 76 Nitro Pack +path0=F:\Games\Interstate 76 Nitro Pack\nitro.exe +startfolder0= +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +monitorid0=0 +coord0=0 +flag0=134217762 +flagg0=2013265920 +flagh0=20 +flagi0=138412036 +flagj0=4224 +flagk0=65536 +flagl0=0 +flagm0=0 +tflag0=0 +dflag0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 +swapeffect0=0 +maxddinterface0=7 +slowratio0=1 +scanline0=1 +initresw0=0 +initresh0=0 diff --git a/build/exports/Man TT Super Bike (fake fullscreen).dxw b/build/exports/Man TT Super Bike (fake fullscreen).dxw new file mode 100644 index 0000000..f35dbde --- /dev/null +++ b/build/exports/Man TT Super Bike (fake fullscreen).dxw @@ -0,0 +1,36 @@ +[target] +title0=Man TT Super Bike +path0=D:\Games\ManTT\MANXTT.EXE +startfolder0= +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +monitorid0=-1 +coord0=2 +flag0=673185827 +flagg0=1241514008 +flagh0=65556 +flagi0=138444804 +flagj0=1073747072 +flagk0=327680 +flagl0=25165824 +flagm0=1024 +tflag0=0 +dflag0=0 +posx0=150 +posy0=150 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=0 +swapeffect0=0 +maxddinterface0=7 +slowratio0=2 +scanline0=0 +initresw0=640 +initresh0=480 diff --git a/build/exports/Man TT Super Bike.dxw b/build/exports/Man TT Super Bike.dxw index 596f73c..c753d49 100644 --- a/build/exports/Man TT Super Bike.dxw +++ b/build/exports/Man TT Super Bike.dxw @@ -1,6 +1,6 @@ [target] title0=Man TT Super Bike -path0=F:\Games\ManTTSuperBike\MANXTT.EXE +path0=D:\Games\ManTT\MANXTT.EXE startfolder0= launchpath0= module0= @@ -10,14 +10,14 @@ registry0= ver0=0 monitorid0=-1 coord0=0 -flag0=673194022 -flagg0=1207959552 -flagh0=327700 +flag0=673185827 +flagg0=1241513984 +flagh0=65556 flagi0=138412036 flagj0=4224 -flagk0=17104896 -flagl0=276824576 -flagm0=0 +flagk0=327680 +flagl0=0 +flagm0=1024 tflag0=0 dflag0=0 posx0=50 diff --git a/build/exports/Martian Gothic Unification.dxw b/build/exports/Martian Gothic Unification.dxw index 651a152..219b73e 100644 --- a/build/exports/Martian Gothic Unification.dxw +++ b/build/exports/Martian Gothic Unification.dxw @@ -6,7 +6,7 @@ opengllib0= ver0=0 coord0=0 flag0=134217762 -flagg0=1207959552 +flagg0=1275068416 flagh0=20 flagi0=4194308 tflag0=0 @@ -26,7 +26,7 @@ launchpath0= notes0= registry0= flagj0=0 -flagk0=65536 +flagk0=98304 flagl0=0 flagm0=0 dflag0=0 @@ -34,3 +34,9 @@ winver0=0 maxres0=0 swapeffect0=0 maxddinterface0=7 +startfolder0= +monitorid0=0 +slowratio0=1 +scanline0=1 +initresw0=0 +initresh0=0 diff --git a/build/exports/NASCAR 2000.dxw b/build/exports/NASCAR 2000.dxw new file mode 100644 index 0000000..b9d9198 --- /dev/null +++ b/build/exports/NASCAR 2000.dxw @@ -0,0 +1,36 @@ +[target] +title0=NASCAR 2000 +path0=F:\Games\Nascar 2000\NASCAR 2000.exe +startfolder0= +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +monitorid0=-1 +coord0=0 +flag0=673202210 +flagg0=1207959552 +flagh0=20 +flagi0=138412036 +flagj0=4224 +flagk0=65536 +flagl0=0 +flagm0=0 +tflag0=0 +dflag0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=0 +swapeffect0=0 +maxddinterface0=7 +slowratio0=2 +scanline0=0 +initresw0=800 +initresh0=600 diff --git a/build/exports/ShipWreckers demo.dxw b/build/exports/ShipWreckers demo.dxw new file mode 100644 index 0000000..4fa2523 --- /dev/null +++ b/build/exports/ShipWreckers demo.dxw @@ -0,0 +1,36 @@ +[target] +title0=ShipWreckers demo +path0=F:\Games\ShipWreckers demo\SW.EXE +startfolder0= +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +monitorid0=-1 +coord0=0 +flag0=673185826 +flagg0=1207959552 +flagh0=20 +flagi0=138412036 +flagj0=4224 +flagk0=65536 +flagl0=1048576 +flagm0=0 +tflag0=0 +dflag0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=0 +swapeffect0=0 +maxddinterface0=7 +slowratio0=2 +scanline0=0 +initresw0=800 +initresh0=600 diff --git a/build/exports/SuperBike 2000.dxw b/build/exports/SuperBike 2000.dxw new file mode 100644 index 0000000..53a7064 --- /dev/null +++ b/build/exports/SuperBike 2000.dxw @@ -0,0 +1,36 @@ +[target] +title0=SuperBike 2000 +path0=F:\Games\SBK2000\SBK2000.exe +startfolder0= +launchpath0= +module0= +opengllib0= +notes0=N.b.\nCD rom in\nHKEY_LOCAL_MACHINE/SOFTWARE/EA SPORTS/Superbike 2000/CD\nor \nHKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/EA SPORTS/Superbike 2000/CD +registry0= +ver0=0 +monitorid0=-1 +coord0=0 +flag0=673202210 +flagg0=1207959552 +flagh0=20 +flagi0=138412036 +flagj0=4224 +flagk0=65536 +flagl0=524288 +flagm0=1312 +tflag0=0 +dflag0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=0 +swapeffect0=0 +maxddinterface0=7 +slowratio0=2 +scanline0=0 +initresw0=800 +initresh0=600 diff --git a/build/exports/V-Rally 3.dxw b/build/exports/V-Rally 3.dxw new file mode 100644 index 0000000..cbeb0e7 --- /dev/null +++ b/build/exports/V-Rally 3.dxw @@ -0,0 +1,36 @@ +[target] +title0=V-Rally 3 +path0=F:\Games\V-Rally 3\Vrally3.exe +startfolder0= +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +monitorid0=-1 +coord0=0 +flag0=673185826 +flagg0=1207959552 +flagh0=65556 +flagi0=138412036 +flagj0=4224 +flagk0=65536 +flagl0=0 +flagm0=0 +tflag0=0 +dflag0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=0 +swapeffect0=0 +maxddinterface0=7 +slowratio0=2 +scanline0=0 +initresw0=800 +initresh0=600 diff --git a/build/exports/Warcraft Adventures - Lord Of The Clans.dxw b/build/exports/Warcraft Adventures - Lord Of The Clans.dxw new file mode 100644 index 0000000..afd3c47 --- /dev/null +++ b/build/exports/Warcraft Adventures - Lord Of The Clans.dxw @@ -0,0 +1,36 @@ +[target] +title0=Warcraft Adventures - Lord Of The Clans +path0=F:\Games\Warcraft Adventures - Lord Of The Clans\PlayWin.exe +startfolder0= +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +monitorid0=-1 +coord0=0 +flag0=673185826 +flagg0=1207959552 +flagh0=20 +flagi0=134217732 +flagj0=4224 +flagk0=65536 +flagl0=0 +flagm0=0 +tflag0=0 +dflag0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=0 +swapeffect0=0 +maxddinterface0=7 +slowratio0=2 +scanline0=0 +initresw0=800 +initresh0=600 diff --git a/build/exports/Warhammer - Shadow of the Horned Rat.dxw b/build/exports/Warhammer - Shadow of the Horned Rat.dxw index 4e1fc47..8fe3f72 100644 --- a/build/exports/Warhammer - Shadow of the Horned Rat.dxw +++ b/build/exports/Warhammer - Shadow of the Horned Rat.dxw @@ -1,6 +1,6 @@ [target] title0=Warhammer - Shadow of the Horned Rat -path0=D:\Games\Warhammer - Shadow of the Horned Rat\WHSHR.EXE +path0=F:\Games\Warhammer - Shadow of the Horned Rat\WHSHR.EXE startfolder0= launchpath0= module0=GAMEF.DLL diff --git a/build/exports/Wrestling MPire Remix.dxw b/build/exports/Wrestling MPire Remix.dxw new file mode 100644 index 0000000..d055926 --- /dev/null +++ b/build/exports/Wrestling MPire Remix.dxw @@ -0,0 +1,36 @@ +[target] +title0=Wrestling MPire Remix +path0=F:\Games\Wrestling MPire Remix (Career)\Wrestling MPire Remix (Fullscreen).exe +startfolder0= +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +monitorid0=-1 +coord0=0 +flag0=673185826 +flagg0=1207959552 +flagh0=65556 +flagi0=138412036 +flagj0=4224 +flagk0=65536 +flagl0=268435456 +flagm0=0 +tflag0=0 +dflag0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=0 +swapeffect0=0 +maxddinterface0=7 +slowratio0=2 +scanline0=0 +initresw0=800 +initresh0=600 diff --git a/build/exports/dxwnd.ini b/build/exports/dxwnd.ini index f08cfa6..bec78ce 100644 --- a/build/exports/dxwnd.ini +++ b/build/exports/dxwnd.ini @@ -1,5 +1,41 @@ [window] -posx=1235 -posy=551 +posx=1165 +posy=618 sizx=320 sizy=200 +[target] +title0=administrator +path0=administrator +startfolder0= +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +monitorid0=-1 +coord0=0 +flag0=673185826 +flagg0=1207959552 +flagh0=20 +flagi0=134217732 +flagj0=4224 +flagk0=65536 +flagl0=0 +flagm0=0 +tflag0=0 +dflag0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=0 +swapeffect0=0 +maxddinterface0=7 +slowratio0=2 +scanline0=0 +initresw0=800 +initresh0=600 diff --git a/build/exports/dxwnd.log b/build/exports/dxwnd.log index b9701b9..0f66b21 100644 --- a/build/exports/dxwnd.log +++ b/build/exports/dxwnd.log @@ -1,228 +1,2 @@ -OnRun idx=6 prog="F:\RhemE\RhemE\RHEM.noshim.exe" unhooked=0 -setwindowshook mode -OnRun idx=6 prog="F:\RhemE\RhemE\RHEM.noshim.exe" unhooked=0 -setwindowshook mode -OnRun idx=6 prog="F:\RhemE\RhemE\RHEM.noshim.exe" unhooked=0 -setwindowshook mode -OnRun idx=6 prog="F:\RhemE\RhemE\RHEM.noshim.exe" unhooked=0 -setwindowshook mode -OnRun idx=6 prog="F:\RhemE\RhemE\RHEM.noshim.exe" unhooked=0 -setwindowshook mode -OnRun idx=6 prog="F:\RhemE\RhemE\RHEM.noshim.exe" unhooked=0 -setwindowshook mode -OnRun idx=7 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=7 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -injectsuspended mode -InjectSuspended: exe="F:\RhemE\RhemE\RHEM1(scalable).exe.noshim" dir="F:\RhemE\RhemE" -Target handle=67c -NT Header offset=E8 -AddressOfEntryPoint=3D84 ImageBase=20000000 -Thread start address=20003d84 -wait cycle 0 eip=20003d84 -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -injectsuspended mode -InjectSuspended: exe="F:\RhemE\RhemE\RHEM1(scalable).exe.noshim" dir="F:\RhemE\RhemE" -Target handle=908 -NT Header offset=E8 -AddressOfEntryPoint=3D84 ImageBase=20000000 -Thread start address=20003d84 -wait cycle 0 eip=20003d84 -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -debugger mode -create process: path="F:\RhemE\RhemE" -create process: base=0x20000000 path="F:\RhemE\RhemE\RHEM1(scalable).exe" -create thread: th=0xA18 base=0x2F1000 start=0x76C68500 -load dll: base=0x77BD0000 path="C:\Windows\SysWOW64\ntdll.dll" -unload dll: base=0x540000 -load dll: base=0x76C40000 path="C:\Windows\SysWOW64\kernel32.dll" -unload dll: base=0x76C40000 -unload dll: base=0x540000 -unload dll: base=0x6A0000 -load dll: base=0x76C40000 path="C:\Windows\SysWOW64\kernel32.dll" -load dll: base=0x74830000 path="C:\Windows\SysWOW64\KernelBase.dll" -load dll: base=0x6E490000 path="C:\Windows\SysWOW64\apphelp.dll" -load dll: base=0x78E50000 path="C:\Windows\AppPatch\AcLayers.dll" -load dll: base=0x773E0000 path="C:\Windows\SysWOW64\msvcrt.dll" -load dll: base=0x74C00000 path="C:\Windows\SysWOW64\user32.dll" -load dll: base=0x774A0000 path="C:\Windows\SysWOW64\win32u.dll" -load dll: base=0x75600000 path="C:\Windows\SysWOW64\gdi32.dll" -load dll: base=0x75450000 path="C:\Windows\SysWOW64\gdi32full.dll" -load dll: base=0x75850000 path="C:\Windows\SysWOW64\shell32.dll" -load dll: base=0x75800000 path="C:\Windows\SysWOW64\cfgmgr32.dll" -load dll: base=0x76DD0000 path="C:\Windows\SysWOW64\windows.storage.dll" -load dll: base=0x749E0000 path="C:\Windows\SysWOW64\combase.dll" -load dll: base=0x75630000 path="C:\Windows\SysWOW64\ucrtbase.dll" -load dll: base=0x75300000 path="C:\Windows\SysWOW64\rpcrt4.dll" -load dll: base=0x74690000 path="C:\Windows\SysWOW64\sspicli.dll" -load dll: base=0x74680000 path="C:\Windows\SysWOW64\cryptbase.dll" -load dll: base=0x76D70000 path="C:\Windows\SysWOW64\bcryptprimitives.dll" -load dll: base=0x77980000 path="C:\Windows\SysWOW64\sechost.dll" -load dll: base=0x777F0000 path="C:\Windows\SysWOW64\powrprof.dll" -load dll: base=0x779D0000 path="C:\Windows\SysWOW64\advapi32.dll" -load dll: base=0x76D20000 path="C:\Windows\SysWOW64\shlwapi.dll" -load dll: base=0x77BC0000 path="C:\Windows\SysWOW64\kernel.appcore.dll" -load dll: base=0x776F0000 path="C:\Windows\SysWOW64\SHCore.dll" -load dll: base=0x773A0000 path="C:\Windows\SysWOW64\profapi.dll" -load dll: base=0x77650000 path="C:\Windows\SysWOW64\oleaut32.dll" -load dll: base=0x74D60000 path="C:\Windows\SysWOW64\msvcp_win.dll" -load dll: base=0x74E40000 path="C:\Windows\SysWOW64\setupapi.dll" -load dll: base=0x74000000 path="C:\Windows\SysWOW64\mpr.dll" -load dll: base=0x66680000 path="C:\Windows\SysWOW64\sfc.dll" -load dll: base=0x73930000 path="C:\Windows\SysWOW64\winspool.drv" -load dll: base=0x72FA0000 path="C:\Windows\SysWOW64\bcrypt.dll" -load dll: base=0x640C0000 path="C:\Windows\SysWOW64\sfc_os.dll" -output debug: len=115 unicode=0 -output debug: len=115 unicode=0 -load dll: base=0x67100000 path="C:\Windows\SysWOW64\SortServer2003Compat.dll" -load dll: base=0x773B0000 path="C:\Windows\SysWOW64\imm32.dll" -exception: code=0x80000003(Breakpoint) addr=0x77C7748C first=1 -exit thread: exitcode=0x0 -load dll: base=0x10000000 path="C:\Users\user\AppData\Local\Temp\TempFolder.aad\proj.dll" -create thread: th=0x414 base=0x2F4000 start=0x77C067C0 -create thread: th=0x670 base=0x2F7000 start=0x77C067C0 -load dll: base=0x69000000 path="C:\Users\user\AppData\Local\Temp\TempFolder.aad\iml32.dll" -load dll: base=0x774C0000 path="C:\Windows\SysWOW64\comdlg32.dll" -create thread: th=0x670 base=0x2FA000 start=0x77C067C0 -load dll: base=0x72DE0000 path="C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.14393.447_none_5507ded2cb4f7f4c\comctl32.dll" -load dll: base=0x75710000 path="C:\Windows\SysWOW64\ole32.dll" -load dll: base=0x68000000 path="C:\Users\user\AppData\Local\Temp\TempFolder.aad\dirapi.dll" -load dll: base=0x73050000 path="C:\Windows\SysWOW64\winmm.dll" -load dll: base=0x740F0000 path="C:\Windows\SysWOW64\version.dll" -load dll: base=0x72F70000 path="C:\Windows\SysWOW64\winmmbase.dll" -load dll: base=0x720000 path="C:\Windows\SysWOW64\winmmbase.dll" -load dll: base=0x2180000 path="C:\Windows\SysWOW64\winmmbase.dll" -unload dll: base=0x72F70000 -unload dll: base=0x720000 -load dll: base=0x6C670000 path="C:\Windows\SysWOW64\uxtheme.dll" -create thread: th=0x414 base=0x2FD000 start=0x78E7C3C0 -load dll: base=0x77840000 path="C:\Windows\SysWOW64\msctf.dll" -load dll: base=0x92E0000 path="D:\DxWnd.develop\v2_04_07_beta\Release\dxwnd.dll" -create thread: th=0xC88 base=0x300000 start=0x73953B70 -load dll: base=0x64080000 path="C:\Windows\SysWOW64\msvfw32.dll" -load dll: base=0x755B0000 path="C:\Windows\SysWOW64\wintrust.dll" -load dll: base=0x9400000 path="C:\Windows\SysWOW64\msasn1.dll" -load dll: base=0x746B0000 path="C:\Windows\SysWOW64\crypt32.dll" -load dll: base=0x64590000 path="C:\Windows\SysWOW64\avifil32.dll" -load dll: base=0x72FD0000 path="C:\Windows\SysWOW64\msacm32.dll" -exit thread: exitcode=0x1 -exit thread: exitcode=0x1 -exit thread: exitcode=0x1 -exit thread: exitcode=0x1 -exit thread: exitcode=0x1 -exit process -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=6 prog="F:\RhemE\RhemE\RHEM.noshim.exe" unhooked=0 -setwindowshook mode -OnRun idx=6 prog="F:\RhemE\RhemE\RHEM.noshim.exe" unhooked=0 -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -injectsuspended mode -InjectSuspended: exe="F:\RhemE\RhemE\RHEM1(scalable).exe" dir="F:\RhemE\RhemE" -Target handle=888 -NT Header offset=E8 -AddressOfEntryPoint=3D84 ImageBase=20000000 -Thread start address=20003d84 -wait cycle 0 eip=20003d84 -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -self elevation -injectsuspended mode -InjectSuspended: exe="F:\RhemE\RhemE\RHEM1(scalable).exe" dir="F:\RhemE\RhemE" -Target handle=828 -NT Header offset=E8 -AddressOfEntryPoint=3D84 ImageBase=20000000 -Thread start address=20003d84 -wait cycle 0 eip=20003d84 -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -self elevation -injectsuspended mode -InjectSuspended: exe="F:\RhemE\RhemE\RHEM1(scalable).exe" dir="F:\RhemE\RhemE" -Target handle=a04 -NT Header offset=E8 -AddressOfEntryPoint=3D84 ImageBase=20000000 -Thread start address=20003d84 -wait cycle 0 eip=20003d84 -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -self elevation -injectsuspended mode -InjectSuspended: exe="F:\RhemE\RhemE\RHEM1(scalable).exe" dir="F:\RhemE\RhemE" -Target handle=6bc -NT Header offset=E8 -AddressOfEntryPoint=3D84 ImageBase=20000000 -Thread start address=20003d84 -wait cycle 0 eip=20003d84 -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -self elevation -injectsuspended mode -InjectSuspended: exe="F:\RhemE\RhemE\RHEM1(scalable).exe" dir="F:\RhemE\RhemE" -Target handle=878 -NT Header offset=E8 -AddressOfEntryPoint=3D84 ImageBase=20000000 -Thread start address=20003d84 -wait cycle 0 eip=20003d84 -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM1(scalable).exe" unhooked=0 -self elevation -injectsuspended mode -InjectSuspended: exe="F:\RhemE\RhemE\RHEM1(scalable).exe" dir="F:\RhemE\RhemE" -Target handle=86c -NT Header offset=E8 -AddressOfEntryPoint=3D84 ImageBase=20000000 -Thread start address=20003d84 -wait cycle 0 eip=20003d84 -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM.noshim.exe" unhooked=0 -self elevation -injectsuspended mode -InjectSuspended: exe="F:\RhemE\RhemE\RHEM.noshim.exe" dir="F:\RhemE\RhemE" -Target handle=8a0 -NT Header offset=E8 -AddressOfEntryPoint=3D84 ImageBase=20000000 -Thread start address=20003d84 -wait cycle 0 eip=20003d84 -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM.noshim.exe" unhooked=0 -self elevation -injectsuspended mode -InjectSuspended: exe="F:\RhemE\RhemE\RHEM.noshim.exe" dir="F:\RhemE\RhemE" -Target handle=cb0 -NT Header offset=E8 -AddressOfEntryPoint=3D84 ImageBase=20000000 -Thread start address=20003d84 -wait cycle 0 eip=20003d84 -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM.noshim.exe" unhooked=0 -self elevation -setwindowshook mode -OnRun idx=8 prog="F:\RhemE\RhemE\RHEM.noshim.exe" unhooked=0 -self elevation +OnRun idx=28 prog="D:\Games\ManTT\MANXTT.EXE" unhooked=0 setwindowshook mode diff --git a/build/exports/dxwnd.reg b/build/exports/dxwnd.reg index d871b30..ee2d7f7 100644 --- a/build/exports/dxwnd.reg +++ b/build/exports/dxwnd.reg @@ -1,11 +1,11 @@ + [HKEY_LOCAL_MACHINE\SOFTWARE] [HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape] [HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB] -;"Options"="1,1,1,1,1,2,1,1" // digital audio on -"Options"="1,1,1,1,1,2,0,0" // digital audio off -;"Options"="0,0,0,0,0,0,0,0" //all off +;"Options"="3,1,1,2,1,1,0,0" // High Quality, digital audio off +"Options"="3,1,1,2,1,1,1,1" // High Quality, digital audio on [HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB\InstallDir] @="\{path}" diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index e637f59..4b9799f 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -1486,3 +1486,11 @@ fix: ddraw surface capability regression for emulated backbuffer: fixes "Dominan fix: ddraw surface capability regression for direct primary/backbuffer: should fix "Tomb raider 3" in HW mode fix: ddraw surface capability regression for zbuffer: fixes "Toca Touring Car" in SW mode fix: in fx1, bug crashing app when querying unknown interfaces! + +v2.04.09 +add: hook USER32 AdjustWindowRect/Ex calls: fix window position problems for "Man TT Superbike" +add: hook for USER32 GetActiveWindow() tracing. +fix: version hooking for IDIrectDraw methods called by IDIrectDrawSurface methods: fixes many crashes on ddraw games +fix: capability registration passed in IDIrectDrawSurface::QueryInterface() calls: fixes settings for ZBUFFER surfaces +fix: capsdb logging (developer's use only) +fix: handling of WM_NCCALCSIZE & WM_NCPAINT messages in winproc hooker to align behaviour to comment. To be tested ... diff --git a/dll/ddcreates.cpp b/dll/ddcreates.cpp index 3a17964..89d7fe0 100644 --- a/dll/ddcreates.cpp +++ b/dll/ddcreates.cpp @@ -352,14 +352,7 @@ static HRESULT BuildPrimaryFullscreen(LPDIRECTDRAW lpdd, CreateSurface_Type pCre if (res==DDERR_PRIMARYSURFACEALREADYEXISTS){ LPDIRECTDRAWSURFACE lpPrim; GetGDISurface_Type pGetGDISurface; - switch(dxversion){ - default: - case 1: pGetGDISurface = pGetGDISurface1; break; - case 2: pGetGDISurface = pGetGDISurface2; break; - case 3: pGetGDISurface = pGetGDISurface3; break; - case 4: pGetGDISurface = pGetGDISurface4; break; - case 7: pGetGDISurface = pGetGDISurface7; break; - } + pGetGDISurface = pGetGDISurfaceMethod(dxversion); OutTraceE("BuildPrimaryFullscreen: CreateSurface DDERR_PRIMARYSURFACEALREADYEXISTS workaround\n"); (*pGetGDISurface)(lpPrimaryDD, &lpPrim); while ((*pReleaseSMethod(dxversion))(lpPrim)); @@ -411,14 +404,7 @@ static HRESULT BuildPrimaryDir(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurf if (res==DDERR_PRIMARYSURFACEALREADYEXISTS){ LPDIRECTDRAWSURFACE lpPrim; GetGDISurface_Type pGetGDISurface; - switch(dxversion){ - default: - case 1: pGetGDISurface = pGetGDISurface1; break; - case 2: pGetGDISurface = pGetGDISurface2; break; - case 3: pGetGDISurface = pGetGDISurface3; break; - case 4: pGetGDISurface = pGetGDISurface4; break; - case 7: pGetGDISurface = pGetGDISurface7; break; - } + pGetGDISurface = pGetGDISurfaceMethod(dxversion); OutTraceE("BuildPrimaryDir: CreateSurface DDERR_PRIMARYSURFACEALREADYEXISTS workaround\n"); (*pGetGDISurface)(lpPrimaryDD, &lpPrim); while ((*pReleaseSMethod(dxversion))(lpPrim)); @@ -668,14 +654,7 @@ static HRESULT BuildBackBufferDir(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateS LPDIRECTDRAWSURFACE lpPrim; DDSURFACEDESC2 prim; GetGDISurface_Type pGetGDISurface; - switch(dxversion){ - default: - case 1: pGetGDISurface = pGetGDISurface1; break; - case 2: pGetGDISurface = pGetGDISurface2; break; - case 3: pGetGDISurface = pGetGDISurface3; break; - case 4: pGetGDISurface = pGetGDISurface4; break; - case 7: pGetGDISurface = pGetGDISurface7; break; - } + pGetGDISurface = pGetGDISurfaceMethod(dxversion); (*pGetGDISurface)(lpPrimaryDD, &lpPrim); memset(&prim, 0, sizeof(DDSURFACEDESC2)); prim.dwSize = (dxversion >= 4) ? sizeof(DDSURFACEDESC2) : sizeof(DDSURFACEDESC); @@ -1007,13 +986,20 @@ HRESULT WINAPI extCreateSurface(int dxversion, CreateSurface_Type pCreateSurface if(res) return res; lpDDSPrim = *lplpdds; dxwss.PushPrimarySurface(lpDDSPrim, dxversion); + dxwcdb.PushCaps(*lplpdds, lpddsd->ddsCaps.dwCaps); RegisterPixelFormat(dxversion, lpDDSPrim); if (BBCount){ + DWORD dwCaps; // build emulated backbuffer surface res=AttachBackBuffer(lpdd, pCreateSurface, lpddsd, dxversion, &lpDDSBack, NULL); if(res) return res; dxwss.PushBackBufferSurface(lpDDSBack, dxversion); + // here we try to guess what sort of capabilities would expose a built-in backbuffer surface + dwCaps = lpddsd->ddsCaps.dwCaps; + dwCaps &= ~DDSCAPS_PRIMARYSURFACE; + dwCaps |= (DDSCAPS_BACKBUFFER|DDSCAPS_VIDEOMEMORY); + dxwcdb.PushCaps(lpDDSBack, dwCaps); } if(IsTraceDDRAW){ diff --git a/dll/ddraw.cpp b/dll/ddraw.cpp index 1d4f4f3..9013b2f 100644 --- a/dll/ddraw.cpp +++ b/dll/ddraw.cpp @@ -956,6 +956,20 @@ SetClipper_Type pSetClipperMethod(int dxversion) return pSetClipper; } +Blt_Type pGetBltMethod(int dxversion) +{ + Blt_Type pBlt; + switch(dxversion){ + case 1: pBlt=pBlt1; break; + case 2: pBlt=pBlt2; break; + case 3: pBlt=pBlt3; break; + case 4: pBlt=pBlt4; break; + case 7: pBlt=pBlt7; break; + } + CHECKPTR(pBlt, "Blt"); + return pBlt; +} + Blt_Type pBltMethod() { Blt_Type pBlt; @@ -2307,7 +2321,7 @@ void FixSurfaceCaps(LPDDSURFACEDESC2 lpddsd, int dxversion) if((lpddsd->dwFlags & DDSD_CAPS) && (lpddsd->ddsCaps.dwCaps & DDSCAPS_ZBUFFER)) { // z-buffer surface - set to memory lpddsd->ddsCaps.dwCaps = DDSCAPS_ZBUFFER; - if(dxw.dwFlags8 & ALLOWSYSMEMON3DDEV) lpddsd->ddsCaps.dwCaps = DDSCAPS_SYSTEMMEMORY|DDSCAPS_ZBUFFER; + if (dxw.dwFlags8 & ALLOWSYSMEMON3DDEV) lpddsd->ddsCaps.dwCaps = DDSCAPS_SYSTEMMEMORY|DDSCAPS_ZBUFFER; return; } @@ -2456,6 +2470,29 @@ HRESULT WINAPI extGetAttachedSurface(int dxversion, GetAttachedSurface_Type pGet } else { OutTraceDDRAW("GetAttachedSurface(%d): attached=%x\n", dxversion, *lplpddas); + + if(lpddsc->dwCaps & DDSCAPS_ZBUFFER){ + char *sMode; + // Martian Gothic and others: if the ZBUFFER is unknown, then you must register virtual capabilities + // compatible with those of the original surface! + DWORD dwCaps; + lpDDZBuffer = *lplpddas; + dwCaps = dxwcdb.GetCaps(*lplpddas); + if(!dwCaps){ + dwCaps = dxwcdb.GetCaps(lpdds); + if(dwCaps){ + dwCaps &= ~(DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_BACKBUFFER|DDSCAPS_3DDEVICE|DDSCAPS_COMPLEX); + dwCaps |= DDSCAPS_ZBUFFER; + //if(dwCaps & DDSCAPS_VIDEOMEMORY) dwCaps|=DDSCAPS_LOCALVIDMEM; + dxwcdb.PushCaps(*lplpddas, dwCaps); + sMode = "derived"; + } + else sMode = "unknown"; + } + else sMode = "known"; + OutTraceDW("GetAttachedSurface(%d): ZBUFFER caps=%x(%s) (%s)\n", dxversion, dwCaps, ExplainDDSCaps(dwCaps), sMode); + } + } return res; @@ -2860,13 +2897,7 @@ HRESULT WINAPI ColorConversionEmulated(int dxversion, LPDIRECTDRAWSURFACE lpdds, HRESULT res; Blt_Type pBlt; RECT srcrect, destrect; - switch(dxversion){ - case 1: pBlt=pBlt1; break; - case 2: pBlt=pBlt2; break; - case 3: pBlt=pBlt3; break; - case 4: pBlt=pBlt4; break; - case 7: pBlt=pBlt7; break; - } + pBlt = pGetBltMethod(dxversion); // v2.04.01.fx6: copy emurect since pEmuBlt will alter values! srcrect=destrect=emurect; res=(*pEmuBlt)(dxversion, pBlt, lpDDSEmu_Back, &destrect, lpdds, &srcrect, DDBLT_WAIT, 0); @@ -2944,13 +2975,7 @@ HRESULT WINAPI extFlip(int dxversion, Flip_Type pFlip, LPDIRECTDRAWSURFACE lpdds lpdds, IsPrim?"(PRIM)":"", lpddssrc, dwflags, ExplainFlipFlags(dwflags)); Blt_Type pBlt; - switch (dxversion){ - case 1: pBlt = pBlt1; break; - case 2: pBlt = pBlt2; break; - case 3: pBlt = pBlt3; break; - case 4: pBlt = pBlt4; break; - case 7: pBlt = pBlt7; break; - } + pBlt = pGetBltMethod(dxversion); if (!IsPrim){ if(lpddssrc){ @@ -3028,7 +3053,8 @@ HRESULT WINAPI extFlip(int dxversion, Flip_Type pFlip, LPDIRECTDRAWSURFACE lpdds ddsd.dwHeight = dxw.GetScreenHeight(); ddsd.dwWidth = dxw.GetScreenWidth(); } - res2=(*pCreateSurfaceMethod(dxversion))(lpPrimaryDD, &ddsd, &lpddsTmp, NULL); + // v2.04.09 fix: dxversion replaced with iBakBufferVersion - fixes "Gruntz" crash + res2=(*pCreateSurfaceMethod(iBakBufferVersion))(lpPrimaryDD, &ddsd, &lpddsTmp, NULL); if(res2) { OutTraceE("CreateSurface: ERROR %x(%s) at %d\n", res2, ExplainDDError(res2), __LINE__); OutTraceE("Size=%d lpPrimaryDD=%x lpDDSBack=%x %s\n", @@ -3589,13 +3615,9 @@ static HRESULT WINAPI extLockDir(int dxversion, Lock_Type pLock, LPDIRECTDRAWSUR PushLockedRect(lpdds, lprect); - switch(dxversion){ - case 1: pBlt=pBlt1; pGetGDISurface=pGetGDISurface1; break; - case 2: pBlt=pBlt2; pGetGDISurface=pGetGDISurface2; break; - case 3: pBlt=pBlt3; pGetGDISurface=pGetGDISurface3; break; - case 4: pBlt=pBlt4; pGetGDISurface=pGetGDISurface4; break; - case 7: pBlt=pBlt7; pGetGDISurface=pGetGDISurface7; break; - } + // v2.04.09: for IDirectDraw methods use iBakBufferVersion instead of dxversion ... + pBlt = pGetBltMethod(dxversion); + pGetGDISurface = pGetGDISurfaceMethod(iBakBufferVersion); // V2.02.43: Empire Earth does some test Lock operations apparently before the primary surface is created if(lpPrimaryDD){ @@ -3718,13 +3740,7 @@ static HRESULT WINAPI extUnlock(int dxversion, Unlock4_Type pUnlock, LPDIRECTDRA OutTrace("Unlock(%d): lpdds=%x%s %s\n", dxversion, lpdds, (IsPrim ? "(PRIM)": (IsBack ? "(BACK)" : "")), sRect); } - switch(dxversion){ - case 1: pBlt=pBlt1; break; - case 2: pBlt=pBlt2; break; - case 3: pBlt=pBlt3; break; - case 4: pBlt=pBlt4; break; - case 7: pBlt=pBlt7; break; - } + pBlt = pGetBltMethod(dxversion); switch(dxversion){ case 4: @@ -3861,14 +3877,9 @@ static HRESULT WINAPI extUnlockDir(int dxversion, Unlock4_Type pUnlock, LPDIRECT OutTrace("Unlock(%d): lpdds=%x%s %s\n", dxversion, lpdds, (IsPrim ? "(PRIM)": (IsBack ? "(BACK)" : "")), sRect); } - switch(dxversion){ - default: - case 1: pGetGDISurface = pGetGDISurface1; pBlt = pBlt1; break; - case 2: pGetGDISurface = pGetGDISurface2; pBlt = pBlt2; break; - case 3: pGetGDISurface = pGetGDISurface3; pBlt = pBlt3; break; - case 4: pGetGDISurface = pGetGDISurface4; pBlt = pBlt4; break; - case 7: pGetGDISurface = pGetGDISurface7; pBlt = pBlt7; break; - } + // v2.04.09: for IDirectDraw methods use iBakBufferVersion instead of dxversion ... + pBlt = pGetBltMethod(dxversion); + pGetGDISurface = pGetGDISurfaceMethod(iBakBufferVersion); if(dxw.dwFlags1 & LOCKEDSURFACE){ (*pGetGDISurface)(lpPrimaryDD, &lpDDSPrim); @@ -3986,14 +3997,9 @@ HRESULT WINAPI extReleaseDC(int dxversion, ReleaseDC_Type pReleaseDC, LPDIRECTDR if((IsPrim) && (dxw.dwFlags1 & EMULATESURFACE)) {\ Blt_Type pBlt; GetGDISurface_Type pGetGDISurface; - switch(dxversion){ - default: - case 1: pGetGDISurface = pGetGDISurface1; pBlt = pBlt1; break; - case 2: pGetGDISurface = pGetGDISurface2; pBlt = pBlt2; break; - case 3: pGetGDISurface = pGetGDISurface3; pBlt = pBlt3; break; - case 4: pGetGDISurface = pGetGDISurface4; pBlt = pBlt4; break; - case 7: pGetGDISurface = pGetGDISurface7; pBlt = pBlt7; break; - } + // v2.04.09: for IDirectDraw methods use iBakBufferVersion instead of dxversion ... + pBlt = pGetBltMethod(dxversion); + pGetGDISurface = pGetGDISurfaceMethod(iBakBufferVersion); sBlt(dxversion, pBlt, "ReleaseDC", lpdds, NULL, lpdds, NULL, 0, NULL, FALSE); } if (res) OutTraceE("ReleaseDC: ERROR res=%x(%s)\n", res, ExplainDDError(res)); diff --git a/dll/dxmapping.cpp b/dll/dxmapping.cpp index 815edec..b1ebaa0 100644 --- a/dll/dxmapping.cpp +++ b/dll/dxmapping.cpp @@ -421,6 +421,7 @@ void dxwCore::CalculateWindowPos(HWND hwnd, DWORD width, DWORD height, LPWINDOWP break; case DXW_SET_COORDINATES: default: + // set size if(bAutoScale){ MaxX = GetScreenWidth(); MaxY = GetScreenHeight(); @@ -443,6 +444,11 @@ void dxwCore::CalculateWindowPos(HWND hwnd, DWORD width, DWORD height, LPWINDOWP MaxY = height; if(dxw.dwFlags4 & BILINEAR2XFILTER) MaxY <<= 1; // double } + // set pos + if(dxw.dwFlags7 & ANCHORED){ + iPosX = iPos0X; + iPosY = iPos0Y; + } rect.left = iPosX; rect.top = iPosY; //v2.02.09 rect.right = iPosX + MaxX; @@ -459,7 +465,7 @@ void dxwCore::CalculateWindowPos(HWND hwnd, DWORD width, DWORD height, LPWINDOWP dwExStyle=(*pGetWindowLong)(hwnd, GWL_EXSTYLE); // BEWARE: from MSDN - If the window is a child window, the return value is undefined. hMenu = (dwStyle & WS_CHILD) ? NULL : GetMenu(hwnd); - AdjustWindowRectEx(&rect, dwStyle, (hMenu!=NULL), dwExStyle); + (*pAdjustWindowRectEx)(&rect, dwStyle, (hMenu!=NULL), dwExStyle); // if (hMenu) __try {CloseHandle(hMenu);} __except(EXCEPTION_EXECUTE_HANDLER){}; switch(dxw.Coordinates){ case DXW_DESKTOP_WORKAREA: diff --git a/dll/dxwcapsdb.cpp b/dll/dxwcapsdb.cpp index 1c01513..7c57754 100644 --- a/dll/dxwcapsdb.cpp +++ b/dll/dxwcapsdb.cpp @@ -8,8 +8,12 @@ #include "dxwnd.h" #include "dxwcore.hpp" -//#define DXW_SURFACE_STACK_TRACING -//#define OutTraceSDB OutTrace +#if 0 +// uncomment (#if 1) to activate caps db tracing +#define DXW_SURFACE_STACK_TRACING +#define OutTraceSDB OutTrace +#include "dxhelper.h" +#endif dxwCapsDB::dxwCapsDB() { @@ -25,7 +29,7 @@ void dxwCapsDB::PushCaps(LPDIRECTDRAWSURFACE ps, DWORD dwCaps) int i; CapsDB_Type *e; #ifdef DXW_SURFACE_STACK_TRACING - OutTraceSDB(">>> CAPSDB MARK: lpdds=%x%s caps=%x(%s)\n", ps, dwCaps, ExplainDDCaps(dwCaps)); + OutTraceSDB(">>> CAPSDB MARK: lpdds=%x caps=%x(%s)\n", ps, dwCaps, ExplainDDSCaps(dwCaps)); #endif for (i=0;i>> CAPSDB GETCAPS: i=%d lpdds=%x caps=%x(%s)\n", - i, ps, CapsDB[i].dwCaps, ExplainDDCaps(CapsDB[i].dwCaps)); + i, ps, CapsDB[i].dwCaps, ExplainDDSCaps(CapsDB[i].dwCaps)); #endif return CapsDB[i].dwCaps; } diff --git a/dll/dxwcore.cpp b/dll/dxwcore.cpp index d57a22a..fb4c6c0 100644 --- a/dll/dxwcore.cpp +++ b/dll/dxwcore.cpp @@ -131,8 +131,8 @@ void dxwCore::InitTarget(TARGETMAP *target) } iSiz0X = iSizX = target->sizx; iSiz0Y = iSizY = target->sizy; - iPosX = target->posx; - iPosY = target->posy; + iPos0X = iPosX = target->posx; + iPos0Y = iPosY = target->posy; iMaxW = target->resw; iMaxH = target->resh; // Aspect Ratio from window size, or traditional 4:3 by default @@ -1161,6 +1161,7 @@ DWORD dxwCore::FixWinExStyle(DWORD dwExStyle) dwExStyle = 0; break; } + return dwExStyle; } diff --git a/dll/dxwcore.hpp b/dll/dxwcore.hpp index 113d4f3..95e7f4b 100644 --- a/dll/dxwcore.hpp +++ b/dll/dxwcore.hpp @@ -187,6 +187,8 @@ public: // simple data variables long iPosY; long iSizX; long iSizY; + long iPos0X; + long iPos0Y; long iSiz0X; long iSiz0Y; long iMaxW; diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp index b3bc16c..932100f 100644 --- a/dll/dxwnd.cpp +++ b/dll/dxwnd.cpp @@ -27,7 +27,7 @@ along with this program. If not, see . #include "TlHelp32.h" -#define VERSION "2.04.08.fx1" +#define VERSION "2.04.09.fx1" #define DDTHREADLOCK 1 diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index 19c5e0302e3e0381a94e4c843321b7f000a02cfe..fee1db86b9720569fdbac6ca606f13c89f51741e 100644 GIT binary patch delta 18489 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 Zy1#$M(@p#RQy%O%IOBQNtVs37{tprKPS*ec delta 2917 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 Xn*)Mta7lWt9-{`?l_yBO-iZGV_!*ht diff --git a/dll/queryint.cpp b/dll/queryint.cpp index 541b2ab..67d666d 100644 --- a/dll/queryint.cpp +++ b/dll/queryint.cpp @@ -41,6 +41,7 @@ HRESULT WINAPI extQueryInterfaceDX(int dxversion, QueryInterface_Type pQueryInte BOOL IsBack; int iObjectType; int iObjectVersion; + DWORD dwCaps; extern LPDIRECTDRAWSURFACE lpDDSEmu_Prim; IsPrim=dxwss.IsAPrimarySurface((LPDIRECTDRAWSURFACE)lpdds); @@ -177,10 +178,9 @@ HRESULT WINAPI extQueryInterfaceDX(int dxversion, QueryInterface_Type pQueryInte } // added trace - OutTraceDW("QueryInterface: lpdds=%x%s REFIID=%x obp=%x obj=%s version=%d ret=0\n", - lpdds, IsPrim?"(PRIM)":"", riid.Data1, *obp, sLabel, iObjectVersion); + OutTraceDW("QueryInterface: lpdds=%x REFIID=%x obp=%x obj=%s version=%d ret=0\n", + lpdds, riid.Data1, *obp, sLabel, iObjectVersion); -// --------- here ..... switch(iObjectType){ // simulate unavailable interfaces (useful?) case TYPE_OBJECT_DIRECTDRAW: @@ -195,15 +195,18 @@ HRESULT WINAPI extQueryInterfaceDX(int dxversion, QueryInterface_Type pQueryInte } else{ if(IsBack) dxwss.PushBackBufferSurface((LPDIRECTDRAWSURFACE)*obp, iObjectVersion); - else dxwss.PopSurface((LPDIRECTDRAWSURFACE)*obp); + else dxwss.PopSurface((LPDIRECTDRAWSURFACE)*obp); // no primary, no backbuffer, then pop. // v2.02.13: seems that hooking inconditionally gives troubles. What is the proper safe hook condition? HookDDSurface((LPDIRECTDRAWSURFACE *)obp, dxw.dwDDVersion, FALSE); } - DWORD dwCaps; - if (dwCaps = dxwcdb.GetCaps((LPDIRECTDRAWSURFACE)lpdds)) { - OutTrace("QueryInterface(S): PASS caps=%x lpdds=%x->%x\n", dwCaps, lpdds, *obp); - dxwcdb.PushCaps(*(LPDIRECTDRAWSURFACE *)obp,dwCaps); + dwCaps = dxwcdb.GetCaps((LPDIRECTDRAWSURFACE)lpdds); + if (dwCaps) { + OutTraceDW("QueryInterface(S): PASS lpdds=%x->%x caps=%x(%s)\n", lpdds, *obp, dwCaps, ExplainDDSCaps(dwCaps)); + dxwcdb.PushCaps(*(LPDIRECTDRAWSURFACE *)obp, dwCaps); } + else { + OutTraceDW("QueryInterface(S): NO CAPS\n"); + } break; case TYPE_OBJECT_DIRECT3D: HookDirect3DSession((LPDIRECTDRAW *)obp, iObjectVersion); diff --git a/dll/syslibs.h b/dll/syslibs.h index 95f0ca4..29aeb4c 100644 --- a/dll/syslibs.h +++ b/dll/syslibs.h @@ -299,6 +299,8 @@ typedef HBITMAP (WINAPI *LoadBitmapA_Type)(HINSTANCE, LPCSTR); typedef BOOL (WINAPI *EnumWindows_Type)(WNDENUMPROC, LPARAM); typedef BOOL (WINAPI *GetMessage_Type)(LPMSG, HWND, UINT, UINT); typedef BOOL (WINAPI *PostMessage_Type)(HWND, UINT, WPARAM, LPARAM); +typedef BOOL (WINAPI *AdjustWindowRect_Type)(LPRECT, DWORD, BOOL); +typedef BOOL (WINAPI *AdjustWindowRectEx_Type)(LPRECT, DWORD, BOOL, DWORD); // Winmm.dll: typedef MCIERROR(WINAPI *mciSendCommand_Type)(MCIDEVICEID, UINT, DWORD_PTR, DWORD_PTR); @@ -620,6 +622,8 @@ DXWEXTERN LoadBitmapA_Type pLoadBitmapA DXWINITIALIZED; DXWEXTERN EnumWindows_Type pEnumWindows DXWINITIALIZED; DXWEXTERN GetMessage_Type pGetMessageA, pGetMessageW DXWINITIALIZED; DXWEXTERN PostMessage_Type pPostMessageA, pPostMessageW DXWINITIALIZED; +DXWEXTERN AdjustWindowRect_Type pAdjustWindowRect DXWINITIALIZED; +DXWEXTERN AdjustWindowRectEx_Type pAdjustWindowRectEx DXWINITIALIZED; // Winmm.dll: DXWEXTERN mciSendCommand_Type pmciSendCommandA DXWINITIALIZED; @@ -930,6 +934,8 @@ extern BOOL WINAPI extGetMessageA(LPMSG, HWND, UINT, UINT); extern BOOL WINAPI extGetMessageW(LPMSG, HWND, UINT, UINT); extern BOOL WINAPI extPostMessageA(HWND, UINT, WPARAM, LPARAM); extern BOOL WINAPI extPostMessageW(HWND, UINT, WPARAM, LPARAM); +extern BOOL WINAPI extAdjustWindowRect(LPRECT, DWORD, BOOL); +extern BOOL WINAPI extAdjustWindowRectEx(LPRECT, DWORD, BOOL, DWORD); // Winmm.dll: extern MCIERROR WINAPI extmciSendCommandA(MCIDEVICEID, UINT, DWORD_PTR, DWORD_PTR); diff --git a/dll/user32.cpp b/dll/user32.cpp index a9e4ddf..cd678da 100644 --- a/dll/user32.cpp +++ b/dll/user32.cpp @@ -85,7 +85,6 @@ static HookEntryEx_Type Hooks[]={ #ifdef GALAPAGOSTEST // test for Galapagos - {HOOK_HOT_CANDIDATE, 0, "GetActiveWindow", (FARPROC)NULL, (FARPROC *)&pGetActiveWindow, (FARPROC)extGetActiveWindow}, {HOOK_HOT_CANDIDATE, 0, "GetForegroundWindow", (FARPROC)GetForegroundWindow, (FARPROC *)&pGetForegroundWindow, (FARPROC)extGetForegroundWindow}, {HOOK_HOT_CANDIDATE, 0, "GetFocus", (FARPROC)GetFocus, (FARPROC *)&pGetFocus, (FARPROC)extGetFocus}, {HOOK_HOT_CANDIDATE, 0, "SetFocus", (FARPROC)SetFocus, (FARPROC *)&pSetFocus, (FARPROC)extSetFocus}, @@ -138,6 +137,9 @@ static HookEntryEx_Type Hooks[]={ //{HOOK_IAT_CANDIDATE, 0, "LoadBitmapA", (FARPROC)NULL, (FARPROC *)&pLoadBitmapA, (FARPROC)extLoadBitmapA}, {HOOK_IAT_CANDIDATE, 0, "EnumWindows", (FARPROC)NULL, (FARPROC *)&pEnumWindows, (FARPROC)extEnumWindows}, + {HOOK_IAT_CANDIDATE, 0, "AdjustWindowRect", (FARPROC)NULL, (FARPROC *)&pAdjustWindowRect, (FARPROC)extAdjustWindowRect}, + {HOOK_IAT_CANDIDATE, 0, "AdjustWindowRectEx", (FARPROC)AdjustWindowRectEx, (FARPROC *)&pAdjustWindowRectEx, (FARPROC)extAdjustWindowRectEx}, + {HOOK_HOT_CANDIDATE, 0, "GetActiveWindow", (FARPROC)NULL, (FARPROC *)&pGetActiveWindow, (FARPROC)extGetActiveWindow}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; @@ -476,7 +478,7 @@ void dxwFixWindowPos(char *ApiName, HWND hwnd, LPARAM lParam) dwStyle=(*pGetWindowLong)(hwnd, GWL_STYLE); dwExStyle=(*pGetWindowLong)(hwnd, GWL_EXSTYLE); hMenu = (dwStyle & WS_CHILD) ? NULL : GetMenu(hwnd); - AdjustWindowRectEx(&full, dwStyle, (hMenu!=NULL), dwExStyle); + (*pAdjustWindowRectEx)(&full, dwStyle, (hMenu!=NULL), dwExStyle); if (hMenu && (hMenu != (HMENU)-1)) __try {CloseHandle(hMenu);} __except(EXCEPTION_EXECUTE_HANDLER){}; BorderX= full.right - full.left - client.right; BorderY= full.bottom - full.top - client.bottom; @@ -516,7 +518,7 @@ void dxwFixWindowPos(char *ApiName, HWND hwnd, LPARAM lParam) dwStyle=(*pGetWindowLong)(hwnd, GWL_STYLE); dwExStyle=(*pGetWindowLong)(hwnd, GWL_EXSTYLE); hMenu = (dwStyle & WS_CHILD) ? NULL : GetMenu(hwnd); - AdjustWindowRectEx(&wrect, dwStyle, (hMenu!=NULL), dwExStyle); + (*pAdjustWindowRectEx)(&wrect, dwStyle, (hMenu!=NULL), dwExStyle); minx = wrect.right - wrect.left; miny = wrect.bottom - wrect.top; if(wp->cx < minx) wp->cx = minx; @@ -940,7 +942,7 @@ BOOL WINAPI extSetWindowPos(HWND hwnd, HWND hWndInsertAfter, int X, int Y, int c dwExStyle=(*pGetWindowLong)(hwnd, GWL_EXSTYLE); // BEWARE: from MSDN - If the window is a child window, the return value is undefined. hMenu = (dwCurStyle & WS_CHILD) ? NULL : GetMenu(hwnd); - AdjustWindowRectEx(&rect, dwCurStyle, (hMenu!=NULL), dwExStyle); + (*pAdjustWindowRectEx)(&rect, dwCurStyle, (hMenu!=NULL), dwExStyle); if (hMenu && (hMenu != (HMENU)-1)) __try {CloseHandle(hMenu);} __except(EXCEPTION_EXECUTE_HANDLER){}; cx=rect.right; cy=rect.bottom; OutTraceDW("SetWindowPos: main form hwnd=%x fixed size=(%d,%d)\n", hwnd, cx, cy); @@ -3084,7 +3086,7 @@ BOOL WINAPI extUpdateWindow(HWND hwnd) } ret=(*pUpdateWindow)(hwnd); - if(!ret) OutTraceE("UpdateWindow: ERROR er=%d\n", GetLastError()); + if(!ret) OutTraceE("UpdateWindow: ERROR err=%d\n", GetLastError()); return ret; } @@ -3203,7 +3205,8 @@ HWND WINAPI extGetActiveWindow(void) { HWND ret; ret=(*pGetActiveWindow)(); - if(dxw.Windowize && dxw.IsFullScreen()) { + OutTraceDW("GetActiveWindow: ret=%x\n", ret); + if((dxw.dwFlags8 & WININSULATION) && dxw.Windowize && dxw.IsFullScreen()) { OutTraceDW("GetActiveWindow: ret=%x->%x\n", ret, dxw.GethWnd()); return dxw.GethWnd(); } @@ -4072,7 +4075,7 @@ INT_PTR WINAPI extDialogBoxIndirectParamA(HINSTANCE hInstance, LPCDLGTEMPLATE hD { //INT_PTR ret; // MessageBox(0, "DialogBoxIndirectParamA", "step", 0); - OutTrace("DialogBoxIndirectParamA: hInstance=%x pos=(%d,%d) size=(%dx%d) hWndParent=%x, lpDialogFunc=%x dwInitParam=%x\n", + OutTraceDW("DialogBoxIndirectParamA: hInstance=%x pos=(%d,%d) size=(%dx%d) hWndParent=%x, lpDialogFunc=%x dwInitParam=%x\n", hInstance, hDialogTemplate->x, hDialogTemplate->y, hDialogTemplate->cx, hDialogTemplate->cy, hWndParent, lpDialogFunc, dwInitParam); return (*pDialogBoxIndirectParamA)(hInstance, hDialogTemplate, hWndParent, lpDialogFunc, dwInitParam); } @@ -4080,27 +4083,91 @@ INT_PTR WINAPI extDialogBoxIndirectParamA(HINSTANCE hInstance, LPCDLGTEMPLATE hD HBITMAP WINAPI extLoadBitmapA(HINSTANCE hInstance, LPCSTR lpBitmapName) { HBITMAP ret; - OutTrace("LoadBitmapA: hinst=%x name=%s\n", hInstance, lpBitmapName); + OutTraceDW("LoadBitmapA: hinst=%x name=%s\n", hInstance, lpBitmapName); ret = (*pLoadBitmapA)(hInstance, lpBitmapName); if(ret){ - OutTrace("LoadBitmapA: hbitmap=%x\n", ret); + OutTraceDW("LoadBitmapA: hbitmap=%x\n", ret); } else{ - OutTrace("LoadBitmapA: ERROR err=%d\n", GetLastError()); + OutTraceE("LoadBitmapA: ERROR err=%d\n", GetLastError()); } return ret; } BOOL WINAPI extEnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam) { - OutTrace("EnumerateWindows\n"); + OutTraceDW("EnumerateWindows\n"); if(dxw.dwFlags8 & WININSULATION){ - OutTrace("EnumerateWindows: BYPASS\n"); + OutTraceDW("EnumerateWindows: BYPASS\n"); return TRUE; } return (*pEnumWindows)(lpEnumFunc, lParam); } +static void RedirectCoordinates(LPRECT lpRect) +{ + BOOL IsBiggerThanWin; + BOOL IsBiggerThanScreen; + long w, h; + // try to determine if the coordinates could belong to a fullscreen main win + w = lpRect->right - lpRect->left; + h = lpRect->bottom - lpRect->top; + IsBiggerThanWin = (w >= dxw.iSizX) && (h >= dxw.iSizY); + IsBiggerThanScreen = (w >= (long)dxw.GetScreenWidth()) && (h >= (long)dxw.GetScreenHeight()); + if(IsBiggerThanWin || IsBiggerThanScreen){ + WINDOWPOS wp; + dxw.CalculateWindowPos(NULL, dxw.GetScreenWidth(), dxw.GetScreenHeight(), &wp); + lpRect->left = wp.x; + lpRect->right = wp.x + wp.cx; + lpRect->top = wp.y; + lpRect->bottom = wp.y + wp.cy; + OutTraceDW("AdjustWindowRect: FIX rect=(%d,%d)-(%d,%d)\n", + lpRect->left, lpRect->top, lpRect->right, lpRect->bottom); + } +} + +BOOL WINAPI extAdjustWindowRect(LPRECT lpRect, DWORD dwStyle, BOOL bMenu) +{ + BOOL ret; + OutTraceDW("AdjustWindowRect: IN rect=(%d,%d)-(%d,%d) style=%x(%s) menu=%x\n", + lpRect->left, lpRect->top, lpRect->right, lpRect->bottom, + dwStyle, ExplainStyle(dwStyle), bMenu); + + if(dxw.dwFlags1 & LOCKWINPOS) RedirectCoordinates(lpRect); + + ret = pAdjustWindowRect(lpRect, dwStyle, bMenu); + + if(ret){ + OutTraceDW("AdjustWindowRect: OUT rect=(%d,%d)-(%d,%d)\n", + lpRect->left, lpRect->top, lpRect->right, lpRect->bottom); + } + else{ + OutTraceE("AdjustWindowRect ERROR: err=%d\n", GetLastError()); + } + return ret; +} + +BOOL WINAPI extAdjustWindowRectEx(LPRECT lpRect, DWORD dwStyle, BOOL bMenu, DWORD dwExStyle) +{ + BOOL ret; + OutTraceDW("AdjustWindowRectEx: IN rect=(%d,%d)-(%d,%d) style=%x(%s) menu=%x exstyle=%x(%s)\n", + lpRect->left, lpRect->top, lpRect->right, lpRect->bottom, + dwStyle, ExplainStyle(dwStyle), bMenu, dwExStyle, ExplainExStyle(dwExStyle)); + + if(dxw.dwFlags1 & LOCKWINPOS) RedirectCoordinates(lpRect); + + ret = pAdjustWindowRectEx(lpRect, dwStyle, bMenu, dwExStyle); + + if(ret){ + OutTraceDW("AdjustWindowRectEx: OUT rect=(%d,%d)-(%d,%d)\n", + lpRect->left, lpRect->top, lpRect->right, lpRect->bottom); + } + else{ + OutTraceE("AdjustWindowRectEx ERROR: err=%d\n", GetLastError()); + } + return ret; +} + // To do: // GrayStringA // GrayStringW \ No newline at end of file diff --git a/dll/winproc.cpp b/dll/winproc.cpp index 4988a3c..2615756 100644 --- a/dll/winproc.cpp +++ b/dll/winproc.cpp @@ -303,7 +303,9 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp break; case WM_NCCALCSIZE: case WM_NCPAINT: - if((dxw.dwFlags1 & LOCKWINPOS) && (hwnd == dxw.GethWnd()) && dxw.IsFullScreen()){ // v2.02.30: don't alter child and other windows.... + // v2.02.30: don't alter child and other windows.... + // v2.04.09: comment inconsistent with code. Added '!' to if expression .... + if(!((dxw.dwFlags1 & LOCKWINPOS) && (hwnd == dxw.GethWnd()) && dxw.IsFullScreen())){ OutTraceDW("WindowProc: %s wparam=%x\n", ExplainWinMessage(message), wparam); return (*pDefWindowProcA)(hwnd, message, wparam, lparam); } diff --git a/host/dxwndhost.aps b/host/dxwndhost.aps index 445a770459ad9500d5ee3d391cc53324c6bfec13..53e7361b6be7202fb7acb59247c183a9d26308a2 100644 GIT binary patch delta 4014 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 delta 3878 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 diff --git a/host/dxwndhost.rc b/host/dxwndhost.rc index 9c21e32ac8e28d032c5b354304bfc459684a2c91..f9281979d03f0a2631af13c0fb950e1cd038e6d6 100644 GIT binary patch delta 54 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 a&nkJ6`R4Da=^cUwWFJ$V)BkN+^ZpBGkMX?# delta 4645 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