mirror of
https://github.com/DxWnd/DxWnd.reloaded
synced 2024-12-30 09:25:35 +01:00
v2_03_12_src
Former-commit-id: 98030671cbaf07264e09d169f6ac315d17e1678e
This commit is contained in:
parent
6966a0370e
commit
8050fe4ddb
@ -37,7 +37,7 @@
|
|||||||
#define LOCKEDSURFACE 0x01000000 // emulates the buffer of the primary surface when locked and written directly
|
#define LOCKEDSURFACE 0x01000000 // emulates the buffer of the primary surface when locked and written directly
|
||||||
#define FIXPARENTWIN 0x02000000 // fixes parent window size & position
|
#define FIXPARENTWIN 0x02000000 // fixes parent window size & position
|
||||||
#define SWITCHVIDEOMEMORY 0x04000000 // when VIDEO memory is over, switches to SYSTEM memory
|
#define SWITCHVIDEOMEMORY 0x04000000 // when VIDEO memory is over, switches to SYSTEM memory
|
||||||
#define CLIENTREMAPPING 0x08000000 // hooks CLientToRect, RectToClient, GetClientRect, GetWinRect
|
#define CLIENTREMAPPING 0x08000000 // hooks ClientToRect, RectToClient, GetClientRect, GetWinRect
|
||||||
#define HANDLEALTF4 0x10000000 // forces quitting the program when receiving Alt-F4 key
|
#define HANDLEALTF4 0x10000000 // forces quitting the program when receiving Alt-F4 key
|
||||||
#define LOCKWINPOS 0x20000000 // prevent the program to change its own windows properties
|
#define LOCKWINPOS 0x20000000 // prevent the program to change its own windows properties
|
||||||
#define HOOKCHILDWIN 0x40000000 // hook CHILD windows to alter placement coordinates (UNUSED)
|
#define HOOKCHILDWIN 0x40000000 // hook CHILD windows to alter placement coordinates (UNUSED)
|
||||||
@ -264,6 +264,8 @@ void OutTrace(const char *, ...);
|
|||||||
void OutTraceHex(BYTE *, int);
|
void OutTraceHex(BYTE *, int);
|
||||||
void *HookAPI(HMODULE, char *, void *, const char *, void *);
|
void *HookAPI(HMODULE, char *, void *, const char *, void *);
|
||||||
void AdjustWindowFrame(HWND, DWORD, DWORD);
|
void AdjustWindowFrame(HWND, DWORD, DWORD);
|
||||||
|
char *hexdump(unsigned char *, int);
|
||||||
|
|
||||||
LRESULT CALLBACK extWindowProc(HWND, UINT, WPARAM, LPARAM);
|
LRESULT CALLBACK extWindowProc(HWND, UINT, WPARAM, LPARAM);
|
||||||
LRESULT CALLBACK extChildWindowProc(HWND, UINT, WPARAM, LPARAM);
|
LRESULT CALLBACK extChildWindowProc(HWND, UINT, WPARAM, LPARAM);
|
||||||
LRESULT CALLBACK extDialogWindowProc(HWND, UINT, WPARAM, LPARAM);
|
LRESULT CALLBACK extDialogWindowProc(HWND, UINT, WPARAM, LPARAM);
|
||||||
|
BIN
build/ICCVID.DLL
Normal file
BIN
build/ICCVID.DLL
Normal file
Binary file not shown.
@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:d53bda86269a959549e061c5b2c23e70b492dcb1b1e2b944063b193b49179d87
|
oid sha256:5005c1da2c65a47e47378d41ed67cb908a2fd475ced015bddebe715c7f1d71d7
|
||||||
size 567296
|
size 570368
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:be381f4fba85d8c7dcb13682c470713728dd133b38e6d4d1ed65fc6ceb74e771
|
oid sha256:2e73542e5cc2b9a1fa1d6429230b756694eb361b63fe55b812cb1c31c118e938
|
||||||
size 536064
|
size 538112
|
||||||
|
@ -8,7 +8,7 @@ coord0=0
|
|||||||
flag0=671096866
|
flag0=671096866
|
||||||
flagg0=1207959568
|
flagg0=1207959568
|
||||||
flagh0=20
|
flagh0=20
|
||||||
flagi0=4
|
flagi0=4194308
|
||||||
tflag0=0
|
tflag0=0
|
||||||
initx0=0
|
initx0=0
|
||||||
inity0=0
|
inity0=0
|
||||||
@ -22,3 +22,8 @@ sizx0=800
|
|||||||
sizy0=600
|
sizy0=600
|
||||||
maxfps0=0
|
maxfps0=0
|
||||||
initts0=0
|
initts0=0
|
||||||
|
launchpath0=
|
||||||
|
notes0=
|
||||||
|
flagj0=128
|
||||||
|
winver0=0
|
||||||
|
maxres0=0
|
||||||
|
29
build/exports/Actua Ice Hockey.dxw
Normal file
29
build/exports/Actua Ice Hockey.dxw
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
[target]
|
||||||
|
title0=Actua Ice Hockey
|
||||||
|
path0=D:\Games\ahockey\HOCKEY.EXE
|
||||||
|
launchpath0=
|
||||||
|
module0=
|
||||||
|
opengllib0=
|
||||||
|
notes0=
|
||||||
|
ver0=0
|
||||||
|
coord0=0
|
||||||
|
flag0=671088674
|
||||||
|
flagg0=1207959552
|
||||||
|
flagh0=20
|
||||||
|
flagi0=138412036
|
||||||
|
flagj0=4224
|
||||||
|
tflag0=0
|
||||||
|
initx0=0
|
||||||
|
inity0=0
|
||||||
|
minx0=0
|
||||||
|
miny0=0
|
||||||
|
maxx0=0
|
||||||
|
maxy0=0
|
||||||
|
posx0=50
|
||||||
|
posy0=50
|
||||||
|
sizx0=800
|
||||||
|
sizy0=600
|
||||||
|
maxfps0=0
|
||||||
|
initts0=0
|
||||||
|
winver0=0
|
||||||
|
maxres0=-1
|
29
build/exports/Adrenix 3D.dxw
Normal file
29
build/exports/Adrenix 3D.dxw
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
[target]
|
||||||
|
title0=Adrenix 3D
|
||||||
|
path0=D:\Games\Adrenix\AdrenixD.exe
|
||||||
|
launchpath0=
|
||||||
|
module0=
|
||||||
|
opengllib0=
|
||||||
|
notes0=
|
||||||
|
ver0=0
|
||||||
|
coord0=0
|
||||||
|
flag0=134234150
|
||||||
|
flagg0=1207959552
|
||||||
|
flagh0=20
|
||||||
|
flagi0=138412036
|
||||||
|
flagj0=4224
|
||||||
|
tflag0=0
|
||||||
|
initx0=0
|
||||||
|
inity0=0
|
||||||
|
minx0=0
|
||||||
|
miny0=0
|
||||||
|
maxx0=0
|
||||||
|
maxy0=0
|
||||||
|
posx0=50
|
||||||
|
posy0=50
|
||||||
|
sizx0=800
|
||||||
|
sizy0=600
|
||||||
|
maxfps0=0
|
||||||
|
initts0=0
|
||||||
|
winver0=0
|
||||||
|
maxres0=-1
|
29
build/exports/Daemonstar.dxw
Normal file
29
build/exports/Daemonstar.dxw
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
[target]
|
||||||
|
title0=Daemonstar
|
||||||
|
path0=D:\Games\dmnstar\DS.EXE
|
||||||
|
launchpath0=
|
||||||
|
module0=
|
||||||
|
opengllib0=
|
||||||
|
notes0=
|
||||||
|
ver0=0
|
||||||
|
coord0=0
|
||||||
|
flag0=134217762
|
||||||
|
flagg0=1207959552
|
||||||
|
flagh0=20
|
||||||
|
flagi0=138412036
|
||||||
|
flagj0=4224
|
||||||
|
tflag0=0
|
||||||
|
initx0=0
|
||||||
|
inity0=0
|
||||||
|
minx0=0
|
||||||
|
miny0=0
|
||||||
|
maxx0=0
|
||||||
|
maxy0=0
|
||||||
|
posx0=50
|
||||||
|
posy0=50
|
||||||
|
sizx0=800
|
||||||
|
sizy0=600
|
||||||
|
maxfps0=0
|
||||||
|
initts0=0
|
||||||
|
winver0=0
|
||||||
|
maxres0=-1
|
@ -18,10 +18,12 @@ maxx0=0
|
|||||||
maxy0=0
|
maxy0=0
|
||||||
posx0=50
|
posx0=50
|
||||||
posy0=50
|
posy0=50
|
||||||
sizx0=640
|
sizx0=800
|
||||||
sizy0=480
|
sizy0=600
|
||||||
maxfps0=0
|
maxfps0=0
|
||||||
initts0=0
|
initts0=0
|
||||||
launchpath0=
|
launchpath0=
|
||||||
winver0=0
|
winver0=0
|
||||||
maxres0=0
|
maxres0=0
|
||||||
|
notes0=
|
||||||
|
flagj0=129
|
||||||
|
29
build/exports/Divide, the.dxw
Normal file
29
build/exports/Divide, the.dxw
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
[target]
|
||||||
|
title0=Divide, the
|
||||||
|
path0=D:\Games\divide\DIVIDE.EXE
|
||||||
|
launchpath0=
|
||||||
|
module0=
|
||||||
|
opengllib0=
|
||||||
|
notes0=
|
||||||
|
ver0=0
|
||||||
|
coord0=0
|
||||||
|
flag0=134217762
|
||||||
|
flagg0=1212153856
|
||||||
|
flagh0=1044
|
||||||
|
flagi0=1212153860
|
||||||
|
flagj0=4224
|
||||||
|
tflag0=0
|
||||||
|
initx0=0
|
||||||
|
inity0=0
|
||||||
|
minx0=0
|
||||||
|
miny0=0
|
||||||
|
maxx0=0
|
||||||
|
maxy0=0
|
||||||
|
posx0=50
|
||||||
|
posy0=50
|
||||||
|
sizx0=800
|
||||||
|
sizy0=600
|
||||||
|
maxfps0=0
|
||||||
|
initts0=0
|
||||||
|
winver0=0
|
||||||
|
maxres0=-1
|
29
build/exports/Esoteria.dxw
Normal file
29
build/exports/Esoteria.dxw
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
[target]
|
||||||
|
title0=Esoteria
|
||||||
|
path0=D:\Games\esoter3\ESOTERIA.EXE
|
||||||
|
launchpath0=
|
||||||
|
module0=
|
||||||
|
opengllib0=
|
||||||
|
notes0=
|
||||||
|
ver0=0
|
||||||
|
coord0=0
|
||||||
|
flag0=134217762
|
||||||
|
flagg0=1207959552
|
||||||
|
flagh0=20
|
||||||
|
flagi0=134217732
|
||||||
|
flagj0=4224
|
||||||
|
tflag0=0
|
||||||
|
initx0=0
|
||||||
|
inity0=0
|
||||||
|
minx0=0
|
||||||
|
miny0=0
|
||||||
|
maxx0=0
|
||||||
|
maxy0=0
|
||||||
|
posx0=50
|
||||||
|
posy0=50
|
||||||
|
sizx0=800
|
||||||
|
sizy0=600
|
||||||
|
maxfps0=0
|
||||||
|
initts0=0
|
||||||
|
winver0=0
|
||||||
|
maxres0=-1
|
@ -5,10 +5,10 @@ module0=
|
|||||||
opengllib0=
|
opengllib0=
|
||||||
ver0=0
|
ver0=0
|
||||||
coord0=0
|
coord0=0
|
||||||
flag0=134234656
|
flag0=134234146
|
||||||
flagg0=1207959552
|
flagg0=1207959552
|
||||||
flagh0=67108884
|
flagh0=67108884
|
||||||
flagi0=131076
|
flagi0=4325380
|
||||||
tflag0=0
|
tflag0=0
|
||||||
initx0=0
|
initx0=0
|
||||||
inity0=0
|
inity0=0
|
||||||
@ -24,3 +24,6 @@ maxfps0=0
|
|||||||
initts0=0
|
initts0=0
|
||||||
winver0=0
|
winver0=0
|
||||||
maxres0=-1
|
maxres0=-1
|
||||||
|
launchpath0=
|
||||||
|
notes0=
|
||||||
|
flagj0=128
|
||||||
|
29
build/exports/H.E.D.Z..dxw
Normal file
29
build/exports/H.E.D.Z..dxw
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
[target]
|
||||||
|
title0=H.E.D.Z.
|
||||||
|
path0=D:\Games\HEDZ\HEDZ.EXE
|
||||||
|
launchpath0=
|
||||||
|
module0=
|
||||||
|
opengllib0=
|
||||||
|
notes0=
|
||||||
|
ver0=0
|
||||||
|
coord0=0
|
||||||
|
flag0=681574434
|
||||||
|
flagg0=1207959552
|
||||||
|
flagh0=20
|
||||||
|
flagi0=138412036
|
||||||
|
flagj0=134221952
|
||||||
|
tflag0=0
|
||||||
|
initx0=0
|
||||||
|
inity0=0
|
||||||
|
minx0=0
|
||||||
|
miny0=0
|
||||||
|
maxx0=0
|
||||||
|
maxy0=0
|
||||||
|
posx0=50
|
||||||
|
posy0=50
|
||||||
|
sizx0=800
|
||||||
|
sizy0=600
|
||||||
|
maxfps0=0
|
||||||
|
initts0=0
|
||||||
|
winver0=0
|
||||||
|
maxres0=-1
|
29
build/exports/Powerslide.dxw
Normal file
29
build/exports/Powerslide.dxw
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
[target]
|
||||||
|
title0=Powerslide
|
||||||
|
path0=D:\Games\Powerslide\powerslide.exe
|
||||||
|
launchpath0=
|
||||||
|
module0=
|
||||||
|
opengllib0=
|
||||||
|
notes0=
|
||||||
|
ver0=0
|
||||||
|
coord0=0
|
||||||
|
flag0=134217762
|
||||||
|
flagg0=1207959552
|
||||||
|
flagh0=20
|
||||||
|
flagi0=138412036
|
||||||
|
flagj0=4224
|
||||||
|
tflag0=512
|
||||||
|
initx0=0
|
||||||
|
inity0=0
|
||||||
|
minx0=0
|
||||||
|
miny0=0
|
||||||
|
maxx0=0
|
||||||
|
maxy0=0
|
||||||
|
posx0=50
|
||||||
|
posy0=50
|
||||||
|
sizx0=800
|
||||||
|
sizy0=600
|
||||||
|
maxfps0=0
|
||||||
|
initts0=0
|
||||||
|
winver0=0
|
||||||
|
maxres0=-1
|
@ -6,9 +6,9 @@ opengllib0=
|
|||||||
ver0=0
|
ver0=0
|
||||||
coord0=0
|
coord0=0
|
||||||
flag0=134217762
|
flag0=134217762
|
||||||
flagg0=136314880
|
flagg0=1207959552
|
||||||
flagh0=20
|
flagh0=20
|
||||||
flagi0=0
|
flagi0=4194304
|
||||||
tflag0=64
|
tflag0=64
|
||||||
initx0=0
|
initx0=0
|
||||||
inity0=0
|
inity0=0
|
||||||
@ -22,3 +22,8 @@ sizx0=800
|
|||||||
sizy0=600
|
sizy0=600
|
||||||
maxfps0=0
|
maxfps0=0
|
||||||
initts0=0
|
initts0=0
|
||||||
|
launchpath0=
|
||||||
|
notes0=
|
||||||
|
flagj0=128
|
||||||
|
winver0=0
|
||||||
|
maxres0=0
|
||||||
|
29
build/exports/Tenka.dxw
Normal file
29
build/exports/Tenka.dxw
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
[target]
|
||||||
|
title0=Tenka
|
||||||
|
path0=D:\Games\tenka\tenka.exe
|
||||||
|
launchpath0=
|
||||||
|
module0=
|
||||||
|
opengllib0=
|
||||||
|
notes0=
|
||||||
|
ver0=0
|
||||||
|
coord0=0
|
||||||
|
flag0=134217762
|
||||||
|
flagg0=1207959552
|
||||||
|
flagh0=20
|
||||||
|
flagi0=134217732
|
||||||
|
flagj0=4224
|
||||||
|
tflag0=512
|
||||||
|
initx0=0
|
||||||
|
inity0=0
|
||||||
|
minx0=0
|
||||||
|
miny0=0
|
||||||
|
maxx0=0
|
||||||
|
maxy0=0
|
||||||
|
posx0=50
|
||||||
|
posy0=50
|
||||||
|
sizx0=800
|
||||||
|
sizy0=600
|
||||||
|
maxfps0=0
|
||||||
|
initts0=0
|
||||||
|
winver0=0
|
||||||
|
maxres0=-1
|
29
build/exports/Virtua Cop.dxw
Normal file
29
build/exports/Virtua Cop.dxw
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
[target]
|
||||||
|
title0=Virtua Cop
|
||||||
|
path0=D:\Games\Virtua Cop\VCOP.EXE
|
||||||
|
launchpath0=
|
||||||
|
module0=
|
||||||
|
opengllib0=
|
||||||
|
notes0=
|
||||||
|
ver0=0
|
||||||
|
coord0=0
|
||||||
|
flag0=134234150
|
||||||
|
flagg0=1207959552
|
||||||
|
flagh0=20
|
||||||
|
flagi0=138412036
|
||||||
|
flagj0=4224
|
||||||
|
tflag0=0
|
||||||
|
initx0=0
|
||||||
|
inity0=0
|
||||||
|
minx0=0
|
||||||
|
miny0=0
|
||||||
|
maxx0=0
|
||||||
|
maxy0=0
|
||||||
|
posx0=50
|
||||||
|
posy0=50
|
||||||
|
sizx0=800
|
||||||
|
sizy0=600
|
||||||
|
maxfps0=0
|
||||||
|
initts0=0
|
||||||
|
winver0=0
|
||||||
|
maxres0=-1
|
@ -8,7 +8,7 @@ coord0=0
|
|||||||
flag0=134218400
|
flag0=134218400
|
||||||
flagg0=1207959552
|
flagg0=1207959552
|
||||||
flagh0=20
|
flagh0=20
|
||||||
flagi0=4
|
flagi0=4194308
|
||||||
tflag0=0
|
tflag0=0
|
||||||
initx0=0
|
initx0=0
|
||||||
inity0=0
|
inity0=0
|
||||||
@ -24,3 +24,6 @@ maxfps0=0
|
|||||||
initts0=0
|
initts0=0
|
||||||
winver0=0
|
winver0=0
|
||||||
maxres0=0
|
maxres0=0
|
||||||
|
launchpath0=
|
||||||
|
notes0=
|
||||||
|
flagj0=128
|
||||||
|
29
build/exports/Worms 2.dxw
Normal file
29
build/exports/Worms 2.dxw
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
[target]
|
||||||
|
title0=Worms 2
|
||||||
|
path0=D:\Games\worms2\worms2.exe
|
||||||
|
launchpath0=
|
||||||
|
module0=
|
||||||
|
opengllib0=
|
||||||
|
notes0=Working pretty well on TWILIGHT game rip.\nUntested on CD version.\nIt shows problems with the background: \nin emulated mode the colors are limited, in GDI mode it's all black.\n
|
||||||
|
ver0=0
|
||||||
|
coord0=0
|
||||||
|
flag0=134234146
|
||||||
|
flagg0=1207959552
|
||||||
|
flagh0=20
|
||||||
|
flagi0=138412038
|
||||||
|
flagj0=5248
|
||||||
|
tflag0=536870912
|
||||||
|
initx0=0
|
||||||
|
inity0=0
|
||||||
|
minx0=0
|
||||||
|
miny0=0
|
||||||
|
maxx0=0
|
||||||
|
maxy0=0
|
||||||
|
posx0=50
|
||||||
|
posy0=50
|
||||||
|
sizx0=800
|
||||||
|
sizy0=600
|
||||||
|
maxfps0=0
|
||||||
|
initts0=0
|
||||||
|
winver0=0
|
||||||
|
maxres0=-1
|
5
build/exports/dxwnd.ini
Normal file
5
build/exports/dxwnd.ini
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
[window]
|
||||||
|
posx=1292
|
||||||
|
posy=131
|
||||||
|
sizx=320
|
||||||
|
sizy=787
|
@ -740,4 +740,15 @@ fix: GDI mode bug, crashing when blitting from NULL surface (to do a color fill
|
|||||||
v2.03.11
|
v2.03.11
|
||||||
fix: added DDSCAPS_FLIP capability to emulated backbuffer surface. Fixes "Injection" missing flips
|
fix: added DDSCAPS_FLIP capability to emulated backbuffer surface. Fixes "Injection" missing flips
|
||||||
fix: added high order bit set to kernel32.dll GetVersion() wrapper in case of Win95/98 emulation. Fixes "Warhead" frontend program
|
fix: added high order bit set to kernel32.dll GetVersion() wrapper in case of Win95/98 emulation. Fixes "Warhead" frontend program
|
||||||
fix: coordinates returned by user32.dll GetClipCursor() must be scaled accordingly with virtual desktop size. Fixes "SubCulture" mouse control problems
|
fix: coordinates returned by user32.dll GetClipCursor() must be scaled accordingly with virtual desktop size. Fixes "SubCulture" mouse control problems
|
||||||
|
|
||||||
|
v2.03.12
|
||||||
|
fix: several issues in fake registry hooks
|
||||||
|
add: continue char '\' in fake registry configuration for hex values
|
||||||
|
add: GetClipList ddraw hooker: fixes "Full Pipe" blitting coordinates
|
||||||
|
fix: proper handling of palette reserved entries
|
||||||
|
fix: dinput GetDeviceData
|
||||||
|
add: implemented "Release mouse outside window" functionality in dinput calls
|
||||||
|
fix: now "Release mouse outside window" leaves the mouse close to where it left the window
|
||||||
|
fix: in GUI, keeps memory of last used paths
|
||||||
|
fix: several log messages
|
3
build/redist/dplay.dll
Normal file
3
build/redist/dplay.dll
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:8194ca60e6eda8f5c3fe67990bb38f7d3e68e9beba9d6adf5c68fab9478b94f5
|
||||||
|
size 57344
|
20
build/registry/dxwnd.the Divide.REG
Normal file
20
build/registry/dxwnd.the Divide.REG
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
[HKEY_LOCAL_MACHINE\SOFTWARE]
|
||||||
|
[HKEY_LOCAL_MACHINE\SOFTWARE\Viacom New Media]
|
||||||
|
[HKEY_LOCAL_MACHINE\SOFTWARE\Viacom New Media\The Divide]
|
||||||
|
[HKEY_LOCAL_MACHINE\SOFTWARE\Viacom New Media\The Divide\1.0]
|
||||||
|
"Display Name"="\"The Divide\""
|
||||||
|
"InstallDir"="."
|
||||||
|
"InstallSrc"="."
|
||||||
|
"CDROM"=".:"
|
||||||
|
"ProgramDir"="."
|
||||||
|
"LevelsDir"=".\\Levels\\"
|
||||||
|
"MoviesDir"=".\\Movies\\"
|
||||||
|
"SoundsDir"=".\\pc\\"
|
||||||
|
|
||||||
|
|
||||||
|
[HKEY_CURRENT_USER\SOFTWARE\Viacom New Media\The Divide\Config]
|
||||||
|
"Game Settings"=hex:20,03,00,00,58,02,00,00,20,03,00,00,58,02,00,00\
|
||||||
|
00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,01,00,00,00,00\
|
||||||
|
00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00\
|
||||||
|
00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
|
||||||
|
|
9
build/registry/dxwnd.the Industry Giant.reg
Normal file
9
build/registry/dxwnd.the Industry Giant.reg
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
[HKEY_LOCAL_MACHINE\SOFTWARE]
|
||||||
|
|
||||||
|
; the Industry Giant
|
||||||
|
|
||||||
|
|
||||||
|
[HKEY_LOCAL_MACHINE\SOFTWARE\JoWooD]
|
||||||
|
[HKEY_LOCAL_MACHINE\SOFTWARE\JoWooD\The IndustryGiant]
|
||||||
|
"InstallPath"="."
|
||||||
|
|
@ -197,12 +197,13 @@ LONG WINAPI extRegQueryValueEx(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// try emulated registry
|
// try emulated registry
|
||||||
|
res = ERROR_FILE_NOT_FOUND;
|
||||||
FILE *regf;
|
FILE *regf;
|
||||||
char RegBuf[MAX_PATH+1];
|
char RegBuf[MAX_PATH+1];
|
||||||
char *pData;
|
char *pData;
|
||||||
HKEY hCurKey=HKEY_FAKE+1;
|
HKEY hCurKey=HKEY_FAKE+1;
|
||||||
regf=OpenFakeRegistry();
|
regf=OpenFakeRegistry();
|
||||||
if(regf==NULL) return ERROR_FILE_NOT_FOUND;
|
if(regf==NULL) return res;
|
||||||
if(!lpValueName)lpValueName="";
|
if(!lpValueName)lpValueName="";
|
||||||
fgets(RegBuf, 256, regf);
|
fgets(RegBuf, 256, regf);
|
||||||
while (!feof(regf)){
|
while (!feof(regf)){
|
||||||
@ -211,70 +212,79 @@ LONG WINAPI extRegQueryValueEx(
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if(hCurKey==hKey){
|
if(hCurKey==hKey){
|
||||||
|
|
||||||
//OutTrace("loop: \"%s\"\n", RegBuf);
|
|
||||||
if((RegBuf[0]=='"') &&
|
if((RegBuf[0]=='"') &&
|
||||||
!_strnicmp(lpValueName, &RegBuf[1], strlen(lpValueName)) &&
|
!_strnicmp(lpValueName, &RegBuf[1], strlen(lpValueName)) &&
|
||||||
(RegBuf[strlen(lpValueName)+1]=='"') &&
|
(RegBuf[strlen(lpValueName)+1]=='"') &&
|
||||||
(RegBuf[strlen(lpValueName)+2]=='='))
|
(RegBuf[strlen(lpValueName)+2]=='='))
|
||||||
{
|
{
|
||||||
|
LPBYTE lpb;
|
||||||
res=ERROR_FILE_NOT_FOUND;
|
res=ERROR_FILE_NOT_FOUND;
|
||||||
pData=&RegBuf[strlen(lpValueName)+3];
|
pData=&RegBuf[strlen(lpValueName)+3];
|
||||||
|
lpb = lpData;
|
||||||
if(*pData=='"'){ // string value
|
if(*pData=='"'){ // string value
|
||||||
|
if(lpType) *lpType=REG_SZ;
|
||||||
if(lpData){
|
if(lpData){
|
||||||
LPBYTE lpb;
|
|
||||||
lpb = lpData;
|
|
||||||
*lpcbData=0;
|
*lpcbData=0;
|
||||||
pData++;
|
pData++;
|
||||||
while(*pData && (*pData != '"')){
|
while(*pData && (*pData != '"')){
|
||||||
if(*pData=='\\') pData++;
|
if(*pData=='\\') pData++;
|
||||||
*lpb++=*pData++;
|
*lpb++=*pData++;
|
||||||
*lpcbData++;
|
if(lpcbData) *lpcbData++;
|
||||||
}
|
}
|
||||||
*lpb = 0; // string terminator
|
*lpb = 0; // string terminator
|
||||||
}
|
}
|
||||||
if(lpType) *lpType=REG_SZ;
|
OutTraceR("RegQueryValueEx: type=REG_SZ Data=\"%s\"\n", lpData ? (char *)lpData : "(NULL)");
|
||||||
//
|
|
||||||
OutTraceR("RegQueryValueEx: Data=\"%s\" type=REG_SZ\n", lpData);
|
|
||||||
res=ERROR_SUCCESS;
|
res=ERROR_SUCCESS;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if(!strncmp(pData,"dword:",strlen("dword:"))){ //dword value
|
if(!strncmp(pData,"dword:",strlen("dword:"))){ //dword value
|
||||||
DWORD val;
|
DWORD val;
|
||||||
|
if(lpType) *lpType=REG_DWORD;
|
||||||
pData+=strlen("dword:");
|
pData+=strlen("dword:");
|
||||||
sscanf(pData, "%x", &val);
|
sscanf(pData, "%x", &val);
|
||||||
if(lpData) memcpy(lpData, &val, sizeof(DWORD));
|
if(lpData) memcpy(lpData, &val, sizeof(DWORD));
|
||||||
if(lpType) *lpType=REG_DWORD;
|
if(lpcbData) *lpcbData=sizeof(DWORD);
|
||||||
*lpcbData=sizeof(DWORD);
|
OutTraceR("RegQueryValueEx: type=REG_DWORD Data=0x%x\n", val);
|
||||||
OutTraceR("RegQueryValueEx: Data=0x%x type=REG_DWORD\n", val);
|
|
||||||
res=ERROR_SUCCESS;
|
res=ERROR_SUCCESS;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if(!strncmp(pData,"hex:",strlen("hex:"))){ //dword value
|
if(!strncmp(pData,"hex:",strlen("hex:"))){ //hex value
|
||||||
pData+=strlen("hex:");
|
BYTE *p;
|
||||||
pData[strlen(pData)-1]=0; // eliminates \n
|
|
||||||
if(lpType) *lpType=REG_BINARY;
|
if(lpType) *lpType=REG_BINARY;
|
||||||
OutTraceDW("RegQueryValueEx: Data=");
|
p = (BYTE *)pData;
|
||||||
if(lpData){
|
p+=strlen("hex:");
|
||||||
*lpcbData=0;
|
if(lpcbData) *lpcbData=0;
|
||||||
while(strlen(pData)>1){
|
while(TRUE){
|
||||||
sscanf(pData, "%x,", (char *)lpData);
|
p[strlen((char *)p)-1]=0; // eliminates \n
|
||||||
OutTraceDW("%02.2x,", *(unsigned char *)lpData);
|
if(lpData){
|
||||||
pData+=3;
|
while(strlen((char *)p)>1){
|
||||||
lpData++;
|
sscanf((char *)p, "%x,", (char *)lpb);
|
||||||
(*lpcbData)++;
|
p+=3;
|
||||||
|
lpb++;
|
||||||
|
if(lpcbData) (*lpcbData)++;
|
||||||
|
}
|
||||||
|
if(p[strlen((char *)p)-1]=='\\'){
|
||||||
|
fgets(RegBuf, 256, regf);
|
||||||
|
pData = RegBuf;
|
||||||
|
p = (BYTE *)pData;
|
||||||
|
}
|
||||||
|
else break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
OutTraceR(" type=REG_BINARY cbData=%d\n", *lpcbData);
|
OutTraceR("RegQueryValueEx: type=REG_BINARY cbData=%d Data=%s\n",
|
||||||
|
lpcbData ? *lpcbData : 0,
|
||||||
|
lpData ? "(NULL)" : hexdump(lpData, *lpcbData));
|
||||||
res=ERROR_SUCCESS;
|
res=ERROR_SUCCESS;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
fclose(regf);
|
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fgets(RegBuf, 256, regf);
|
fgets(RegBuf, 256, regf);
|
||||||
}
|
}
|
||||||
fclose(regf);
|
fclose(regf);
|
||||||
return ERROR_FILE_NOT_FOUND;
|
OutTraceR("RegQueryValueEx: res=%x\n", res);
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
LONG WINAPI extRegCloseKey(HKEY hKey)
|
LONG WINAPI extRegCloseKey(HKEY hKey)
|
||||||
@ -287,18 +297,13 @@ LONG WINAPI extRegCloseKey(HKEY hKey)
|
|||||||
LONG WINAPI extRegSetValueEx(HKEY hKey, LPCTSTR lpValueName, DWORD Reserved, DWORD dwType, const BYTE *lpData, DWORD cbData)
|
LONG WINAPI extRegSetValueEx(HKEY hKey, LPCTSTR lpValueName, DWORD Reserved, DWORD dwType, const BYTE *lpData, DWORD cbData)
|
||||||
{
|
{
|
||||||
if (IsTraceR){
|
if (IsTraceR){
|
||||||
OutTrace("RegSetValueEx: hKey=%x ValueName=\"%s\" Type=%x(%s) cbData=%d ", hKey, lpValueName, dwType, ExplainRegType(dwType), cbData);
|
char sInfo[1024];
|
||||||
|
sprintf(sInfo, "RegSetValueEx: hKey=%x ValueName=\"%s\" Type=%x(%s) cbData=%d", hKey, lpValueName, dwType, ExplainRegType(dwType), cbData);
|
||||||
switch(dwType){
|
switch(dwType){
|
||||||
case REG_DWORD: OutTrace("Data=%x\n", *(DWORD *)lpData); break;
|
case REG_DWORD: OutTrace("%s Data=%x\n", sInfo, *(DWORD *)lpData); break;
|
||||||
case REG_NONE: OutTrace("Data=\"%s\"\n", lpData); break;
|
case REG_NONE: OutTrace("%s Data=\"%s\"\n", sInfo, lpData); break;
|
||||||
case REG_BINARY: {
|
case REG_BINARY: OutTrace("%s Data=%s\n", sInfo, hexdump((BYTE *)lpData, cbData)); break;
|
||||||
DWORD i;
|
default: OutTrace("%s\n", sInfo);
|
||||||
OutTrace("Data=%02.2X,", *lpData);
|
|
||||||
for(i=1; i<cbData; i++) OutTrace("%02.2X", lpData[i]);
|
|
||||||
OutTrace("\n");
|
|
||||||
};
|
|
||||||
break;
|
|
||||||
default: OutTrace("\n");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(IsFake(hKey) && (dxw.dwFlags3 & EMULATEREGISTRY)) {
|
if(IsFake(hKey) && (dxw.dwFlags3 & EMULATEREGISTRY)) {
|
||||||
@ -314,6 +319,8 @@ LONG WINAPI extRegCreateKeyEx(HKEY hKey, LPCTSTR lpSubKey, DWORD Reserved, LPTST
|
|||||||
OutTraceR("RegCreateKeyEx: hKey=%x(%s) SubKey=\"%s\" Class=%x\n", hKey, hKey2String(hKey), lpSubKey, lpClass);
|
OutTraceR("RegCreateKeyEx: hKey=%x(%s) SubKey=\"%s\" Class=%x\n", hKey, hKey2String(hKey), lpSubKey, lpClass);
|
||||||
if (dxw.dwFlags3 & EMULATEREGISTRY){
|
if (dxw.dwFlags3 & EMULATEREGISTRY){
|
||||||
*phkResult = HKEY_FAKE;
|
*phkResult = HKEY_FAKE;
|
||||||
|
// V2.3.12: return existing fake key if any ....
|
||||||
|
if(dxw.dwFlags4 & OVERRIDEREGISTRY) myRegOpenKeyEx(hKey, lpSubKey, phkResult);
|
||||||
if(lpdwDisposition) *lpdwDisposition=REG_OPENED_EXISTING_KEY;
|
if(lpdwDisposition) *lpdwDisposition=REG_OPENED_EXISTING_KEY;
|
||||||
return ERROR_SUCCESS;
|
return ERROR_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -327,6 +334,8 @@ LONG WINAPI extRegCreateKey(HKEY hKey, LPCTSTR lpSubKey, PHKEY phkResult)
|
|||||||
OutTraceR("RegCreateKey: hKey=%x(%s) SubKey=\"%s\"\n", hKey, hKey2String(hKey), lpSubKey);
|
OutTraceR("RegCreateKey: hKey=%x(%s) SubKey=\"%s\"\n", hKey, hKey2String(hKey), lpSubKey);
|
||||||
if (dxw.dwFlags3 & EMULATEREGISTRY){
|
if (dxw.dwFlags3 & EMULATEREGISTRY){
|
||||||
*phkResult = HKEY_FAKE;
|
*phkResult = HKEY_FAKE;
|
||||||
|
// V2.3.12: return existing fake key if any ....
|
||||||
|
if(dxw.dwFlags4 & OVERRIDEREGISTRY) myRegOpenKeyEx(hKey, lpSubKey, phkResult);
|
||||||
return ERROR_SUCCESS;
|
return ERROR_SUCCESS;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1035,12 +1035,35 @@ HRESULT WINAPI extAddRefCProxy(LPDIRECTDRAWCLIPPER lpddClip)
|
|||||||
HRESULT WINAPI extGetClipListProxy(LPDIRECTDRAWCLIPPER lpddClip, LPRECT lpRect, LPRGNDATA lpRgnData, LPDWORD lpw)
|
HRESULT WINAPI extGetClipListProxy(LPDIRECTDRAWCLIPPER lpddClip, LPRECT lpRect, LPRGNDATA lpRgnData, LPDWORD lpw)
|
||||||
{
|
{
|
||||||
HRESULT res;
|
HRESULT res;
|
||||||
OutTraceP("GetClipList(C): PROXED lpddClip=%x ", lpddClip);
|
if(IsTraceP){
|
||||||
if (lpRect) OutTraceP("rect=(%d,%d)-(%d,%d) ", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);
|
char sInfo[81];
|
||||||
else OutTraceP("rect=(NULL) ");
|
if (lpRect) sprintf(sInfo, "rect=(%d,%d)-(%d,%d) ", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);
|
||||||
|
else sprintf(sInfo, "rect=(NULL) ");
|
||||||
|
OutTrace("GetClipList(C): PROXED lpddClip=%x %s\n", lpddClip, sInfo);
|
||||||
|
}
|
||||||
res=(*pGetClipList)(lpddClip, lpRect, lpRgnData, lpw);
|
res=(*pGetClipList)(lpddClip, lpRect, lpRgnData, lpw);
|
||||||
if(res) OutTraceP("GeGetClipListtHWnd(C): ERROR err=%x(%s)\n", res, ExplainDDError(res));
|
if(IsTraceP){
|
||||||
else OutTraceP("GetClipList(C): w=%x\n", *lpw);
|
//char *sInfo[1024];
|
||||||
|
if(res) OutTrace("GetClipList(C): ERROR err=%x(%s)\n", res, ExplainDDError(res));
|
||||||
|
else{
|
||||||
|
if(lpRgnData){
|
||||||
|
OutTrace("GetClipList(C): w=%x rgndataheader{size=%d type=%x count=%d RgnSize=%d bound=(%d,%d)-(%d,%d)}\n",
|
||||||
|
*lpw, lpRgnData->rdh.dwSize, lpRgnData->rdh.iType, lpRgnData->rdh.nCount, lpRgnData->rdh.nRgnSize,
|
||||||
|
lpRgnData->rdh.rcBound.left, lpRgnData->rdh.rcBound.top, lpRgnData->rdh.rcBound.right, lpRgnData->rdh.rcBound.bottom);
|
||||||
|
if(IsDebug){
|
||||||
|
RECT *rgns;
|
||||||
|
rgns = (RECT *)lpRgnData->Buffer;
|
||||||
|
for(DWORD i=0; i<lpRgnData->rdh.nCount; i++){
|
||||||
|
OutTrace("GetClipList(C): rect[%d]=(%d,%d)-(%d,%d)\n",
|
||||||
|
i, rgns[i].left, rgns[i].top, rgns[i].right, rgns[i].bottom);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
OutTrace("GetClipList(C): w=%x\n", *lpw);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -104,6 +104,7 @@ HRESULT WINAPI extSetSurfaceDesc(LPDIRECTDRAWSURFACE, LPDDSURFACEDESC, DWORD);
|
|||||||
|
|
||||||
// DirectDrawClipper
|
// DirectDrawClipper
|
||||||
HRESULT WINAPI extReleaseC(LPDIRECTDRAWCLIPPER);
|
HRESULT WINAPI extReleaseC(LPDIRECTDRAWCLIPPER);
|
||||||
|
HRESULT WINAPI extGetClipList(LPDIRECTDRAWCLIPPER, LPRECT, LPRGNDATA, LPDWORD);
|
||||||
|
|
||||||
// DirectDrawPalette
|
// DirectDrawPalette
|
||||||
HRESULT WINAPI extReleaseP(LPDIRECTDRAWPALETTE);
|
HRESULT WINAPI extReleaseP(LPDIRECTDRAWPALETTE);
|
||||||
@ -495,14 +496,41 @@ void DescribeSurface(LPDIRECTDRAWSURFACE lpdds, int dxversion, char *label, int
|
|||||||
|
|
||||||
BOOL isPaletteUpdated;
|
BOOL isPaletteUpdated;
|
||||||
|
|
||||||
void mySetPalette(int dwstart, int dwcount, LPPALETTEENTRY lpentries)
|
void mySetPalette(int dwstart, int dwcount, LPPALETTEENTRY lpentries, BOOL Has256ColorsPalette)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
extern DXWNDSTATUS *pStatus;
|
extern DXWNDSTATUS *pStatus;
|
||||||
|
|
||||||
|
// copy the palette entries on the current system palette
|
||||||
for(int idx=0; idx<dwcount; idx++)
|
for(int idx=0; idx<dwcount; idx++)
|
||||||
pStatus->Palette[dwstart+idx]= lpentries[idx];
|
pStatus->Palette[dwstart+idx]= lpentries[idx];
|
||||||
|
|
||||||
|
// if has reserved palette entries, recover them
|
||||||
|
if(!Has256ColorsPalette){
|
||||||
|
int nStatCols, nPalEntries;
|
||||||
|
PALETTEENTRY SysPalEntry[256];
|
||||||
|
LPPALETTEENTRY lpEntry;
|
||||||
|
extern GetSystemPaletteEntries_Type pGDIGetSystemPaletteEntries;
|
||||||
|
extern GetDeviceCaps_Type pGDIGetDeviceCaps;
|
||||||
|
|
||||||
|
// The number of static colours should be 20, but inquire it anyway
|
||||||
|
nStatCols = (*pGDIGetDeviceCaps)(GetDC(0), NUMRESERVED);
|
||||||
|
|
||||||
|
// fix the first nStatCols/2 and the last nStatCols/2 entries
|
||||||
|
nPalEntries=(*pGDIGetSystemPaletteEntries)(GetDC(0), 0, 256, SysPalEntry);
|
||||||
|
|
||||||
|
for (i = 0; i < 256; i++){
|
||||||
|
// skip intermediate un-reserved palette entries
|
||||||
|
if(i==(nStatCols / 2)) i=256 - (nStatCols / 2);
|
||||||
|
lpEntry = &lpentries[i];
|
||||||
|
if(lpEntry->peFlags==0){
|
||||||
|
lpEntry->peRed = SysPalEntry[i].peRed;
|
||||||
|
lpEntry->peGreen = SysPalEntry[i].peGreen;
|
||||||
|
lpEntry->peBlue = SysPalEntry[i].peBlue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for(i = 0; i < dwcount; i ++){
|
for(i = 0; i < dwcount; i ++){
|
||||||
PALETTEENTRY PalColor;
|
PALETTEENTRY PalColor;
|
||||||
PalColor = lpentries[i];
|
PalColor = lpentries[i];
|
||||||
@ -1087,6 +1115,8 @@ static void HookDDClipper(LPDIRECTDRAWCLIPPER FAR* lplpDDClipper)
|
|||||||
|
|
||||||
// IDirectDrawClipper::Release
|
// IDirectDrawClipper::Release
|
||||||
SetHook((void *)(**(DWORD **)lplpDDClipper + 8), extReleaseC, (void **)&pReleaseC, "Release(C)");
|
SetHook((void *)(**(DWORD **)lplpDDClipper + 8), extReleaseC, (void **)&pReleaseC, "Release(C)");
|
||||||
|
// IDirectDrawClipper::GetClipList
|
||||||
|
SetHook((void *)(**(DWORD **)lplpDDClipper + 12), extGetClipList, (void **)&pGetClipList, "GetClipList(C)");
|
||||||
|
|
||||||
if (!(dxw.dwTFlags & OUTPROXYTRACE)) return;
|
if (!(dxw.dwTFlags & OUTPROXYTRACE)) return;
|
||||||
// Just proxed ...
|
// Just proxed ...
|
||||||
@ -1095,8 +1125,6 @@ static void HookDDClipper(LPDIRECTDRAWCLIPPER FAR* lplpDDClipper)
|
|||||||
SetHook((void *)(**(DWORD **)lplpDDClipper), extQueryInterfaceCProxy, (void **)&pQueryInterfaceC, "QueryInterface(C)");
|
SetHook((void *)(**(DWORD **)lplpDDClipper), extQueryInterfaceCProxy, (void **)&pQueryInterfaceC, "QueryInterface(C)");
|
||||||
// IDirectDrawClipper::AddRef
|
// IDirectDrawClipper::AddRef
|
||||||
SetHook((void *)(**(DWORD **)lplpDDClipper + 4), extAddRefCProxy, (void **)&pAddRefC, "AddRef(C)");
|
SetHook((void *)(**(DWORD **)lplpDDClipper + 4), extAddRefCProxy, (void **)&pAddRefC, "AddRef(C)");
|
||||||
// IDirectDrawClipper::GetClipList
|
|
||||||
SetHook((void *)(**(DWORD **)lplpDDClipper + 12), extGetClipListProxy, (void **)&pGetClipList, "GetClipList(C)");
|
|
||||||
// IDirectDrawClipper::GetHWnd
|
// IDirectDrawClipper::GetHWnd
|
||||||
SetHook((void *)(**(DWORD **)lplpDDClipper + 16), extGetHWndProxy, (void **)&pGetHWnd, "GetHWnd(C)");
|
SetHook((void *)(**(DWORD **)lplpDDClipper + 16), extGetHWndProxy, (void **)&pGetHWnd, "GetHWnd(C)");
|
||||||
// IDirectDrawClipper::Initialize
|
// IDirectDrawClipper::Initialize
|
||||||
@ -3385,6 +3413,8 @@ HRESULT WINAPI extWaitForVerticalBlank(LPDIRECTDRAW lpdd, DWORD dwflags, HANDLE
|
|||||||
|
|
||||||
#define DDPCAPS_INITIALIZE_LEGACY 0x00000008l
|
#define DDPCAPS_INITIALIZE_LEGACY 0x00000008l
|
||||||
|
|
||||||
|
BOOL Has256ColorsPalette = FALSE;
|
||||||
|
|
||||||
HRESULT WINAPI extCreatePalette(LPDIRECTDRAW lpdd, DWORD dwflags, LPPALETTEENTRY lpddpa,
|
HRESULT WINAPI extCreatePalette(LPDIRECTDRAW lpdd, DWORD dwflags, LPPALETTEENTRY lpddpa,
|
||||||
LPDIRECTDRAWPALETTE *lplpddp, IUnknown *pu)
|
LPDIRECTDRAWPALETTE *lplpddp, IUnknown *pu)
|
||||||
{
|
{
|
||||||
@ -3394,6 +3424,7 @@ HRESULT WINAPI extCreatePalette(LPDIRECTDRAW lpdd, DWORD dwflags, LPPALETTEENTRY
|
|||||||
if(IsDebug && (dwflags & DDPCAPS_8BIT)) dxw.DumpPalette(256, lpddpa);
|
if(IsDebug && (dwflags & DDPCAPS_8BIT)) dxw.DumpPalette(256, lpddpa);
|
||||||
|
|
||||||
//if (dwflags & ~(DDPCAPS_PRIMARYSURFACE|DDPCAPS_8BIT|DDPCAPS_ALLOW256|DDPCAPS_INITIALIZE_LEGACY)) STOPPER("Palette flags");
|
//if (dwflags & ~(DDPCAPS_PRIMARYSURFACE|DDPCAPS_8BIT|DDPCAPS_ALLOW256|DDPCAPS_INITIALIZE_LEGACY)) STOPPER("Palette flags");
|
||||||
|
if(dwflags & DDPCAPS_ALLOW256) Has256ColorsPalette = TRUE;
|
||||||
|
|
||||||
if(dxw.dwFlags1 & EMULATESURFACE) dwflags &= ~DDPCAPS_PRIMARYSURFACE;
|
if(dxw.dwFlags1 & EMULATESURFACE) dwflags &= ~DDPCAPS_PRIMARYSURFACE;
|
||||||
res = (*pCreatePalette)(lpdd, dwflags, lpddpa, lplpddp, pu);
|
res = (*pCreatePalette)(lpdd, dwflags, lpddpa, lplpddp, pu);
|
||||||
@ -3454,7 +3485,7 @@ HRESULT WINAPI extSetPalette(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE lpdd
|
|||||||
lpentries = (LPPALETTEENTRY)PaletteEntries;
|
lpentries = (LPPALETTEENTRY)PaletteEntries;
|
||||||
res2=lpddp->GetEntries(0, 0, 256, lpentries);
|
res2=lpddp->GetEntries(0, 0, 256, lpentries);
|
||||||
if(res2) OutTraceE("SetPalette: GetEntries ERROR res=%x(%s)\n", res2, ExplainDDError(res2));
|
if(res2) OutTraceE("SetPalette: GetEntries ERROR res=%x(%s)\n", res2, ExplainDDError(res2));
|
||||||
mySetPalette(0, 256, lpentries); // v2.02.76: necessary for "Requiem Avenging Angel" in SURFACEEMULATION mode
|
mySetPalette(0, 256, lpentries, Has256ColorsPalette); // v2.02.76: necessary for "Requiem Avenging Angel" in SURFACEEMULATION mode
|
||||||
}
|
}
|
||||||
// Apply palette to backbuffer surface. This is necessary on some games: "Duckman private dick", "Total Soccer 2000", ...
|
// Apply palette to backbuffer surface. This is necessary on some games: "Duckman private dick", "Total Soccer 2000", ...
|
||||||
if (lpDDSBack){
|
if (lpDDSBack){
|
||||||
@ -3490,7 +3521,8 @@ HRESULT WINAPI extSetEntries(LPDIRECTDRAWPALETTE lpddp, DWORD dwflags, DWORD dws
|
|||||||
OutTraceDW("SetEntries: ASSERT start+count > 256\n");
|
OutTraceDW("SetEntries: ASSERT start+count > 256\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
mySetPalette(dwstart, dwcount, lpentries);
|
if(dwflags & DDPCAPS_ALLOW256) Has256ColorsPalette=TRUE;
|
||||||
|
mySetPalette(dwstart, dwcount, lpentries, Has256ColorsPalette);
|
||||||
|
|
||||||
// GHO: needed for fixed rect and variable palette animations,
|
// GHO: needed for fixed rect and variable palette animations,
|
||||||
// e.g. dungeon keeper loading screen, Warcraft II splash, ...
|
// e.g. dungeon keeper loading screen, Warcraft II splash, ...
|
||||||
@ -4024,7 +4056,7 @@ HRESULT WINAPI extEnumDisplayModes(EnumDisplayModes1_Type pEnumDisplayModes, LPD
|
|||||||
EmuDesc.ddpfPixelFormat.dwRGBBitCount=SupportedDepths[DepthIdx];
|
EmuDesc.ddpfPixelFormat.dwRGBBitCount=SupportedDepths[DepthIdx];
|
||||||
EmuDesc.lPitch=SupportedRes[ResIdx].w * SupportedDepths[DepthIdx] / 8;
|
EmuDesc.lPitch=SupportedRes[ResIdx].w * SupportedDepths[DepthIdx] / 8;
|
||||||
FixPixelFormat(EmuDesc.ddpfPixelFormat.dwRGBBitCount, &(EmuDesc.ddpfPixelFormat));
|
FixPixelFormat(EmuDesc.ddpfPixelFormat.dwRGBBitCount, &(EmuDesc.ddpfPixelFormat));
|
||||||
EnumModesCallbackDumper((LPDDSURFACEDESC)&EmuDesc, lpContext);
|
if(IsDebug) EnumModesCallbackDumper((LPDDSURFACEDESC)&EmuDesc, lpContext);
|
||||||
res=(*cb)((LPDDSURFACEDESC)&EmuDesc, lpContext);
|
res=(*cb)((LPDDSURFACEDESC)&EmuDesc, lpContext);
|
||||||
if(res==DDENUMRET_CANCEL) break;
|
if(res==DDENUMRET_CANCEL) break;
|
||||||
}
|
}
|
||||||
@ -4464,6 +4496,59 @@ HRESULT WINAPI extReleaseC(LPDIRECTDRAWCLIPPER lpddClip)
|
|||||||
return ref;
|
return ref;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI extGetClipList(LPDIRECTDRAWCLIPPER lpddClip, LPRECT lpRect, LPRGNDATA lpRgnData, LPDWORD lpw)
|
||||||
|
{
|
||||||
|
HRESULT res;
|
||||||
|
|
||||||
|
// returned clip region (both RgnData and single RECT array) should be relocated in window mode
|
||||||
|
// an easy way to do that, though not accurate, is to consider the clip region as the whole virtual screen
|
||||||
|
// a better way is to use the dxw.UnmapWindow(RECT *) method
|
||||||
|
// this makes "Full Pipe" working without clipping problems.
|
||||||
|
|
||||||
|
if(IsTraceDDRAW){
|
||||||
|
char sInfo[81];
|
||||||
|
if (lpRect) sprintf(sInfo, "rect=(%d,%d)-(%d,%d) ", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);
|
||||||
|
else sprintf(sInfo, "rect=(NULL) ");
|
||||||
|
OutTrace("GetClipList(C): lpddClip=%x %s\n", lpddClip, sInfo);
|
||||||
|
}
|
||||||
|
res=(*pGetClipList)(lpddClip, lpRect, lpRgnData, lpw);
|
||||||
|
if(IsTraceDDRAW){
|
||||||
|
if(res) OutTrace("GetClipList(C): ERROR err=%x(%s)\n", res, ExplainDDError(res));
|
||||||
|
else{
|
||||||
|
if(lpRgnData){
|
||||||
|
OutTrace("GetClipList(C): w=%x rgndataheader{size=%d type=%x count=%d RgnSize=%d bound=(%d,%d)-(%d,%d)}\n",
|
||||||
|
*lpw, lpRgnData->rdh.dwSize, lpRgnData->rdh.iType, lpRgnData->rdh.nCount, lpRgnData->rdh.nRgnSize,
|
||||||
|
lpRgnData->rdh.rcBound.left, lpRgnData->rdh.rcBound.top, lpRgnData->rdh.rcBound.right, lpRgnData->rdh.rcBound.bottom);
|
||||||
|
if(dxw.Windowize && (dxw.dwFlags1 & CLIENTREMAPPING)){
|
||||||
|
dxw.UnmapWindow(&lpRgnData->rdh.rcBound);
|
||||||
|
//lpRgnData->rdh.rcBound = dxw.GetScreenRect();
|
||||||
|
OutTraceDW("GetClipList(C): w=%x rgndataheader{size=%d type=%x count=%d RgnSize=%d REMAPPED bound=(%d,%d)-(%d,%d)}\n",
|
||||||
|
*lpw, lpRgnData->rdh.dwSize, lpRgnData->rdh.iType, lpRgnData->rdh.nCount, lpRgnData->rdh.nRgnSize,
|
||||||
|
lpRgnData->rdh.rcBound.left, lpRgnData->rdh.rcBound.top, lpRgnData->rdh.rcBound.right, lpRgnData->rdh.rcBound.bottom);
|
||||||
|
}
|
||||||
|
if(IsDebug){
|
||||||
|
RECT *rgns;
|
||||||
|
rgns = (RECT *)lpRgnData->Buffer;
|
||||||
|
for(DWORD i=0; i<lpRgnData->rdh.nCount; i++){
|
||||||
|
OutTrace("GetClipList(C): rect[%d]=(%d,%d)-(%d,%d)\n",
|
||||||
|
i, rgns[i].left, rgns[i].top, rgns[i].right, rgns[i].bottom);
|
||||||
|
if(dxw.Windowize && (dxw.dwFlags1 & CLIENTREMAPPING)){
|
||||||
|
dxw.UnmapWindow(&rgns[i]);
|
||||||
|
//rgns[i] = dxw.GetScreenRect();
|
||||||
|
OutTrace("GetClipList(C): REMAPPED rect[%d]=(%d,%d)-(%d,%d)\n",
|
||||||
|
i, rgns[i].left, rgns[i].top, rgns[i].right, rgns[i].bottom);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
OutTrace("GetClipList(C): w=%x\n", *lpw);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
HRESULT WINAPI extGetSurfaceDesc(GetSurfaceDesc_Type pGetSurfaceDesc, LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpddsd)
|
HRESULT WINAPI extGetSurfaceDesc(GetSurfaceDesc_Type pGetSurfaceDesc, LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpddsd)
|
||||||
{
|
{
|
||||||
HRESULT res;
|
HRESULT res;
|
||||||
|
104
dll/dinput.cpp
104
dll/dinput.cpp
@ -235,6 +235,25 @@ HRESULT WINAPI extDICreateDeviceEx(LPDIRECTINPUT lpdi, REFGUID rguid,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* from MSDN:
|
||||||
|
cbObjectData
|
||||||
|
Size of the DIDEVICEOBJECTDATA structure, in bytes.
|
||||||
|
rgdod
|
||||||
|
Array of DIDEVICEOBJECTDATA structures to receive the buffered data.
|
||||||
|
The number of elements in this array must be equal to the value of the pdwInOut parameter.
|
||||||
|
If this parameter is NULL, the buffered data is not stored anywhere, but all other side effects take place.
|
||||||
|
pdwInOut
|
||||||
|
On entry, the number of elements in the array pointed to by the rgdod parameter.
|
||||||
|
On exit, the number of elements actually obtained.
|
||||||
|
dwFlags
|
||||||
|
Flags that control the manner in which data is obtained.
|
||||||
|
This value can be 0 or the following flag.
|
||||||
|
|
||||||
|
DIGDD_PEEK
|
||||||
|
Do not remove the items from the buffer. A subsequent IDirectInputDevice8::GetDeviceData call will read the same data.
|
||||||
|
Normally, data is removed from the buffer after it is read.
|
||||||
|
*/
|
||||||
|
|
||||||
HRESULT WINAPI extGetDeviceData(LPDIRECTINPUTDEVICE lpdid, DWORD cbdata, LPVOID rgdod, LPDWORD pdwinout, DWORD dwflags)
|
HRESULT WINAPI extGetDeviceData(LPDIRECTINPUTDEVICE lpdid, DWORD cbdata, LPVOID rgdod, LPDWORD pdwinout, DWORD dwflags)
|
||||||
{
|
{
|
||||||
HRESULT res;
|
HRESULT res;
|
||||||
@ -242,39 +261,56 @@ HRESULT WINAPI extGetDeviceData(LPDIRECTINPUTDEVICE lpdid, DWORD cbdata, LPVOID
|
|||||||
unsigned int i;
|
unsigned int i;
|
||||||
POINT p;
|
POINT p;
|
||||||
|
|
||||||
OutTraceDW("GetDeviceData(I): cbdata=%i\n", cbdata);
|
OutTraceDW("GetDeviceData(I): did=%x cbdata=%i rgdod=%x, inout=%d flags=%x\n",
|
||||||
|
lpdid, cbdata, rgdod, *pdwinout, dwflags);
|
||||||
|
|
||||||
res = (*pGetDeviceData)(lpdid, cbdata, rgdod, pdwinout, dwflags);
|
res = (*pGetDeviceData)(lpdid, cbdata, rgdod, pdwinout, dwflags);
|
||||||
if(res) return res;
|
if(res) {
|
||||||
|
OutTraceE("GetDeviceData(I) ERROR: err=%x(%s)\n", res, ExplainDDError(res));
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!dxw.bActive) {
|
||||||
|
*pdwinout = 0;
|
||||||
|
return DI_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(dxw.dwFlags4 & RELEASEMOUSE){
|
||||||
|
POINT curr;
|
||||||
|
RECT client;
|
||||||
|
extern GetCursorPos_Type pGetCursorPos;
|
||||||
|
extern GetClientRect_Type pGetClientRect;
|
||||||
|
extern ScreenToClient_Type pScreenToClient;
|
||||||
|
(*pGetCursorPos)(&curr);
|
||||||
|
(*pScreenToClient)(dxw.GethWnd(), &curr);
|
||||||
|
(*pGetClientRect)(dxw.GethWnd(), &client);
|
||||||
|
if ((curr.x < client.left) || (curr.y < client.top) || (curr.x > client.right) || (curr.y > client.bottom)){
|
||||||
|
*pdwinout = 0;
|
||||||
|
return DI_OK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(!dxw.bActive) *pdwinout = 0;
|
|
||||||
GetMousePosition((int *)&p.x, (int *)&p.y);
|
|
||||||
if(cbdata == 20 || cbdata == 24 || cbdata == 16){
|
if(cbdata == 20 || cbdata == 24 || cbdata == 16){
|
||||||
tmp = (BYTE *)rgdod;
|
tmp = (BYTE *)rgdod;
|
||||||
for(i = 0; i < *pdwinout; i ++){
|
if(dxw.bDInputAbs){
|
||||||
if(((LPDIDEVICEOBJECTDATA)tmp)->dwOfs == DIMOFS_X){
|
GetMousePosition((int *)&p.x, (int *)&p.y);
|
||||||
((LPDIDEVICEOBJECTDATA)tmp)->dwData = p.x;
|
for(i = 0; i < *pdwinout; i ++){
|
||||||
if(!dxw.bDInputAbs){
|
if(((LPDIDEVICEOBJECTDATA)tmp)->dwOfs == DIMOFS_X)((LPDIDEVICEOBJECTDATA)tmp)->dwData = p.x;
|
||||||
if(p.x < iCurMinX) p.x = iCurMinX;
|
if(((LPDIDEVICEOBJECTDATA)tmp)->dwOfs == DIMOFS_Y)((LPDIDEVICEOBJECTDATA)tmp)->dwData = p.y;
|
||||||
if(p.x > iCurMaxX) p.x = iCurMaxX;
|
tmp += cbdata;
|
||||||
((LPDIDEVICEOBJECTDATA)tmp)->dwData = p.x - iCursorXBuf;
|
}
|
||||||
iCursorXBuf = p.x;
|
OutTraceB("GetDeviceData(I): ABS mousedata=(%d,%d)\n", p.x, p.y);
|
||||||
}
|
}
|
||||||
|
else{
|
||||||
|
for(i = 0; i < *pdwinout; i ++){
|
||||||
|
if(((LPDIDEVICEOBJECTDATA)tmp)->dwOfs == DIMOFS_X) OutTraceB("GetDeviceData(I): REL mousedata X=%d\n", ((LPDIDEVICEOBJECTDATA)tmp)->dwData);
|
||||||
|
if(((LPDIDEVICEOBJECTDATA)tmp)->dwOfs == DIMOFS_Y) OutTraceB("GetDeviceData(I): REL mousedata Y=%d\n", ((LPDIDEVICEOBJECTDATA)tmp)->dwData);
|
||||||
|
tmp += cbdata;
|
||||||
}
|
}
|
||||||
if(((LPDIDEVICEOBJECTDATA)tmp)->dwOfs == DIMOFS_Y){
|
|
||||||
((LPDIDEVICEOBJECTDATA)tmp)->dwData = p.y;
|
|
||||||
if(!dxw.bDInputAbs){
|
|
||||||
if(p.y < iCurMinY) p.y = iCurMinY;
|
|
||||||
if(p.y > iCurMaxY) p.y = iCurMaxY;
|
|
||||||
((LPDIDEVICEOBJECTDATA)tmp)->dwData = p.y - iCursorYBuf;
|
|
||||||
iCursorYBuf = p.y;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tmp += cbdata;
|
|
||||||
}
|
}
|
||||||
OutTraceDW("DEBUG: directinput mousedata=(%d,%d)\n", p.x, p.y);
|
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
|
return DI_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI extGetDeviceState(LPDIRECTINPUTDEVICE lpdid, DWORD cbdata, LPDIMOUSESTATE lpvdata)
|
HRESULT WINAPI extGetDeviceState(LPDIRECTINPUTDEVICE lpdid, DWORD cbdata, LPDIMOUSESTATE lpvdata)
|
||||||
@ -314,7 +350,7 @@ HRESULT WINAPI extGetDeviceState(LPDIRECTINPUTDEVICE lpdid, DWORD cbdata, LPDIMO
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(cbdata == 256 && !dxw.bActive) ZeroMemory(lpvdata, 256);
|
if(cbdata == 256 && !dxw.bActive) ZeroMemory(lpvdata, 256);
|
||||||
return 0;
|
return DI_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
//static char *dftype(LPCDIDATAFORMAT lpdf)
|
//static char *dftype(LPCDIDATAFORMAT lpdf)
|
||||||
@ -356,11 +392,21 @@ static char *didftype(DWORD c)
|
|||||||
else eb[0]=0;
|
else eb[0]=0;
|
||||||
return(eb);
|
return(eb);
|
||||||
}
|
}
|
||||||
|
static char *ExplainDataFormatFlags(DWORD f)
|
||||||
|
{
|
||||||
|
char *s;
|
||||||
|
s="unknown";
|
||||||
|
switch(f){
|
||||||
|
case DIDF_ABSAXIS: s="DIDF_ABSAXIS";
|
||||||
|
case DIDF_RELAXIS: s="DIDF_RELAXIS";
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
HRESULT WINAPI extSetDataFormat(LPDIRECTINPUTDEVICE lpdid, LPCDIDATAFORMAT lpdf)
|
HRESULT WINAPI extSetDataFormat(LPDIRECTINPUTDEVICE lpdid, LPCDIDATAFORMAT lpdf)
|
||||||
{
|
{
|
||||||
OutTraceDW("SetDataFormat(I): did=%x lpdf=%x size=%d objsize=%d flags=0x%x datasize=%d numobjects=%d\n",
|
OutTraceDW("SetDataFormat(I): did=%x lpdf=%x size=%d objsize=%d flags=0x%x(%s) datasize=%d numobjects=%d\n",
|
||||||
lpdid, lpdf, lpdf->dwSize, lpdf->dwObjSize, lpdf->dwFlags, lpdf->dwDataSize, lpdf->dwNumObjs);
|
lpdid, lpdf, lpdf->dwSize, lpdf->dwObjSize, lpdf->dwFlags, ExplainDataFormatFlags(lpdf->dwFlags), lpdf->dwDataSize, lpdf->dwNumObjs);
|
||||||
if(IsDebug){
|
if(IsDebug){
|
||||||
DIOBJECTDATAFORMAT *df;
|
DIOBJECTDATAFORMAT *df;
|
||||||
df = lpdf->rgodf;
|
df = lpdf->rgodf;
|
||||||
@ -396,7 +442,7 @@ HRESULT WINAPI extDISetCooperativeLevel(LPDIRECTINPUTDEVICE lpdid, HWND hwnd, DW
|
|||||||
void GetMousePosition(int *x, int *y)
|
void GetMousePosition(int *x, int *y)
|
||||||
{
|
{
|
||||||
POINT p;
|
POINT p;
|
||||||
//GetCursorPos(&p);
|
|
||||||
extern BOOL WINAPI extGetCursorPos(LPPOINT);
|
extern BOOL WINAPI extGetCursorPos(LPPOINT);
|
||||||
extGetCursorPos(&p);
|
extGetCursorPos(&p);
|
||||||
*x = p.x;
|
*x = p.x;
|
||||||
|
@ -951,8 +951,10 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WM_ACTIVATE:
|
case WM_ACTIVATE:
|
||||||
|
// turn DirectInput bActive flag on & off .....
|
||||||
dxw.bActive = (LOWORD(wparam) == WA_ACTIVE || LOWORD(wparam) == WA_CLICKACTIVE) ? 1 : 0;
|
dxw.bActive = (LOWORD(wparam) == WA_ACTIVE || LOWORD(wparam) == WA_CLICKACTIVE) ? 1 : 0;
|
||||||
case WM_NCACTIVATE:
|
case WM_NCACTIVATE:
|
||||||
|
// turn DirectInput bActive flag on & off .....
|
||||||
if(message == WM_NCACTIVATE) dxw.bActive = wparam;
|
if(message == WM_NCACTIVATE) dxw.bActive = wparam;
|
||||||
(*pSetWindowPos)(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
(*pSetWindowPos)(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
||||||
if(dxw.dwFlags1 & UNNOTIFY){
|
if(dxw.dwFlags1 & UNNOTIFY){
|
||||||
|
@ -420,6 +420,8 @@ POINT dxwCore::FixCursorPos(POINT prev)
|
|||||||
POINT curr;
|
POINT curr;
|
||||||
RECT rect;
|
RECT rect;
|
||||||
extern LPRECT lpClipRegion;
|
extern LPRECT lpClipRegion;
|
||||||
|
static BOOL IsWithin = TRUE;
|
||||||
|
static POINT LastPos;
|
||||||
|
|
||||||
curr=prev;
|
curr=prev;
|
||||||
|
|
||||||
@ -449,6 +451,7 @@ POINT dxwCore::FixCursorPos(POINT prev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(dxw.dwFlags4 & RELEASEMOUSE){
|
if(dxw.dwFlags4 & RELEASEMOUSE){
|
||||||
|
#if 0
|
||||||
if ((curr.x < 0) ||
|
if ((curr.x < 0) ||
|
||||||
(curr.y < 0) ||
|
(curr.y < 0) ||
|
||||||
(curr.x > w) ||
|
(curr.x > w) ||
|
||||||
@ -456,6 +459,28 @@ POINT dxwCore::FixCursorPos(POINT prev)
|
|||||||
curr.x = w / 2;
|
curr.x = w / 2;
|
||||||
curr.y = h / 2;
|
curr.y = h / 2;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
if ((curr.x < 0) || (curr.y < 0) || (curr.x > w) || (curr.y > h)){
|
||||||
|
if(IsWithin){
|
||||||
|
int RestX, RestY;
|
||||||
|
RestX = w ? ((CLIP_TOLERANCE * w) / dxw.GetScreenWidth()) + 2 : CLIP_TOLERANCE + 2;
|
||||||
|
RestY = h ? ((CLIP_TOLERANCE * h) / dxw.GetScreenHeight()) + 2 : CLIP_TOLERANCE + 2;
|
||||||
|
if (curr.x < 0) curr.x = RestX;
|
||||||
|
if (curr.y < 0) curr.y = RestY;
|
||||||
|
if (curr.x > w) curr.x = w - RestX;
|
||||||
|
if (curr.y > h) curr.y = h - RestY;
|
||||||
|
LastPos = curr;
|
||||||
|
IsWithin = FALSE;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
curr = LastPos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
IsWithin = TRUE;
|
||||||
|
LastPos = curr;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (curr.x < 0) curr.x = 0;
|
if (curr.x < 0) curr.x = 0;
|
||||||
@ -833,6 +858,19 @@ void dxwCore::MapWindow(LPPOINT lppoint)
|
|||||||
lppoint->y = upleft.y + (((lppoint->y * client.bottom) + (dwScreenHeight >> 1)) / dwScreenHeight);
|
lppoint->y = upleft.y + (((lppoint->y * client.bottom) + (dwScreenHeight >> 1)) / dwScreenHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void dxwCore::UnmapWindow(LPRECT rect)
|
||||||
|
{
|
||||||
|
RECT client;
|
||||||
|
POINT upleft = {0,0};
|
||||||
|
if(!(*pGetClientRect)(hWnd, &client)) return;
|
||||||
|
(*pClientToScreen)(hWnd, &upleft);
|
||||||
|
if((client.right == 0) || (client.bottom == 0)) return;
|
||||||
|
rect->left= ((rect->left - upleft.x) * (int)dwScreenWidth) / client.right;
|
||||||
|
rect->top= ((rect->top - upleft.y) * (int)dwScreenHeight) / client.bottom;
|
||||||
|
rect->right= ((rect->right - upleft.x) * (int)dwScreenWidth) / client.right;
|
||||||
|
rect->bottom= ((rect->bottom - upleft.y) * (int)dwScreenHeight) / client.bottom;
|
||||||
|
}
|
||||||
|
|
||||||
POINT dxwCore::ClientOffset(HWND hwnd)
|
POINT dxwCore::ClientOffset(HWND hwnd)
|
||||||
{
|
{
|
||||||
RECT desktop;
|
RECT desktop;
|
||||||
|
@ -63,6 +63,7 @@ public: // methods
|
|||||||
void MapWindow(LPPOINT);
|
void MapWindow(LPPOINT);
|
||||||
void MapWindow(LPRECT);
|
void MapWindow(LPRECT);
|
||||||
void MapWindow(int *, int *, int *, int *);
|
void MapWindow(int *, int *, int *, int *);
|
||||||
|
void UnmapWindow(LPRECT);
|
||||||
void FixWorkarea(LPRECT);
|
void FixWorkarea(LPRECT);
|
||||||
RECT GetScreenRect(void);
|
RECT GetScreenRect(void);
|
||||||
RECT GetUnmappedScreenRect();
|
RECT GetUnmappedScreenRect();
|
||||||
|
@ -27,7 +27,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
#include "TlHelp32.h"
|
#include "TlHelp32.h"
|
||||||
|
|
||||||
#define VERSION "2.03.11"
|
#define VERSION "2.03.12"
|
||||||
|
|
||||||
#define DDTHREADLOCK 1
|
#define DDTHREADLOCK 1
|
||||||
//#define LOCKTHREADS
|
//#define LOCKTHREADS
|
||||||
|
Binary file not shown.
@ -401,6 +401,10 @@
|
|||||||
RelativePath=".\hd3d9.cpp"
|
RelativePath=".\hd3d9.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\hexdump.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\hotpatch.cpp"
|
RelativePath=".\hotpatch.cpp"
|
||||||
>
|
>
|
||||||
|
@ -37,6 +37,20 @@ BOOL WINAPI extExtTextOutA(HDC, int, int, UINT, const RECT *, LPCSTR, UINT, cons
|
|||||||
ExtTextOutW_Type pExtTextOutW = NULL;
|
ExtTextOutW_Type pExtTextOutW = NULL;
|
||||||
ExtTextOutA_Type pExtTextOutA = NULL;
|
ExtTextOutA_Type pExtTextOutA = NULL;
|
||||||
|
|
||||||
|
/*
|
||||||
|
typedef COLORREF (WINAPI *SetBkColor_Type)(HDC, COLORREF);
|
||||||
|
typedef COLORREF (WINAPI *SetTextColor_Type)(HDC hdc, COLORREF crColor);
|
||||||
|
typedef int (WINAPI *SetBkMode_Type)(HDC, int);
|
||||||
|
|
||||||
|
SetBkColor_Type pSetBkColor = NULL;
|
||||||
|
SetTextColor_Type pSetTextColor = NULL;
|
||||||
|
SetBkMode_Type pSetBkMode = NULL;
|
||||||
|
|
||||||
|
COLORREF WINAPI extSetBkColor(HDC, COLORREF);
|
||||||
|
COLORREF WINAPI extSetTextColor(HDC hdc, COLORREF crColor);
|
||||||
|
int WINAPI extSetBkMode(HDC, int);
|
||||||
|
*/
|
||||||
|
|
||||||
static HookEntry_Type Hooks[]={
|
static HookEntry_Type Hooks[]={
|
||||||
|
|
||||||
{HOOK_IAT_CANDIDATE, "GetDeviceCaps", (FARPROC)GetDeviceCaps, (FARPROC *)&pGDIGetDeviceCaps, (FARPROC)extGetDeviceCaps},
|
{HOOK_IAT_CANDIDATE, "GetDeviceCaps", (FARPROC)GetDeviceCaps, (FARPROC *)&pGDIGetDeviceCaps, (FARPROC)extGetDeviceCaps},
|
||||||
@ -155,6 +169,15 @@ static HookEntry_Type FontHooks[]={
|
|||||||
{HOOK_IAT_CANDIDATE, 0, NULL, 0, 0} // terminator
|
{HOOK_IAT_CANDIDATE, 0, NULL, 0, 0} // terminator
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
static HookEntry_Type LockWHooks[]={
|
||||||
|
{HOOK_HOT_CANDIDATE, "SetBkColor", (FARPROC)SetBkColor, (FARPROC *)&pSetBkColor, (FARPROC)extSetBkColor},
|
||||||
|
{HOOK_HOT_CANDIDATE, "SetBkMode", (FARPROC)SetBkMode, (FARPROC *)&pSetBkMode, (FARPROC)extSetBkMode},
|
||||||
|
{HOOK_HOT_CANDIDATE, "SetTextColor", (FARPROC)SetTextColor, (FARPROC *)&pSetTextColor, (FARPROC)extSetTextColor},
|
||||||
|
{HOOK_IAT_CANDIDATE, 0, NULL, 0, 0} // terminator
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
|
||||||
extern HRESULT WINAPI extDirectDrawCreate(GUID FAR *, LPDIRECTDRAW FAR *, IUnknown FAR *);
|
extern HRESULT WINAPI extDirectDrawCreate(GUID FAR *, LPDIRECTDRAW FAR *, IUnknown FAR *);
|
||||||
extern HRESULT WINAPI extDirectDrawCreateEx(GUID FAR *, LPDIRECTDRAW FAR *, REFIID, IUnknown FAR *);
|
extern HRESULT WINAPI extDirectDrawCreateEx(GUID FAR *, LPDIRECTDRAW FAR *, REFIID, IUnknown FAR *);
|
||||||
|
|
||||||
@ -168,6 +191,7 @@ void HookGDI32Init()
|
|||||||
HookLibInit(EmulateHooks);
|
HookLibInit(EmulateHooks);
|
||||||
HookLibInit(TextHooks);
|
HookLibInit(TextHooks);
|
||||||
HookLibInit(GammaHooks);
|
HookLibInit(GammaHooks);
|
||||||
|
//HookLibInit(LockWHooks);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HookGDI32(HMODULE module)
|
void HookGDI32(HMODULE module)
|
||||||
@ -182,6 +206,7 @@ void HookGDI32(HMODULE module)
|
|||||||
if (dxw.dwFlags2 & DISABLEGAMMARAMP) HookLibrary(module, GammaHooks, libname);
|
if (dxw.dwFlags2 & DISABLEGAMMARAMP) HookLibrary(module, GammaHooks, libname);
|
||||||
// v2.02.33 - for "Stratego" compatibility option
|
// v2.02.33 - for "Stratego" compatibility option
|
||||||
if(dxw.dwFlags3 & FONTBYPASS) HookLibrary(module, FontHooks, libname);
|
if(dxw.dwFlags3 & FONTBYPASS) HookLibrary(module, FontHooks, libname);
|
||||||
|
//if(1) HookLibrary(module, LockWHooks, libname);
|
||||||
}
|
}
|
||||||
|
|
||||||
FARPROC Remap_GDI32_ProcAddress(LPCSTR proc, HMODULE hModule)
|
FARPROC Remap_GDI32_ProcAddress(LPCSTR proc, HMODULE hModule)
|
||||||
@ -198,6 +223,7 @@ FARPROC Remap_GDI32_ProcAddress(LPCSTR proc, HMODULE hModule)
|
|||||||
if (dxw.dwFlags2 & DISABLEGAMMARAMP) if(addr=RemapLibrary(proc, hModule, GammaHooks)) return addr;
|
if (dxw.dwFlags2 & DISABLEGAMMARAMP) if(addr=RemapLibrary(proc, hModule, GammaHooks)) return addr;
|
||||||
// v2.02.33 - for "Stratego" compatibility option
|
// v2.02.33 - for "Stratego" compatibility option
|
||||||
if (dxw.dwFlags3 & FONTBYPASS) if(addr=RemapLibrary(proc, hModule, FontHooks)) return addr;
|
if (dxw.dwFlags3 & FONTBYPASS) if(addr=RemapLibrary(proc, hModule, FontHooks)) return addr;
|
||||||
|
//if (1) if(addr=RemapLibrary(proc, hModule, LockWHooks)) return addr;
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -338,7 +364,7 @@ int WINAPI extGetDeviceCaps(HDC hdc, int nindex)
|
|||||||
case RASTERCAPS:
|
case RASTERCAPS:
|
||||||
if(dxw.dwFlags2 & INIT8BPP) {
|
if(dxw.dwFlags2 & INIT8BPP) {
|
||||||
res |= RC_PALETTE; // v2.02.12
|
res |= RC_PALETTE; // v2.02.12
|
||||||
OutTraceDW("GetDeviceCaps: fix(2) RASTERCAPS setting RC_PALETTE cap=%x\n",res);
|
OutTraceDW("GetDeviceCaps: fix(2) RASTERCAPS setting RC_PALETTE cap=%x\n", res);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case BITSPIXEL:
|
case BITSPIXEL:
|
||||||
@ -346,7 +372,7 @@ int WINAPI extGetDeviceCaps(HDC hdc, int nindex)
|
|||||||
if(dxw.dwFlags2 & (INIT8BPP|INIT16BPP)){ // v2.02.32 fix
|
if(dxw.dwFlags2 & (INIT8BPP|INIT16BPP)){ // v2.02.32 fix
|
||||||
if(dxw.dwFlags2 & INIT8BPP) res = 8;
|
if(dxw.dwFlags2 & INIT8BPP) res = 8;
|
||||||
if(dxw.dwFlags2 & INIT16BPP) res = 16;
|
if(dxw.dwFlags2 & INIT16BPP) res = 16;
|
||||||
OutTraceDW("GetDeviceCaps: fix(2) BITSPIXEL/COLORRES cap=%d\n",res);
|
OutTraceDW("GetDeviceCaps: fix(2) BITSPIXEL/COLORRES cap=%d\n", res);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
//case NUMCOLORS: // numcolors windows bug fix....
|
//case NUMCOLORS: // numcolors windows bug fix....
|
||||||
@ -369,15 +395,15 @@ int WINAPI extGetDeviceCaps(HDC hdc, int nindex)
|
|||||||
if(dxw.VirtualPixelFormat.dwRGBBitCount!=0) res = dxw.VirtualPixelFormat.dwRGBBitCount;
|
if(dxw.VirtualPixelFormat.dwRGBBitCount!=0) res = dxw.VirtualPixelFormat.dwRGBBitCount;
|
||||||
if(dxw.dwFlags2 & INIT8BPP) res = 8;
|
if(dxw.dwFlags2 & INIT8BPP) res = 8;
|
||||||
if(dxw.dwFlags2 & INIT16BPP) res = 16;
|
if(dxw.dwFlags2 & INIT16BPP) res = 16;
|
||||||
if(PrevRes != res) OutTraceDW("GetDeviceCaps: fix(3) BITSPIXEL/COLORRES cap=%d\n",res);
|
if(PrevRes != res) OutTraceDW("GetDeviceCaps: fix(3) BITSPIXEL/COLORRES cap=%d\n", res);
|
||||||
break;
|
break;
|
||||||
case SIZEPALETTE:
|
case SIZEPALETTE:
|
||||||
res = 256;
|
res = 256;
|
||||||
OutTraceDW("GetDeviceCaps: fix(3) SIZEPALETTE cap=%x\n",res);
|
OutTraceDW("GetDeviceCaps: fix(3) SIZEPALETTE cap=%x\n", res);
|
||||||
break;
|
break;
|
||||||
case NUMRESERVED:
|
case NUMRESERVED:
|
||||||
res = 0;
|
res = 0;
|
||||||
OutTraceDW("GetDeviceCaps: fix(3) NUMRESERVED cap=%x\n",res);
|
OutTraceDW("GetDeviceCaps: fix(3) NUMRESERVED cap=%x\n", res);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -493,14 +519,14 @@ BOOL WINAPI extAnimatePalette(HPALETTE hpal, UINT iStartIndex, UINT cEntries, co
|
|||||||
UINT WINAPI extRealizePalette(HDC hdc)
|
UINT WINAPI extRealizePalette(HDC hdc)
|
||||||
{
|
{
|
||||||
UINT ret;
|
UINT ret;
|
||||||
extern void mySetPalette(int, int, LPPALETTEENTRY);
|
extern void mySetPalette(int, int, LPPALETTEENTRY, BOOL);
|
||||||
|
|
||||||
OutTraceDW("GDI.RealizePalette: hdc=%x\n", hdc);
|
OutTraceDW("GDI.RealizePalette: hdc=%x\n", hdc);
|
||||||
if((OBJ_DC == GetObjectType(hdc)) && (dxw.dwFlags1 & EMULATESURFACE)){
|
if((OBJ_DC == GetObjectType(hdc)) && (dxw.dwFlags1 & EMULATESURFACE)){
|
||||||
PALETTEENTRY PalEntries[256];
|
PALETTEENTRY PalEntries[256];
|
||||||
UINT nEntries;
|
UINT nEntries;
|
||||||
nEntries=GetPaletteEntries(hDesktopPalette, 0, 256, PalEntries);
|
nEntries=GetPaletteEntries(hDesktopPalette, 0, 256, PalEntries);
|
||||||
mySetPalette(0, nEntries, PalEntries);
|
mySetPalette(0, nEntries, PalEntries, TRUE); // ??
|
||||||
if(IsDebug) dxw.DumpPalette(nEntries, PalEntries);
|
if(IsDebug) dxw.DumpPalette(nEntries, PalEntries);
|
||||||
ret=DD_OK;
|
ret=DD_OK;
|
||||||
}
|
}
|
||||||
@ -1868,6 +1894,36 @@ BOOL WINAPI extExtTextOutW(HDC hdc, int X, int Y, UINT fuOptions, const RECT *lp
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
COLORREF WINAPI extSetBkColor(HDC hdc, COLORREF crColor)
|
||||||
|
{
|
||||||
|
OutTrace("SetBkColor: hdc=%x color=%x\n", hdc, crColor);
|
||||||
|
if(dxw.Windowize && dxw.IsRealDesktop(WindowFromDC(hdc))) {
|
||||||
|
OutTrace("Remap desktop hdc=%x->%x\n", hdc, GetDC(dxw.GethWnd()));
|
||||||
|
hdc=GetDC(dxw.GethWnd());
|
||||||
|
}
|
||||||
|
return (*pSetBkColor)(hdc, crColor);
|
||||||
|
}
|
||||||
|
|
||||||
|
int WINAPI extSetBkMode(HDC hdc, int iBkMode)
|
||||||
|
{
|
||||||
|
OutTrace("SetBkMode: hdc=%x bkmode=%x\n", hdc, iBkMode);
|
||||||
|
if(dxw.Windowize && dxw.IsRealDesktop(WindowFromDC(hdc))) {
|
||||||
|
OutTrace("Remap desktop hdc=%x->%x\n", hdc, GetDC(dxw.GethWnd()));
|
||||||
|
hdc=GetDC(dxw.GethWnd());
|
||||||
|
}
|
||||||
|
return (*pSetBkMode)(hdc, iBkMode);
|
||||||
|
}
|
||||||
|
|
||||||
|
COLORREF WINAPI extSetTextColor(HDC hdc, COLORREF crColor)
|
||||||
|
{
|
||||||
|
OutTrace("SetTextColor: hdc=%x color=%x\n", hdc, crColor);
|
||||||
|
if(dxw.Windowize && dxw.IsRealDesktop(WindowFromDC(hdc))) {
|
||||||
|
OutTrace("Remap desktop hdc=%x->%x\n", hdc, GetDC(dxw.GethWnd()));
|
||||||
|
hdc=GetDC(dxw.GethWnd());
|
||||||
|
}
|
||||||
|
return (*pSetTextColor)(hdc, crColor);
|
||||||
|
}
|
||||||
|
|
||||||
// unhooked, since quite surprisingly all rectangles showed properly scaled already in RollerCoaster Tycoon !!
|
// unhooked, since quite surprisingly all rectangles showed properly scaled already in RollerCoaster Tycoon !!
|
||||||
DWORD WINAPI extGetRegionData(HRGN hRgn, DWORD dwCount, LPRGNDATA lpRgnData)
|
DWORD WINAPI extGetRegionData(HRGN hRgn, DWORD dwCount, LPRGNDATA lpRgnData)
|
||||||
{
|
{
|
||||||
|
22
dll/hexdump.cpp
Normal file
22
dll/hexdump.cpp
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#define _CRT_SECURE_NO_WARNINGS
|
||||||
|
#include "stdio.h"
|
||||||
|
#include "string.h"
|
||||||
|
|
||||||
|
#define MAX_HEXDUMP 512
|
||||||
|
|
||||||
|
char *hexdump(unsigned char *Buffer, int len)
|
||||||
|
{
|
||||||
|
static char sHexBuffer[3*MAX_HEXDUMP+12];
|
||||||
|
char *s;
|
||||||
|
int iMaxI;
|
||||||
|
s=sHexBuffer;
|
||||||
|
iMaxI = len;
|
||||||
|
if(iMaxI > MAX_HEXDUMP) iMaxI = MAX_HEXDUMP;
|
||||||
|
for (int i=0; i<iMaxI; i++){
|
||||||
|
sprintf(s, "%02.2X,", Buffer[i]);
|
||||||
|
s += 3;
|
||||||
|
}
|
||||||
|
*(--s)=0; // eliminate last comma
|
||||||
|
if(len > iMaxI) strcpy(s, ",...");
|
||||||
|
return sHexBuffer;
|
||||||
|
}
|
@ -58,7 +58,7 @@ static HookEntry_Type Hooks[]={
|
|||||||
{HOOK_HOT_CANDIDATE, "SystemParametersInfoA", (FARPROC)SystemParametersInfoA, (FARPROC *)&pSystemParametersInfoA, (FARPROC)extSystemParametersInfoA},
|
{HOOK_HOT_CANDIDATE, "SystemParametersInfoA", (FARPROC)SystemParametersInfoA, (FARPROC *)&pSystemParametersInfoA, (FARPROC)extSystemParametersInfoA},
|
||||||
{HOOK_HOT_CANDIDATE, "SystemParametersInfoW", (FARPROC)SystemParametersInfoW, (FARPROC *)&pSystemParametersInfoW, (FARPROC)extSystemParametersInfoW},
|
{HOOK_HOT_CANDIDATE, "SystemParametersInfoW", (FARPROC)SystemParametersInfoW, (FARPROC *)&pSystemParametersInfoW, (FARPROC)extSystemParametersInfoW},
|
||||||
//{HOOK_HOT_CANDIDATE, "GetActiveWindow", (FARPROC)NULL, (FARPROC *)&pGetActiveWindow, (FARPROC)extGetActiveWindow},
|
//{HOOK_HOT_CANDIDATE, "GetActiveWindow", (FARPROC)NULL, (FARPROC *)&pGetActiveWindow, (FARPROC)extGetActiveWindow},
|
||||||
//{HOOK_HOT_CANDIDATE, "GetForegroundWindow", (FARPROC)NULL, (FARPROC *)&pGetForegroundWindow, (FARPROC)extGetForegroundWindow},
|
//{HOOK_HOT_CANDIDATE, "GetForegroundWindow", (FARPROC)GetForegroundWindow, (FARPROC *)&pGetForegroundWindow, (FARPROC)extGetForegroundWindow},
|
||||||
//{HOOK_IAT_CANDIDATE, "GetWindowTextA", (FARPROC)GetWindowTextA, (FARPROC *)&pGetWindowTextA, (FARPROC)extGetWindowTextA},
|
//{HOOK_IAT_CANDIDATE, "GetWindowTextA", (FARPROC)GetWindowTextA, (FARPROC *)&pGetWindowTextA, (FARPROC)extGetWindowTextA},
|
||||||
{HOOK_IAT_CANDIDATE, 0, NULL, 0, 0} // terminator
|
{HOOK_IAT_CANDIDATE, 0, NULL, 0, 0} // terminator
|
||||||
};
|
};
|
||||||
@ -1054,6 +1054,7 @@ int WINAPI extMapWindowPoints(HWND hWndFrom, HWND hWndTo, LPPOINT lpPoints, UINT
|
|||||||
UINT pi;
|
UINT pi;
|
||||||
int ret;
|
int ret;
|
||||||
// a rarely used API, but responsible for a painful headache: needs hooking for "Commandos 2", "Alien Nations".
|
// a rarely used API, but responsible for a painful headache: needs hooking for "Commandos 2", "Alien Nations".
|
||||||
|
// used also in "Full Pipe" activemovie
|
||||||
|
|
||||||
OutTraceDW("MapWindowPoints: hWndFrom=%x%s hWndTo=%x%s cPoints=%d FullScreen=%x\n",
|
OutTraceDW("MapWindowPoints: hWndFrom=%x%s hWndTo=%x%s cPoints=%d FullScreen=%x\n",
|
||||||
hWndFrom, dxw.IsDesktop(hWndFrom)?"(DESKTOP)":"",
|
hWndFrom, dxw.IsDesktop(hWndFrom)?"(DESKTOP)":"",
|
||||||
@ -1070,9 +1071,14 @@ int WINAPI extMapWindowPoints(HWND hWndFrom, HWND hWndTo, LPPOINT lpPoints, UINT
|
|||||||
if(dxw.IsRealDesktop(hWndFrom)) hWndFrom=dxw.GethWnd();
|
if(dxw.IsRealDesktop(hWndFrom)) hWndFrom=dxw.GethWnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
// should scale the retcode ???
|
// should scale the retcode and every point ???
|
||||||
ret=(*pMapWindowPoints)(hWndFrom, hWndTo, lpPoints, cPoints);
|
ret=(*pMapWindowPoints)(hWndFrom, hWndTo, lpPoints, cPoints);
|
||||||
|
|
||||||
|
if(IsDebug){
|
||||||
|
OutTrace("Mapped points: ");
|
||||||
|
for(pi=0; pi<cPoints; pi++) OutTrace("(%d,%d)", lpPoints[pi].x, lpPoints[pi].y);
|
||||||
|
OutTrace("\n");
|
||||||
|
}
|
||||||
OutTraceDW("MapWindowPoints: ret=%x (%d,%d)\n", ret, (ret&0xFFFF0000)>>16, ret&0x0000FFFF);
|
OutTraceDW("MapWindowPoints: ret=%x (%d,%d)\n", ret, (ret&0xFFFF0000)>>16, ret&0x0000FFFF);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -2574,18 +2580,22 @@ HWND WINAPI extGetActiveWindow(void)
|
|||||||
{
|
{
|
||||||
HWND ret;
|
HWND ret;
|
||||||
ret=(*pGetActiveWindow)();
|
ret=(*pGetActiveWindow)();
|
||||||
OutTraceDW("GetActiveWindow: ret=%x->%x\n", ret, dxw.GethWnd());
|
if(dxw.Windowize && dxw.IsFullScreen()) {
|
||||||
//STOPPER("GetActiveWindow");
|
OutTraceDW("GetActiveWindow: ret=%x->%x\n", ret, dxw.GethWnd());
|
||||||
return dxw.GethWnd();
|
return dxw.GethWnd();
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
HWND WINAPI extGetForegroundWindow(void)
|
HWND WINAPI extGetForegroundWindow(void)
|
||||||
{
|
{
|
||||||
HWND ret;
|
HWND ret;
|
||||||
ret=(*pGetForegroundWindow)();
|
ret=(*pGetForegroundWindow)();
|
||||||
OutTraceDW("GetForegroundWindow: ret=%x->%x\n", ret, dxw.GethWnd());
|
if(dxw.Windowize && dxw.IsFullScreen()) {
|
||||||
//STOPPER("GetForegroundWindow");
|
OutTraceDW("GetForegroundWindow: ret=%x->%x\n", ret, dxw.GethWnd());
|
||||||
return dxw.GethWnd();
|
return dxw.GethWnd();
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL WINAPI extIsWindowVisible(HWND hwnd)
|
BOOL WINAPI extIsWindowVisible(HWND hwnd)
|
||||||
|
@ -63,26 +63,42 @@ END_MESSAGE_MAP()
|
|||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
// CTabProgram message handlers
|
// CTabProgram message handlers
|
||||||
|
|
||||||
|
extern void GetFolderFromPath(char *);
|
||||||
|
|
||||||
void CTabProgram::OnOpen()
|
void CTabProgram::OnOpen()
|
||||||
{
|
{
|
||||||
// TODO: Please add your control notification handler code here
|
// TODO: Please add your control notification handler code here
|
||||||
char path[MAX_PATH];
|
char path[MAX_PATH];
|
||||||
|
extern char *gInitFilePath;
|
||||||
CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));
|
CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));
|
||||||
cTarget->m_File.GetWindowText(path, MAX_PATH);
|
cTarget->m_File.GetWindowText(path, MAX_PATH);
|
||||||
|
GetPrivateProfileString("window", "exepath", ".", path, MAX_PATH, gInitFilePath);
|
||||||
CFileDialog dlg( TRUE, "*.*", path, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
|
CFileDialog dlg( TRUE, "*.*", path, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
|
||||||
"Program (*.exe)|*.exe|All Files (*.*)|*.*||", this);
|
"Program (*.exe)|*.exe|All Files (*.*)|*.*||", this);
|
||||||
if( dlg.DoModal() == IDOK) cTarget->m_File.SetWindowText(dlg.GetPathName());
|
if( dlg.DoModal() == IDOK) {
|
||||||
|
cTarget->m_File.SetWindowText(dlg.GetPathName());
|
||||||
|
strcpy(path, dlg.GetPathName());
|
||||||
|
GetFolderFromPath(path);
|
||||||
|
WritePrivateProfileString("window", "exepath", path, gInitFilePath);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CTabProgram::OnOpenLaunch()
|
void CTabProgram::OnOpenLaunch()
|
||||||
{
|
{
|
||||||
// TODO: Please add your control notification handler code here
|
// TODO: Please add your control notification handler code here
|
||||||
char path[MAX_PATH];
|
char path[MAX_PATH];
|
||||||
|
extern char *gInitFilePath;
|
||||||
CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));
|
CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));
|
||||||
cTarget->m_File.GetWindowText(path, MAX_PATH);
|
cTarget->m_File.GetWindowText(path, MAX_PATH);
|
||||||
|
GetPrivateProfileString("window", "exepath", NULL, path, MAX_PATH, gInitFilePath);
|
||||||
CFileDialog dlg( TRUE, "*.*", path, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
|
CFileDialog dlg( TRUE, "*.*", path, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
|
||||||
"Program (*.exe)|*.exe|All Files (*.*)|*.*||", this);
|
"Program (*.exe)|*.exe|All Files (*.*)|*.*||", this);
|
||||||
if( dlg.DoModal() == IDOK) cTarget->m_Launch.SetWindowText(dlg.GetPathName());
|
if( dlg.DoModal() == IDOK) {
|
||||||
|
cTarget->m_Launch.SetWindowText(dlg.GetPathName());
|
||||||
|
strcpy(path, dlg.GetPathName());
|
||||||
|
GetFolderFromPath(path);
|
||||||
|
WritePrivateProfileString("window", "exepath", path, gInitFilePath);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL CTabProgram::OnInitDialog()
|
BOOL CTabProgram::OnInitDialog()
|
||||||
|
Binary file not shown.
Binary file not shown.
@ -81,6 +81,11 @@ static char *Unescape(char *s)
|
|||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GetFolderFromPath(char *path)
|
||||||
|
{
|
||||||
|
for(char *c=&path[strlen(path)-1]; (c>path) && (*c!='\\'); c--) *c=0;
|
||||||
|
}
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
// CDxwndhostView
|
// CDxwndhostView
|
||||||
|
|
||||||
@ -869,6 +874,8 @@ void CDxwndhostView::OnDraw(CDC* pDC)
|
|||||||
ASSERT_VALID(pDoc);
|
ASSERT_VALID(pDoc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *gInitFilePath;
|
||||||
|
|
||||||
void CDxwndhostView::OnInitialUpdate()
|
void CDxwndhostView::OnInitialUpdate()
|
||||||
{
|
{
|
||||||
CListView::OnInitialUpdate();
|
CListView::OnInitialUpdate();
|
||||||
@ -905,6 +912,7 @@ void CDxwndhostView::OnInitialUpdate()
|
|||||||
GetCurrentDirectory(MAX_PATH, InitPath);
|
GetCurrentDirectory(MAX_PATH, InitPath);
|
||||||
strcat_s(InitPath, sizeof(InitPath), "\\");
|
strcat_s(InitPath, sizeof(InitPath), "\\");
|
||||||
strcat_s(InitPath, sizeof(InitPath), m_ConfigFileName);
|
strcat_s(InitPath, sizeof(InitPath), m_ConfigFileName);
|
||||||
|
gInitFilePath = InitPath;
|
||||||
listctrl.InsertColumn(0, &listcol);
|
listctrl.InsertColumn(0, &listcol);
|
||||||
|
|
||||||
for(i = 0; i < MAXTARGETS; i ++){
|
for(i = 0; i < MAXTARGETS; i ++){
|
||||||
@ -958,7 +966,7 @@ void CDxwndhostView::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult)
|
|||||||
*pResult = 0;
|
*pResult = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char ImportExportPath[4096] = {0};
|
//static char ImportExportPath[4096] = {0};
|
||||||
|
|
||||||
void CDxwndhostView::OnExport()
|
void CDxwndhostView::OnExport()
|
||||||
{
|
{
|
||||||
@ -969,12 +977,19 @@ void CDxwndhostView::OnExport()
|
|||||||
if(!listctrl.GetSelectedCount()) return;
|
if(!listctrl.GetSelectedCount()) return;
|
||||||
pos = listctrl.GetFirstSelectedItemPosition();
|
pos = listctrl.GetFirstSelectedItemPosition();
|
||||||
i = listctrl.GetNextSelectedItem(pos);
|
i = listctrl.GetNextSelectedItem(pos);
|
||||||
//path[0]=0;
|
GetPrivateProfileString("window", "exportpath", ".\\", path, MAX_PATH, InitPath);
|
||||||
strcpy_s(path, MAX_PATH, TitleMaps[i].title);
|
//strcat_s(path, MAX_PATH, "\\");
|
||||||
|
strcat_s(path, MAX_PATH, TitleMaps[i].title);
|
||||||
CFileDialog dlg( FALSE, "*.dxw", path, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
|
CFileDialog dlg( FALSE, "*.dxw", path, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
|
||||||
"dxwnd task config (*.dxw)|*.dxw|All Files (*.*)|*.*||", this);
|
"dxwnd task config (*.dxw)|*.dxw|All Files (*.*)|*.*||", this);
|
||||||
if( dlg.DoModal() == IDOK)
|
if( dlg.DoModal() == IDOK) {
|
||||||
SaveConfigItem(&TargetMaps[i], &TitleMaps[i], 0, dlg.GetPathName().GetBuffer());
|
strcpy(path, dlg.GetPathName().GetBuffer());
|
||||||
|
//MessageBox(path, "PathName", MB_OK);
|
||||||
|
SaveConfigItem(&TargetMaps[i], &TitleMaps[i], 0, path);
|
||||||
|
GetFolderFromPath(path);
|
||||||
|
//MessageBox(path, "FolderPath", MB_OK);
|
||||||
|
WritePrivateProfileString("window", "exportpath", path, InitPath);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CDxwndhostView::OnImport()
|
void CDxwndhostView::OnImport()
|
||||||
@ -982,6 +997,7 @@ void CDxwndhostView::OnImport()
|
|||||||
LV_ITEM listitem;
|
LV_ITEM listitem;
|
||||||
int i;
|
int i;
|
||||||
char path[MAX_PATH];
|
char path[MAX_PATH];
|
||||||
|
char ImportExportPath[4096] = {0};
|
||||||
for (i=0; strlen(TargetMaps[i].path) && i<MAXTARGETS; i++)
|
for (i=0; strlen(TargetMaps[i].path) && i<MAXTARGETS; i++)
|
||||||
;
|
;
|
||||||
if (i==MAXTARGETS) {
|
if (i==MAXTARGETS) {
|
||||||
@ -994,6 +1010,8 @@ void CDxwndhostView::OnImport()
|
|||||||
char folder[MAX_PATH+1];
|
char folder[MAX_PATH+1];
|
||||||
char pathname[MAX_PATH+1];
|
char pathname[MAX_PATH+1];
|
||||||
OPENFILENAME ofn = {0};
|
OPENFILENAME ofn = {0};
|
||||||
|
GetPrivateProfileString("window", "exportpath", ".", pathname, MAX_PATH, InitPath);
|
||||||
|
ofn.lpstrInitialDir = pathname;
|
||||||
ofn.lStructSize = sizeof(ofn);
|
ofn.lStructSize = sizeof(ofn);
|
||||||
ofn.lpstrFilter = "DxWnd export file\0*.dxw\0\0";
|
ofn.lpstrFilter = "DxWnd export file\0*.dxw\0\0";
|
||||||
ofn.lpstrFile = (LPSTR)ImportExportPath;
|
ofn.lpstrFile = (LPSTR)ImportExportPath;
|
||||||
@ -1012,6 +1030,8 @@ void CDxwndhostView::OnImport()
|
|||||||
listitem.iImage = SetTargetIcon(TargetMaps[i]);
|
listitem.iImage = SetTargetIcon(TargetMaps[i]);
|
||||||
listitem.pszText = TitleMaps[i].title;
|
listitem.pszText = TitleMaps[i].title;
|
||||||
listctrl.InsertItem(&listitem);
|
listctrl.InsertItem(&listitem);
|
||||||
|
GetFolderFromPath(ImportExportPath);
|
||||||
|
WritePrivateProfileString("window", "exportpath", ImportExportPath, InitPath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
@ -1019,9 +1039,10 @@ void CDxwndhostView::OnImport()
|
|||||||
char* p = ImportExportPath;
|
char* p = ImportExportPath;
|
||||||
strcpy(folder, p);
|
strcpy(folder, p);
|
||||||
strcat(folder, "\\");
|
strcat(folder, "\\");
|
||||||
|
WritePrivateProfileString("window", "exportpath", folder, InitPath);
|
||||||
p += lstrlen((LPSTR)p) + 1;
|
p += lstrlen((LPSTR)p) + 1;
|
||||||
while(*p && (i<MAXTARGETS)){
|
while(*p && (i<MAXTARGETS)){
|
||||||
// "p" - name of each files, NULL to terminate
|
// "p" - name of each file, NULL to terminate
|
||||||
if(!*p) break;
|
if(!*p) break;
|
||||||
if(i==MAXTARGETS) break;
|
if(i==MAXTARGETS) break;
|
||||||
strcpy(pathname, folder);
|
strcpy(pathname, folder);
|
||||||
@ -1367,6 +1388,17 @@ void CDxwndhostView::OnProcessKill()
|
|||||||
ClipCursor(NULL);
|
ClipCursor(NULL);
|
||||||
RevertScreenChanges(&this->InitDevMode);
|
RevertScreenChanges(&this->InitDevMode);
|
||||||
}
|
}
|
||||||
|
//GetPrivateProfileString("window", "exportpath", ".", path, MAX_PATH, InitPath);
|
||||||
|
//strcat_s(path, MAX_PATH, "\\");
|
||||||
|
//strcat_s(path, MAX_PATH, TitleMaps[i].title);
|
||||||
|
//CFileDialog dlg( FALSE, "*.dxw", path, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
|
||||||
|
// "dxwnd task config (*.dxw)|*.dxw|All Files (*.*)|*.*||", this);
|
||||||
|
//if( dlg.DoModal() == IDOK) {
|
||||||
|
// SaveConfigItem(&TargetMaps[i], &TitleMaps[i], 0, dlg.GetPathName().GetBuffer());
|
||||||
|
// WritePrivateProfileString("window", "exportpath", dlg.GetFolderPath(), InitPath);
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void CDxwndhostView::OnAdd()
|
void CDxwndhostView::OnAdd()
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user