mirror of
https://github.com/DxWnd/DxWnd.reloaded
synced 2024-12-30 09:25:35 +01:00
v2_02_31_src
Former-commit-id: e532b31652aeb08b559f61757c211a100810b42c
This commit is contained in:
parent
884ef0807b
commit
6d56f83f1f
@ -92,6 +92,7 @@
|
|||||||
#define EMULATEREGISTRY 0x00000400 // Emulate registry api to read extra keys
|
#define EMULATEREGISTRY 0x00000400 // Emulate registry api to read extra keys
|
||||||
#define CDROMDRIVETYPE 0x00000800 // Pretends that GetDriveType() always returns DRIVE_CDROM
|
#define CDROMDRIVETYPE 0x00000800 // Pretends that GetDriveType() always returns DRIVE_CDROM
|
||||||
#define NOWINDOWMOVE 0x00001000 // Do not try to update window position & size on D3D rendering
|
#define NOWINDOWMOVE 0x00001000 // Do not try to update window position & size on D3D rendering
|
||||||
|
#define DISABLEHAL 0x00002000 // Disable HAL support (IID_IDirect3DHALDevice)
|
||||||
|
|
||||||
// logging Tflags DWORD:
|
// logging Tflags DWORD:
|
||||||
#define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general
|
#define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general
|
||||||
@ -160,7 +161,7 @@ int EndHook(void);
|
|||||||
void GetDllVersion(char *);
|
void GetDllVersion(char *);
|
||||||
int GetHookStatus(DXWNDSTATUS *);
|
int GetHookStatus(DXWNDSTATUS *);
|
||||||
DXWNDSTATUS *GetHookInfo();
|
DXWNDSTATUS *GetHookInfo();
|
||||||
int HookInit(TARGETMAP *, HWND);
|
void HookInit(TARGETMAP *, HWND);
|
||||||
|
|
||||||
void *SetHook(void *, void *);
|
void *SetHook(void *, void *);
|
||||||
void SetHook(void *, void *, void **, char *);
|
void SetHook(void *, void *, void **, char *);
|
||||||
@ -189,7 +190,7 @@ LRESULT CALLBACK extWindowProc(HWND, UINT, WPARAM, LPARAM);
|
|||||||
#define IsTraceE (TRUE)
|
#define IsTraceE (TRUE)
|
||||||
#define IsDebug (dxw.dwTFlags & OUTDEBUG)
|
#define IsDebug (dxw.dwTFlags & OUTDEBUG)
|
||||||
#define IsAssertEnabled (dxw.dwTFlags & ASSERTDIALOG)
|
#define IsAssertEnabled (dxw.dwTFlags & ASSERTDIALOG)
|
||||||
#define STEP OutTrace("STEP at %s:%d\n", __MODULE__, __LINE__)
|
#define STEP OutTrace("STEP at %s:%d\n", __FILE__, __LINE__)
|
||||||
|
|
||||||
extern void WhndStackPush(HWND, WNDPROC);
|
extern void WhndStackPush(HWND, WNDPROC);
|
||||||
extern WNDPROC WhndGetWindowProc(HWND );
|
extern WNDPROC WhndGetWindowProc(HWND );
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:0df4a17760b4266a73aaf34565be1febb6bcf0d2fc0d776ca6aeb7fb6c861e28
|
oid sha256:ff5e1a04f90b69aaeac5520885d280a978746c9674a5085725d17d45593af92a
|
||||||
size 365568
|
size 378368
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:2f9e10ed36d2163eb58084363d6e218f827109487beda4962fd48c59fed8b1e8
|
oid sha256:a15a98b4e75ff8b03d04af4bf9b30445a6af7324468d3276316063fede54375a
|
||||||
size 524288
|
size 524288
|
||||||
|
731
build/dxwnd.ini
731
build/dxwnd.ini
@ -1,11 +1,11 @@
|
|||||||
[target]
|
[target]
|
||||||
title0=Carnivores
|
title0=101 Airborne Invasion
|
||||||
path0=D:\Games\Carnivores\HUNTSOFT.EXE
|
path0=D:\Games\101air\101.exe
|
||||||
module0=
|
module0=
|
||||||
opengllib0=
|
opengllib0=
|
||||||
ver0=0
|
ver0=0
|
||||||
coord0=0
|
coord0=0
|
||||||
flag0=671088674
|
flag0=134217762
|
||||||
flagg0=134217728
|
flagg0=134217728
|
||||||
flagh0=20
|
flagh0=20
|
||||||
flagi0=0
|
flagi0=0
|
||||||
@ -22,17 +22,17 @@ sizx0=800
|
|||||||
sizy0=600
|
sizy0=600
|
||||||
maxfps0=0
|
maxfps0=0
|
||||||
initts0=0
|
initts0=0
|
||||||
title1=Crazy Taxy
|
title1=688I Hunter Killer
|
||||||
path1=D:\Games\Crazy_Taxi\Crazy Taxi PC Version\crazy_taxi_pc.exe
|
path1=D:\Games\688\688I_HK.EXE
|
||||||
module1=
|
module1=
|
||||||
opengllib1=
|
opengllib1=
|
||||||
ver1=0
|
ver1=0
|
||||||
coord1=0
|
coord1=1
|
||||||
flag1=671219744
|
flag1=-938999262
|
||||||
flagg1=134217728
|
flagg1=135266304
|
||||||
flagh1=20
|
flagh1=20
|
||||||
flagi1=0
|
flagi1=0
|
||||||
tflag1=67
|
tflag1=3
|
||||||
initx1=0
|
initx1=0
|
||||||
inity1=0
|
inity1=0
|
||||||
minx1=0
|
minx1=0
|
||||||
@ -41,21 +41,21 @@ maxx1=0
|
|||||||
maxy1=0
|
maxy1=0
|
||||||
posx1=50
|
posx1=50
|
||||||
posy1=50
|
posy1=50
|
||||||
sizx1=800
|
sizx1=1200
|
||||||
sizy1=600
|
sizy1=900
|
||||||
maxfps1=0
|
maxfps1=0
|
||||||
initts1=0
|
initts1=0
|
||||||
title2=Duckman
|
title2=Abomination the Nemesis Project
|
||||||
path2=D:\Games\duckman\DUCKMAN.EXE
|
path2=D:\Games\Abomination\Abomb.exe
|
||||||
module2=
|
module2=
|
||||||
opengllib2=
|
opengllib2=
|
||||||
ver2=0
|
ver2=0
|
||||||
coord2=0
|
coord2=0
|
||||||
flag2=134217762
|
flag2=134217762
|
||||||
flagg2=134217728
|
flagg2=134217728
|
||||||
flagh2=1044
|
flagh2=20
|
||||||
flagi2=0
|
flagi2=0
|
||||||
tflag2=3
|
tflag2=67
|
||||||
initx2=0
|
initx2=0
|
||||||
inity2=0
|
inity2=0
|
||||||
minx2=0
|
minx2=0
|
||||||
@ -68,17 +68,17 @@ sizx2=800
|
|||||||
sizy2=600
|
sizy2=600
|
||||||
maxfps2=0
|
maxfps2=0
|
||||||
initts2=0
|
initts2=0
|
||||||
title3=Crazy Frog Racer
|
title3=Balls of Steel
|
||||||
path3=D:\Games\CrazyFrog\CRAZY.EXE
|
path3=D:\Games\Balls of Steel\bos.exe
|
||||||
module3=
|
module3=duke.ddp mutation.ddp
|
||||||
opengllib3=
|
opengllib3=
|
||||||
ver3=8
|
ver3=0
|
||||||
coord3=0
|
coord3=0
|
||||||
flag3=134217762
|
flag3=167772192
|
||||||
flagg3=134217729
|
flagg3=202375169
|
||||||
flagh3=20
|
flagh3=20
|
||||||
flagi3=0
|
flagi3=0
|
||||||
tflag3=64
|
tflag3=263
|
||||||
initx3=0
|
initx3=0
|
||||||
inity3=0
|
inity3=0
|
||||||
minx3=0
|
minx3=0
|
||||||
@ -91,17 +91,17 @@ sizx3=800
|
|||||||
sizy3=600
|
sizy3=600
|
||||||
maxfps3=0
|
maxfps3=0
|
||||||
initts3=0
|
initts3=0
|
||||||
title4=Dark Angael
|
title4=Barrage
|
||||||
path4=D:\Games\Dark Angael\GAME.EXE
|
path4=D:\Games\Barrage\SRC\BARRAGE.EXE
|
||||||
module4=
|
module4=
|
||||||
opengllib4=
|
opengllib4=
|
||||||
ver4=0
|
ver4=0
|
||||||
coord4=0
|
coord4=0
|
||||||
flag4=134217762
|
flag4=142606368
|
||||||
flagg4=134217728
|
flagg4=135266304
|
||||||
flagh4=20
|
flagh4=8212
|
||||||
flagi4=0
|
flagi4=0
|
||||||
tflag4=0
|
tflag4=7
|
||||||
initx4=0
|
initx4=0
|
||||||
inity4=0
|
inity4=0
|
||||||
minx4=0
|
minx4=0
|
||||||
@ -114,17 +114,17 @@ sizx4=800
|
|||||||
sizy4=600
|
sizy4=600
|
||||||
maxfps4=0
|
maxfps4=0
|
||||||
initts4=0
|
initts4=0
|
||||||
title5=Dark Colony
|
title5=Carnivores
|
||||||
path5=D:\Games\Dark Colony\DCOLONY\DC.EXE
|
path5=D:\Games\Carnivores\HUNTSOFT.EXE
|
||||||
module5=
|
module5=
|
||||||
opengllib5=
|
opengllib5=
|
||||||
ver5=0
|
ver5=0
|
||||||
coord5=0
|
coord5=0
|
||||||
flag5=134217762
|
flag5=671088674
|
||||||
flagg5=134217728
|
flagg5=135266304
|
||||||
flagh5=20
|
flagh5=20
|
||||||
flagi5=0
|
flagi5=0
|
||||||
tflag5=0
|
tflag5=64
|
||||||
initx5=0
|
initx5=0
|
||||||
inity5=0
|
inity5=0
|
||||||
minx5=0
|
minx5=0
|
||||||
@ -137,17 +137,17 @@ sizx5=800
|
|||||||
sizy5=600
|
sizy5=600
|
||||||
maxfps5=0
|
maxfps5=0
|
||||||
initts5=0
|
initts5=0
|
||||||
title6=Dark Judgement
|
title6=Crazy Frog Racer
|
||||||
path6=D:\Games\Dark Judgement\Dark Judgement.EXE
|
path6=D:\Games\CrazyFrog\CRAZY.EXE
|
||||||
module6=
|
module6=
|
||||||
opengllib6=
|
opengllib6=
|
||||||
ver6=0
|
ver6=8
|
||||||
coord6=0
|
coord6=0
|
||||||
flag6=134217762
|
flag6=134217762
|
||||||
flagg6=134217728
|
flagg6=134217729
|
||||||
flagh6=20
|
flagh6=20
|
||||||
flagi6=0
|
flagi6=0
|
||||||
tflag6=0
|
tflag6=64
|
||||||
initx6=0
|
initx6=0
|
||||||
inity6=0
|
inity6=0
|
||||||
minx6=0
|
minx6=0
|
||||||
@ -160,17 +160,17 @@ sizx6=800
|
|||||||
sizy6=600
|
sizy6=600
|
||||||
maxfps6=0
|
maxfps6=0
|
||||||
initts6=0
|
initts6=0
|
||||||
title7=Descent 3
|
title7=Crazy Taxy
|
||||||
path7=D:\Games\Descent_3\Descent 3.exe
|
path7=D:\Games\Crazy_Taxi\Crazy Taxi PC Version\crazy_taxi_pc.exe
|
||||||
module7=
|
module7=
|
||||||
opengllib7=
|
opengllib7=
|
||||||
ver7=0
|
ver7=0
|
||||||
coord7=0
|
coord7=0
|
||||||
flag7=134217760
|
flag7=671219744
|
||||||
flagg7=134348801
|
flagg7=134217728
|
||||||
flagh7=20
|
flagh7=20
|
||||||
flagi7=0
|
flagi7=0
|
||||||
tflag7=3
|
tflag7=66
|
||||||
initx7=0
|
initx7=0
|
||||||
inity7=0
|
inity7=0
|
||||||
minx7=0
|
minx7=0
|
||||||
@ -183,13 +183,13 @@ sizx7=800
|
|||||||
sizy7=600
|
sizy7=600
|
||||||
maxfps7=0
|
maxfps7=0
|
||||||
initts7=0
|
initts7=0
|
||||||
title8=Dark Vengeance
|
title8=Dark Angael
|
||||||
path8=D:\Games\dark_vengeance\dv.exe
|
path8=D:\Games\Dark Angael\GAME.EXE
|
||||||
module8=
|
module8=
|
||||||
opengllib8=
|
opengllib8=
|
||||||
ver8=0
|
ver8=0
|
||||||
coord8=0
|
coord8=0
|
||||||
flag8=142606368
|
flag8=134217762
|
||||||
flagg8=134217728
|
flagg8=134217728
|
||||||
flagh8=20
|
flagh8=20
|
||||||
flagi8=0
|
flagi8=0
|
||||||
@ -206,14 +206,14 @@ sizx8=800
|
|||||||
sizy8=600
|
sizy8=600
|
||||||
maxfps8=0
|
maxfps8=0
|
||||||
initts8=0
|
initts8=0
|
||||||
title9=Dweep
|
title9=Dark Colony
|
||||||
path9=D:\Games\dweep\Dweep.exe
|
path9=D:\Games\Dark Colony\DCOLONY\DC.EXE
|
||||||
module9=
|
module9=
|
||||||
opengllib9=
|
opengllib9=
|
||||||
ver9=0
|
ver9=0
|
||||||
coord9=0
|
coord9=0
|
||||||
flag9=134234146
|
flag9=134217762
|
||||||
flagg9=134283264
|
flagg9=134217728
|
||||||
flagh9=20
|
flagh9=20
|
||||||
flagi9=0
|
flagi9=0
|
||||||
tflag9=0
|
tflag9=0
|
||||||
@ -228,16 +228,16 @@ posy9=50
|
|||||||
sizx9=800
|
sizx9=800
|
||||||
sizy9=600
|
sizy9=600
|
||||||
maxfps9=0
|
maxfps9=0
|
||||||
initts9=2
|
initts9=0
|
||||||
title10=Eliminator
|
title10=Dark Judgement
|
||||||
path10=D:\Games\eliminat\Eliminator.exe
|
path10=D:\Games\Dark Judgement\Dark Judgement.EXE
|
||||||
module10=
|
module10=
|
||||||
opengllib10=
|
opengllib10=
|
||||||
ver10=0
|
ver10=0
|
||||||
coord10=0
|
coord10=0
|
||||||
flag10=134217760
|
flag10=134217826
|
||||||
flagg10=134217728
|
flagg10=134217728
|
||||||
flagh10=1044
|
flagh10=20
|
||||||
flagi10=0
|
flagi10=0
|
||||||
tflag10=3
|
tflag10=3
|
||||||
initx10=0
|
initx10=0
|
||||||
@ -246,46 +246,46 @@ minx10=0
|
|||||||
miny10=0
|
miny10=0
|
||||||
maxx10=0
|
maxx10=0
|
||||||
maxy10=0
|
maxy10=0
|
||||||
posx10=800
|
posx10=50
|
||||||
posy10=600
|
posy10=50
|
||||||
sizx10=400
|
sizx10=800
|
||||||
sizy10=300
|
sizy10=600
|
||||||
maxfps10=0
|
maxfps10=0
|
||||||
initts10=0
|
initts10=0
|
||||||
title11=Sims.exe
|
title11=Dark Vengeance
|
||||||
path11=D:\Games\sims\Sims.exe
|
path11=D:\Games\dark_vengeance\dv.exe
|
||||||
module11=
|
module11=
|
||||||
opengllib11=
|
opengllib11=
|
||||||
ver11=0
|
ver11=0
|
||||||
coord11=0
|
coord11=0
|
||||||
flag11=134217762
|
flag11=142606386
|
||||||
flagg11=134217728
|
flagg11=134217728
|
||||||
flagh11=1044
|
flagh11=8212
|
||||||
flagi11=0
|
flagi11=0
|
||||||
tflag11=67
|
tflag11=3
|
||||||
initx11=0
|
initx11=0
|
||||||
inity11=0
|
inity11=0
|
||||||
minx11=0
|
minx11=0
|
||||||
miny11=0
|
miny11=0
|
||||||
maxx11=0
|
maxx11=800
|
||||||
maxy11=0
|
maxy11=600
|
||||||
posx11=50
|
posx11=50
|
||||||
posy11=50
|
posy11=50
|
||||||
sizx11=800
|
sizx11=800
|
||||||
sizy11=600
|
sizy11=600
|
||||||
maxfps11=0
|
maxfps11=0
|
||||||
initts11=0
|
initts11=0
|
||||||
title12=Fighting Forces
|
title12=Descent 3
|
||||||
path12=D:\Games\Fighting Forces\FFORCE.EXE
|
path12=D:\Games\Descent_3\Descent 3.exe
|
||||||
module12=
|
module12=
|
||||||
opengllib12=
|
opengllib12=
|
||||||
ver12=0
|
ver12=0
|
||||||
coord12=0
|
coord12=0
|
||||||
flag12=134217760
|
flag12=134217760
|
||||||
flagg12=671088640
|
flagg12=134348801
|
||||||
flagh12=2068
|
flagh12=4
|
||||||
flagi12=0
|
flagi12=0
|
||||||
tflag12=515
|
tflag12=0
|
||||||
initx12=0
|
initx12=0
|
||||||
inity12=0
|
inity12=0
|
||||||
minx12=0
|
minx12=0
|
||||||
@ -298,17 +298,17 @@ sizx12=800
|
|||||||
sizy12=600
|
sizy12=600
|
||||||
maxfps12=0
|
maxfps12=0
|
||||||
initts12=0
|
initts12=0
|
||||||
title13=Final Fighter
|
title13=Descent 3 main
|
||||||
path13=D:\Games\Final Fighter\FinalFighter.exe
|
path13=D:\Games\Descent_3\main.exe
|
||||||
module13=
|
module13=
|
||||||
opengllib13=
|
opengllib13=
|
||||||
ver13=0
|
ver13=0
|
||||||
coord13=0
|
coord13=0
|
||||||
flag13=939524128
|
flag13=771891232
|
||||||
flagg13=135266305
|
flagg13=201457664
|
||||||
flagh13=20
|
flagh13=8212
|
||||||
flagi13=0
|
flagi13=0
|
||||||
tflag13=513
|
tflag13=3
|
||||||
initx13=0
|
initx13=0
|
||||||
inity13=0
|
inity13=0
|
||||||
minx13=0
|
minx13=0
|
||||||
@ -321,17 +321,17 @@ sizx13=800
|
|||||||
sizy13=600
|
sizy13=600
|
||||||
maxfps13=0
|
maxfps13=0
|
||||||
initts13=0
|
initts13=0
|
||||||
title14=Gangsters 2
|
title14=Duckman
|
||||||
path14=D:\Games\Gangsters 2\Gangsters2.exe
|
path14=D:\Games\duckman\DUCKMAN.EXE
|
||||||
module14=
|
module14=
|
||||||
opengllib14=
|
opengllib14=
|
||||||
ver14=0
|
ver14=0
|
||||||
coord14=0
|
coord14=0
|
||||||
flag14=134217762
|
flag14=402653218
|
||||||
flagg14=134217728
|
flagg14=134217728
|
||||||
flagh14=20
|
flagh14=1044
|
||||||
flagi14=0
|
flagi14=0
|
||||||
tflag14=3
|
tflag14=2
|
||||||
initx14=0
|
initx14=0
|
||||||
inity14=0
|
inity14=0
|
||||||
minx14=0
|
minx14=0
|
||||||
@ -344,15 +344,15 @@ sizx14=800
|
|||||||
sizy14=600
|
sizy14=600
|
||||||
maxfps14=0
|
maxfps14=0
|
||||||
initts14=0
|
initts14=0
|
||||||
title15=Hard Truck - Road to Victory
|
title15=Dweep
|
||||||
path15=C:\Hard Truck\HTruck.exe
|
path15=D:\Games\dweep\Dweep.exe
|
||||||
module15=
|
module15=
|
||||||
opengllib15=
|
opengllib15=
|
||||||
ver15=0
|
ver15=0
|
||||||
coord15=0
|
coord15=0
|
||||||
flag15=134217760
|
flag15=134234146
|
||||||
flagg15=134217728
|
flagg15=134283264
|
||||||
flagh15=2068
|
flagh15=20
|
||||||
flagi15=0
|
flagi15=0
|
||||||
tflag15=0
|
tflag15=0
|
||||||
initx15=0
|
initx15=0
|
||||||
@ -366,41 +366,41 @@ posy15=50
|
|||||||
sizx15=800
|
sizx15=800
|
||||||
sizy15=600
|
sizy15=600
|
||||||
maxfps15=0
|
maxfps15=0
|
||||||
initts15=0
|
initts15=2
|
||||||
title16=Final Odyssey
|
title16=Eliminator
|
||||||
path16=D:\Games\Final odyssey\FinalOdy.exe
|
path16=D:\Games\eliminat\Eliminator.exe
|
||||||
module16=
|
module16=
|
||||||
opengllib16=
|
opengllib16=
|
||||||
ver16=0
|
ver16=0
|
||||||
coord16=0
|
coord16=0
|
||||||
flag16=134217760
|
flag16=134217760
|
||||||
flagg16=134217728
|
flagg16=134217728
|
||||||
flagh16=4
|
flagh16=1044
|
||||||
flagi16=0
|
flagi16=0
|
||||||
tflag16=64
|
tflag16=3
|
||||||
initx16=0
|
initx16=0
|
||||||
inity16=0
|
inity16=0
|
||||||
minx16=0
|
minx16=0
|
||||||
miny16=0
|
miny16=0
|
||||||
maxx16=0
|
maxx16=0
|
||||||
maxy16=0
|
maxy16=0
|
||||||
posx16=50
|
posx16=800
|
||||||
posy16=50
|
posy16=600
|
||||||
sizx16=800
|
sizx16=400
|
||||||
sizy16=600
|
sizy16=300
|
||||||
maxfps16=0
|
maxfps16=0
|
||||||
initts16=0
|
initts16=0
|
||||||
title17=Gex
|
title17=EMPIRES.EXE
|
||||||
path17=D:\Games\gex\GEX.EXE
|
path17=D:\Games\Age of Empires\EMPIRES.EXE
|
||||||
module17=
|
module17=
|
||||||
opengllib17=
|
opengllib17=
|
||||||
ver17=0
|
ver17=0
|
||||||
coord17=0
|
coord17=0
|
||||||
flag17=134217761
|
flag17=134217762
|
||||||
flagg17=134217728
|
flagg17=134217728
|
||||||
flagh17=20
|
flagh17=20
|
||||||
flagi17=0
|
flagi17=0
|
||||||
tflag17=67
|
tflag17=64
|
||||||
initx17=0
|
initx17=0
|
||||||
inity17=0
|
inity17=0
|
||||||
minx17=0
|
minx17=0
|
||||||
@ -413,17 +413,17 @@ sizx17=800
|
|||||||
sizy17=600
|
sizy17=600
|
||||||
maxfps17=0
|
maxfps17=0
|
||||||
initts17=0
|
initts17=0
|
||||||
title18=Hellcopter
|
title18=EPIC40K.EXE
|
||||||
path18=D:\Games\Hellcopter\HCopter.exe
|
path18=D:\Games\war_hammer_final_liberation\EPIC40K.EXE
|
||||||
module18=
|
module18=
|
||||||
opengllib18=
|
opengllib18=
|
||||||
ver18=0
|
ver18=0
|
||||||
coord18=0
|
coord18=0
|
||||||
flag18=134217760
|
flag18=134217762
|
||||||
flagg18=134217728
|
flagg18=135266304
|
||||||
flagh18=1044
|
flagh18=20
|
||||||
flagi18=0
|
flagi18=0
|
||||||
tflag18=513
|
tflag18=3
|
||||||
initx18=0
|
initx18=0
|
||||||
inity18=0
|
inity18=0
|
||||||
minx18=0
|
minx18=0
|
||||||
@ -436,17 +436,17 @@ sizx18=800
|
|||||||
sizy18=600
|
sizy18=600
|
||||||
maxfps18=0
|
maxfps18=0
|
||||||
initts18=0
|
initts18=0
|
||||||
title19=Imperialism II
|
title19=Fable - The Lost Chapters
|
||||||
path19=D:\Games\imperialism_2\imperialism II.exe
|
path19=D:\Games\Fable - The Lost Chapters\Fable.exe
|
||||||
module19=
|
module19=
|
||||||
opengllib19=
|
opengllib19=
|
||||||
ver19=0
|
ver19=9
|
||||||
coord19=0
|
coord19=1
|
||||||
flag19=671090722
|
flag19=134217760
|
||||||
flagg19=235929600
|
flagg19=201457672
|
||||||
flagh19=20
|
flagh19=20
|
||||||
flagi19=0
|
flagi19=0
|
||||||
tflag19=3
|
tflag19=258
|
||||||
initx19=0
|
initx19=0
|
||||||
inity19=0
|
inity19=0
|
||||||
minx19=0
|
minx19=0
|
||||||
@ -455,21 +455,21 @@ maxx19=0
|
|||||||
maxy19=0
|
maxy19=0
|
||||||
posx19=50
|
posx19=50
|
||||||
posy19=50
|
posy19=50
|
||||||
sizx19=1200
|
sizx19=800
|
||||||
sizy19=900
|
sizy19=600
|
||||||
maxfps19=0
|
maxfps19=0
|
||||||
initts19=0
|
initts19=0
|
||||||
title20=Fable - The Lost Chapters
|
title20=Fighting Forces
|
||||||
path20=D:\Games\Fable - The Lost Chapters\Fable.exe
|
path20=D:\Games\Fighting Forces\FFORCE.EXE
|
||||||
module20=
|
module20=
|
||||||
opengllib20=
|
opengllib20=
|
||||||
ver20=9
|
ver20=0
|
||||||
coord20=0
|
coord20=0
|
||||||
flag20=134217760
|
flag20=134217760
|
||||||
flagg20=201457664
|
flagg20=671088640
|
||||||
flagh20=20
|
flagh20=3092
|
||||||
flagi20=0
|
flagi20=0
|
||||||
tflag20=259
|
tflag20=514
|
||||||
initx20=0
|
initx20=0
|
||||||
inity20=0
|
inity20=0
|
||||||
minx20=0
|
minx20=0
|
||||||
@ -482,8 +482,491 @@ sizx20=800
|
|||||||
sizy20=600
|
sizy20=600
|
||||||
maxfps20=0
|
maxfps20=0
|
||||||
initts20=0
|
initts20=0
|
||||||
|
title21=Final Fighter
|
||||||
|
path21=D:\Games\Final Fighter\FinalFighter.exe
|
||||||
|
module21=
|
||||||
|
opengllib21=
|
||||||
|
ver21=0
|
||||||
|
coord21=0
|
||||||
|
flag21=939524128
|
||||||
|
flagg21=135266305
|
||||||
|
flagh21=4
|
||||||
|
flagi21=0
|
||||||
|
tflag21=512
|
||||||
|
initx21=0
|
||||||
|
inity21=0
|
||||||
|
minx21=0
|
||||||
|
miny21=0
|
||||||
|
maxx21=0
|
||||||
|
maxy21=0
|
||||||
|
posx21=50
|
||||||
|
posy21=50
|
||||||
|
sizx21=800
|
||||||
|
sizy21=600
|
||||||
|
maxfps21=0
|
||||||
|
initts21=0
|
||||||
|
title22=Final Odyssey
|
||||||
|
path22=D:\Games\Final odyssey\FinalOdy.exe
|
||||||
|
module22=
|
||||||
|
opengllib22=
|
||||||
|
ver22=0
|
||||||
|
coord22=0
|
||||||
|
flag22=134217760
|
||||||
|
flagg22=134217728
|
||||||
|
flagh22=4
|
||||||
|
flagi22=0
|
||||||
|
tflag22=64
|
||||||
|
initx22=0
|
||||||
|
inity22=0
|
||||||
|
minx22=0
|
||||||
|
miny22=0
|
||||||
|
maxx22=0
|
||||||
|
maxy22=0
|
||||||
|
posx22=50
|
||||||
|
posy22=50
|
||||||
|
sizx22=800
|
||||||
|
sizy22=600
|
||||||
|
maxfps22=0
|
||||||
|
initts22=0
|
||||||
|
title23=Gangsters 2
|
||||||
|
path23=D:\Games\Gangsters 2\Gangsters2.exe
|
||||||
|
module23=
|
||||||
|
opengllib23=
|
||||||
|
ver23=0
|
||||||
|
coord23=0
|
||||||
|
flag23=134217762
|
||||||
|
flagg23=134217728
|
||||||
|
flagh23=20
|
||||||
|
flagi23=0
|
||||||
|
tflag23=2
|
||||||
|
initx23=0
|
||||||
|
inity23=0
|
||||||
|
minx23=0
|
||||||
|
miny23=0
|
||||||
|
maxx23=0
|
||||||
|
maxy23=0
|
||||||
|
posx23=50
|
||||||
|
posy23=50
|
||||||
|
sizx23=800
|
||||||
|
sizy23=600
|
||||||
|
maxfps23=0
|
||||||
|
initts23=0
|
||||||
|
title24=Gex
|
||||||
|
path24=D:\Games\gex\GEX.EXE
|
||||||
|
module24=
|
||||||
|
opengllib24=
|
||||||
|
ver24=0
|
||||||
|
coord24=0
|
||||||
|
flag24=134217761
|
||||||
|
flagg24=134217728
|
||||||
|
flagh24=20
|
||||||
|
flagi24=0
|
||||||
|
tflag24=66
|
||||||
|
initx24=0
|
||||||
|
inity24=0
|
||||||
|
minx24=0
|
||||||
|
miny24=0
|
||||||
|
maxx24=0
|
||||||
|
maxy24=0
|
||||||
|
posx24=50
|
||||||
|
posy24=50
|
||||||
|
sizx24=800
|
||||||
|
sizy24=600
|
||||||
|
maxfps24=0
|
||||||
|
initts24=0
|
||||||
|
title25=Hard Truck - Road to Victory
|
||||||
|
path25=C:\Hard Truck\HTruck.exe
|
||||||
|
module25=
|
||||||
|
opengllib25=
|
||||||
|
ver25=0
|
||||||
|
coord25=0
|
||||||
|
flag25=134217760
|
||||||
|
flagg25=134217728
|
||||||
|
flagh25=2068
|
||||||
|
flagi25=0
|
||||||
|
tflag25=0
|
||||||
|
initx25=0
|
||||||
|
inity25=0
|
||||||
|
minx25=0
|
||||||
|
miny25=0
|
||||||
|
maxx25=0
|
||||||
|
maxy25=0
|
||||||
|
posx25=50
|
||||||
|
posy25=50
|
||||||
|
sizx25=800
|
||||||
|
sizy25=600
|
||||||
|
maxfps25=0
|
||||||
|
initts25=0
|
||||||
|
title26=Hellcopter
|
||||||
|
path26=D:\Games\Hellcopter\HCopter.exe
|
||||||
|
module26=
|
||||||
|
opengllib26=
|
||||||
|
ver26=0
|
||||||
|
coord26=0
|
||||||
|
flag26=134217760
|
||||||
|
flagg26=134217728
|
||||||
|
flagh26=1044
|
||||||
|
flagi26=0
|
||||||
|
tflag26=512
|
||||||
|
initx26=0
|
||||||
|
inity26=0
|
||||||
|
minx26=0
|
||||||
|
miny26=0
|
||||||
|
maxx26=0
|
||||||
|
maxy26=0
|
||||||
|
posx26=50
|
||||||
|
posy26=50
|
||||||
|
sizx26=800
|
||||||
|
sizy26=600
|
||||||
|
maxfps26=0
|
||||||
|
initts26=0
|
||||||
|
title27=Heroes of Might & Magic 2 Gold
|
||||||
|
path27=D:\Games\heroes2gold\HEROES2W.EXE
|
||||||
|
module27=
|
||||||
|
opengllib27=
|
||||||
|
ver27=0
|
||||||
|
coord27=0
|
||||||
|
flag27=134217730
|
||||||
|
flagg27=143654912
|
||||||
|
flagh27=20
|
||||||
|
flagi27=0
|
||||||
|
tflag27=770
|
||||||
|
initx27=0
|
||||||
|
inity27=0
|
||||||
|
minx27=0
|
||||||
|
miny27=0
|
||||||
|
maxx27=0
|
||||||
|
maxy27=0
|
||||||
|
posx27=50
|
||||||
|
posy27=50
|
||||||
|
sizx27=800
|
||||||
|
sizy27=600
|
||||||
|
maxfps27=0
|
||||||
|
initts27=0
|
||||||
|
title28=Hooligans Storm over Europe
|
||||||
|
path28=D:\Games\Hooligans\Hooligans.exe
|
||||||
|
module28=
|
||||||
|
opengllib28=
|
||||||
|
ver28=0
|
||||||
|
coord28=0
|
||||||
|
flag28=134742048
|
||||||
|
flagg28=202375168
|
||||||
|
flagh28=20
|
||||||
|
flagi28=0
|
||||||
|
tflag28=259
|
||||||
|
initx28=0
|
||||||
|
inity28=0
|
||||||
|
minx28=0
|
||||||
|
miny28=0
|
||||||
|
maxx28=0
|
||||||
|
maxy28=0
|
||||||
|
posx28=50
|
||||||
|
posy28=50
|
||||||
|
sizx28=800
|
||||||
|
sizy28=600
|
||||||
|
maxfps28=0
|
||||||
|
initts28=0
|
||||||
|
title29=Imperialism
|
||||||
|
path29=D:\Games\Imperialism\Imperialism.exe
|
||||||
|
module29=
|
||||||
|
opengllib29=
|
||||||
|
ver29=0
|
||||||
|
coord29=0
|
||||||
|
flag29=671621154
|
||||||
|
flagg29=135266304
|
||||||
|
flagh29=20
|
||||||
|
flagi29=0
|
||||||
|
tflag29=3
|
||||||
|
initx29=0
|
||||||
|
inity29=0
|
||||||
|
minx29=0
|
||||||
|
miny29=0
|
||||||
|
maxx29=0
|
||||||
|
maxy29=0
|
||||||
|
posx29=50
|
||||||
|
posy29=50
|
||||||
|
sizx29=1200
|
||||||
|
sizy29=900
|
||||||
|
maxfps29=0
|
||||||
|
initts29=0
|
||||||
|
title30=Imperialism II
|
||||||
|
path30=D:\Games\imperialism_2\imperialism II.exe
|
||||||
|
module30=
|
||||||
|
opengllib30=
|
||||||
|
ver30=0
|
||||||
|
coord30=1
|
||||||
|
flag30=671096866
|
||||||
|
flagg30=470810640
|
||||||
|
flagh30=52
|
||||||
|
flagi30=0
|
||||||
|
tflag30=3
|
||||||
|
initx30=0
|
||||||
|
inity30=0
|
||||||
|
minx30=0
|
||||||
|
miny30=0
|
||||||
|
maxx30=0
|
||||||
|
maxy30=0
|
||||||
|
posx30=50
|
||||||
|
posy30=50
|
||||||
|
sizx30=800
|
||||||
|
sizy30=600
|
||||||
|
maxfps30=0
|
||||||
|
initts30=0
|
||||||
|
title31=Mechwarrior 3
|
||||||
|
path31=D:\Games\Mechwarrior 3 (full)\Mech3.exe
|
||||||
|
module31=
|
||||||
|
opengllib31=
|
||||||
|
ver31=0
|
||||||
|
coord31=0
|
||||||
|
flag31=671096866
|
||||||
|
flagg31=134217728
|
||||||
|
flagh31=20
|
||||||
|
flagi31=0
|
||||||
|
tflag31=0
|
||||||
|
initx31=0
|
||||||
|
inity31=0
|
||||||
|
minx31=0
|
||||||
|
miny31=0
|
||||||
|
maxx31=0
|
||||||
|
maxy31=0
|
||||||
|
posx31=50
|
||||||
|
posy31=50
|
||||||
|
sizx31=800
|
||||||
|
sizy31=600
|
||||||
|
maxfps31=0
|
||||||
|
initts31=0
|
||||||
|
title32=Raiden II
|
||||||
|
path32=D:\Games\raiden2\RAIDENII.EXE
|
||||||
|
module32=
|
||||||
|
opengllib32=
|
||||||
|
ver32=0
|
||||||
|
coord32=1
|
||||||
|
flag32=134217762
|
||||||
|
flagg32=134217728
|
||||||
|
flagh32=20
|
||||||
|
flagi32=0
|
||||||
|
tflag32=0
|
||||||
|
initx32=0
|
||||||
|
inity32=0
|
||||||
|
minx32=0
|
||||||
|
miny32=0
|
||||||
|
maxx32=0
|
||||||
|
maxy32=0
|
||||||
|
posx32=50
|
||||||
|
posy32=50
|
||||||
|
sizx32=800
|
||||||
|
sizy32=600
|
||||||
|
maxfps32=0
|
||||||
|
initts32=0
|
||||||
|
title33=Rapanui
|
||||||
|
path33=D:\Games\Rapanui\Rapanui.exe
|
||||||
|
module33=
|
||||||
|
opengllib33=
|
||||||
|
ver33=0
|
||||||
|
coord33=0
|
||||||
|
flag33=134217762
|
||||||
|
flagg33=134217728
|
||||||
|
flagh33=20
|
||||||
|
flagi33=0
|
||||||
|
tflag33=0
|
||||||
|
initx33=0
|
||||||
|
inity33=0
|
||||||
|
minx33=0
|
||||||
|
miny33=0
|
||||||
|
maxx33=0
|
||||||
|
maxy33=0
|
||||||
|
posx33=50
|
||||||
|
posy33=50
|
||||||
|
sizx33=800
|
||||||
|
sizy33=600
|
||||||
|
maxfps33=0
|
||||||
|
initts33=0
|
||||||
|
title34=Silent Hunter II (shell)
|
||||||
|
path34=D:\Games\Silent Hunter II\Shell\Shell.exe
|
||||||
|
module34=
|
||||||
|
opengllib34=
|
||||||
|
ver34=0
|
||||||
|
coord34=0
|
||||||
|
flag34=402653221
|
||||||
|
flagg34=135266304
|
||||||
|
flagh34=20
|
||||||
|
flagi34=0
|
||||||
|
tflag34=3
|
||||||
|
initx34=0
|
||||||
|
inity34=0
|
||||||
|
minx34=0
|
||||||
|
miny34=0
|
||||||
|
maxx34=800
|
||||||
|
maxy34=600
|
||||||
|
posx34=50
|
||||||
|
posy34=50
|
||||||
|
sizx34=800
|
||||||
|
sizy34=600
|
||||||
|
maxfps34=0
|
||||||
|
initts34=0
|
||||||
|
title35=Silent Hunter II (sim)
|
||||||
|
path35=D:\Games\Silent Hunter II\Sim\Sim.exe
|
||||||
|
module35=
|
||||||
|
opengllib35=
|
||||||
|
ver35=0
|
||||||
|
coord35=0
|
||||||
|
flag35=134217780
|
||||||
|
flagg35=134217728
|
||||||
|
flagh35=20
|
||||||
|
flagi35=0
|
||||||
|
tflag35=0
|
||||||
|
initx35=400
|
||||||
|
inity35=300
|
||||||
|
minx35=0
|
||||||
|
miny35=0
|
||||||
|
maxx35=800
|
||||||
|
maxy35=600
|
||||||
|
posx35=50
|
||||||
|
posy35=50
|
||||||
|
sizx35=800
|
||||||
|
sizy35=600
|
||||||
|
maxfps35=0
|
||||||
|
initts35=0
|
||||||
|
title36=The Sims
|
||||||
|
path36=D:\Games\sims\Sims.exe
|
||||||
|
module36=
|
||||||
|
opengllib36=
|
||||||
|
ver36=0
|
||||||
|
coord36=0
|
||||||
|
flag36=738336800
|
||||||
|
flagg36=134217728
|
||||||
|
flagh36=1044
|
||||||
|
flagi36=0
|
||||||
|
tflag36=66
|
||||||
|
initx36=0
|
||||||
|
inity36=0
|
||||||
|
minx36=0
|
||||||
|
miny36=0
|
||||||
|
maxx36=0
|
||||||
|
maxy36=0
|
||||||
|
posx36=50
|
||||||
|
posy36=50
|
||||||
|
sizx36=800
|
||||||
|
sizy36=600
|
||||||
|
maxfps36=0
|
||||||
|
initts36=0
|
||||||
|
title37=Tomb Raider - The Last Revelation
|
||||||
|
path37=D:\Games\Tomb Raider - The Last Revelation\tomb4.exe
|
||||||
|
module37=
|
||||||
|
opengllib37=
|
||||||
|
ver37=0
|
||||||
|
coord37=0
|
||||||
|
flag37=134217826
|
||||||
|
flagg37=134217728
|
||||||
|
flagh37=20
|
||||||
|
flagi37=0
|
||||||
|
tflag37=3
|
||||||
|
initx37=0
|
||||||
|
inity37=0
|
||||||
|
minx37=0
|
||||||
|
miny37=0
|
||||||
|
maxx37=0
|
||||||
|
maxy37=0
|
||||||
|
posx37=50
|
||||||
|
posy37=50
|
||||||
|
sizx37=800
|
||||||
|
sizy37=600
|
||||||
|
maxfps37=0
|
||||||
|
initts37=0
|
||||||
|
title38=TOMB2.EXE
|
||||||
|
path38=D:\Games\Tomb Raider 2\TOMB2.EXE
|
||||||
|
module38=
|
||||||
|
opengllib38=
|
||||||
|
ver38=0
|
||||||
|
coord38=0
|
||||||
|
flag38=134217760
|
||||||
|
flagg38=201326592
|
||||||
|
flagh38=2068
|
||||||
|
flagi38=0
|
||||||
|
tflag38=0
|
||||||
|
initx38=0
|
||||||
|
inity38=0
|
||||||
|
minx38=0
|
||||||
|
miny38=0
|
||||||
|
maxx38=0
|
||||||
|
maxy38=0
|
||||||
|
posx38=50
|
||||||
|
posy38=50
|
||||||
|
sizx38=800
|
||||||
|
sizy38=600
|
||||||
|
maxfps38=0
|
||||||
|
initts38=0
|
||||||
|
title39=wa.exe
|
||||||
|
path39=D:\Games\worms_arma\Worms_2_Armageddon\wa.exe
|
||||||
|
module39=
|
||||||
|
opengllib39=
|
||||||
|
ver39=0
|
||||||
|
coord39=0
|
||||||
|
flag39=713031712
|
||||||
|
flagg39=142606336
|
||||||
|
flagh39=20
|
||||||
|
flagi39=0
|
||||||
|
tflag39=3
|
||||||
|
initx39=0
|
||||||
|
inity39=0
|
||||||
|
minx39=0
|
||||||
|
miny39=0
|
||||||
|
maxx39=0
|
||||||
|
maxy39=0
|
||||||
|
posx39=50
|
||||||
|
posy39=50
|
||||||
|
sizx39=800
|
||||||
|
sizy39=600
|
||||||
|
maxfps39=0
|
||||||
|
initts39=0
|
||||||
|
title40=Western Front
|
||||||
|
path40=D:\Games\Western Front\wf.exe
|
||||||
|
module40=
|
||||||
|
opengllib40=
|
||||||
|
ver40=0
|
||||||
|
coord40=0
|
||||||
|
flag40=679477282
|
||||||
|
flagg40=134217728
|
||||||
|
flagh40=20
|
||||||
|
flagi40=0
|
||||||
|
tflag40=0
|
||||||
|
initx40=0
|
||||||
|
inity40=0
|
||||||
|
minx40=0
|
||||||
|
miny40=0
|
||||||
|
maxx40=0
|
||||||
|
maxy40=0
|
||||||
|
posx40=50
|
||||||
|
posy40=50
|
||||||
|
sizx40=800
|
||||||
|
sizy40=600
|
||||||
|
maxfps40=0
|
||||||
|
initts40=0
|
||||||
|
title41=G-Nome
|
||||||
|
path41=D:\Games\G-Nome\G-NOME.EXE
|
||||||
|
module41=
|
||||||
|
opengllib41=
|
||||||
|
ver41=0
|
||||||
|
coord41=0
|
||||||
|
flag41=713031714
|
||||||
|
flagg41=134217728
|
||||||
|
flagh41=20
|
||||||
|
flagi41=0
|
||||||
|
tflag41=3
|
||||||
|
initx41=0
|
||||||
|
inity41=0
|
||||||
|
minx41=0
|
||||||
|
miny41=0
|
||||||
|
maxx41=0
|
||||||
|
maxy41=0
|
||||||
|
posx41=50
|
||||||
|
posy41=50
|
||||||
|
sizx41=0
|
||||||
|
sizy41=0
|
||||||
|
maxfps41=0
|
||||||
|
initts41=0
|
||||||
[window]
|
[window]
|
||||||
posx=928
|
posx=908
|
||||||
posy=224
|
posy=205
|
||||||
sizx=320
|
sizx=320
|
||||||
sizy=455
|
sizy=420
|
||||||
|
@ -195,3 +195,21 @@ added CoCreateInstanceEx hook - "Final Fighter" seems to be using it, but who kn
|
|||||||
added "Don't move D3D Rendering Window" window option to make "Fable Lost Chapters" working
|
added "Don't move D3D Rendering Window" window option to make "Fable Lost Chapters" working
|
||||||
GUI:
|
GUI:
|
||||||
updated default values on new entry creation to map most-likely-to-work parameters
|
updated default values on new entry creation to map most-likely-to-work parameters
|
||||||
|
|
||||||
|
v2.02.31
|
||||||
|
CORE:
|
||||||
|
disabled annoying compilation security warnings
|
||||||
|
improved advapi32.dll hooking and logging
|
||||||
|
handling of complex primary surfaces with backbuffer surface inherited from one directdraw session to the following and with different interfaces
|
||||||
|
fixed SetCooperativeLevel handling in case of WINDOWED mode against desktop hwnd==NULL
|
||||||
|
fixed GetGDISurface in EMULATED mode
|
||||||
|
hooked gdi32 API set for Imperialism I & II and 688 Hunter Killer:GetClipBox, Polyline, PolyBezierTo, PolylineTo, PolyDraw, MoveToEx, ArcTo, LineTo, StretchDIBits, SetDIBitsToDevice, SetPixel, Ellipse, Polygon, Arc, CreateEllipticRgn, CreateEllipticRgnIndirect, CreateRectRgn, CreateRectRgnIndirect, CreatePolygonRgn, DrawTextA, DrawTextExA.
|
||||||
|
fixed gdi32.dll hooking for TextOutA, TabbedTextOutA, Rectangle, BitBlt, PatBlt, StretchBlt, CreateFont, CreateFontIndirect
|
||||||
|
improved ddraw proxy logging
|
||||||
|
added / fixed user32.dll API FrameRect, TabbedTextOutA, CloseWindow, DestroyWindow, SendMessageW
|
||||||
|
opengl: fixed glCreateContext, wglMakeCurrent to make Descent III playable in opengl video mode.
|
||||||
|
fixed DeferWindowPos hook to make Imperialism II working
|
||||||
|
fixed SM_CXVIRTUALSCREEN, SM_CYVIRTUALSCREEN properties
|
||||||
|
fixed window class logging causing program crash
|
||||||
|
GUI:
|
||||||
|
added "GDI/Scale font parameters" & "DirectX/Disable HAL support" options
|
@ -1,3 +1,5 @@
|
|||||||
|
#define _CRT_SECURE_NO_WARNINGS
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "dxwnd.h"
|
#include "dxwnd.h"
|
||||||
#include "dxwcore.hpp"
|
#include "dxwcore.hpp"
|
||||||
@ -9,6 +11,7 @@ static HookEntry_Type Hooks[]={
|
|||||||
{"RegOpenKeyExA", NULL, (FARPROC *)&pRegOpenKeyEx, (FARPROC)extRegOpenKeyEx},
|
{"RegOpenKeyExA", NULL, (FARPROC *)&pRegOpenKeyEx, (FARPROC)extRegOpenKeyEx},
|
||||||
{"RegCloseKey", NULL, (FARPROC *)&pRegCloseKey, (FARPROC)extRegCloseKey},
|
{"RegCloseKey", NULL, (FARPROC *)&pRegCloseKey, (FARPROC)extRegCloseKey},
|
||||||
{"RegQueryValueExA", NULL, (FARPROC *)&pRegQueryValueEx, (FARPROC)extRegQueryValueEx},
|
{"RegQueryValueExA", NULL, (FARPROC *)&pRegQueryValueEx, (FARPROC)extRegQueryValueEx},
|
||||||
|
{"RegCreateKeyA", NULL, (FARPROC *)&pRegCreateKey, (FARPROC)extRegCreateKey},
|
||||||
{"RegCreateKeyExA", NULL, (FARPROC *)&pRegCreateKeyEx, (FARPROC)extRegCreateKeyEx},
|
{"RegCreateKeyExA", NULL, (FARPROC *)&pRegCreateKeyEx, (FARPROC)extRegCreateKeyEx},
|
||||||
{"RegSetValueExA", NULL, (FARPROC *)&pRegSetValueEx, (FARPROC)extRegSetValueEx},
|
{"RegSetValueExA", NULL, (FARPROC *)&pRegSetValueEx, (FARPROC)extRegSetValueEx},
|
||||||
{0, NULL, 0, 0} // terminator
|
{0, NULL, 0, 0} // terminator
|
||||||
@ -65,7 +68,7 @@ LONG WINAPI extRegOpenKeyEx(
|
|||||||
|
|
||||||
if((res==ERROR_SUCCESS) || !(dxw.dwFlags3 & EMULATEREGISTRY)) return res;
|
if((res==ERROR_SUCCESS) || !(dxw.dwFlags3 & EMULATEREGISTRY)) return res;
|
||||||
|
|
||||||
*phkResult=HKEY_FAKE;
|
if(phkResult) *phkResult=HKEY_FAKE;
|
||||||
FILE *regf;
|
FILE *regf;
|
||||||
char sKey[256+1];
|
char sKey[256+1];
|
||||||
sprintf(sKey,"%s\\%s", hKey2String(hKey), lpSubKey);
|
sprintf(sKey,"%s\\%s", hKey2String(hKey), lpSubKey);
|
||||||
@ -75,8 +78,8 @@ LONG WINAPI extRegOpenKeyEx(
|
|||||||
fgets(RegBuf, 256, regf);
|
fgets(RegBuf, 256, regf);
|
||||||
while (!feof(regf)){
|
while (!feof(regf)){
|
||||||
if(RegBuf[0]=='['){
|
if(RegBuf[0]=='['){
|
||||||
if(!strncmp(&RegBuf[1],sKey,strlen(sKey)) && RegBuf[strlen(sKey)+1]==']'){
|
if((!strncmp(&RegBuf[1],sKey,strlen(sKey))) && (RegBuf[strlen(sKey)+1]==']')){
|
||||||
OutTraceD("RegOpenKeyEx: found fake Key=\"%s\" hkResult=%x\n", sKey, *phkResult);
|
OutTrace("RegOpenKeyEx: found fake Key=\"%s\" hkResult=%x\n", sKey, *phkResult);
|
||||||
fclose(regf);
|
fclose(regf);
|
||||||
return ERROR_SUCCESS;
|
return ERROR_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -110,11 +113,11 @@ LONG WINAPI extRegQueryValueEx(
|
|||||||
case REG_DWORD: OutTrace("Data=0x%x\n", *(DWORD *)lpData); break;
|
case REG_DWORD: OutTrace("Data=0x%x\n", *(DWORD *)lpData); break;
|
||||||
case REG_BINARY:
|
case REG_BINARY:
|
||||||
{
|
{
|
||||||
int i;
|
DWORD i;
|
||||||
unsigned char *p;
|
unsigned char *p;
|
||||||
p = lpData;
|
p = lpData;
|
||||||
OutTrace("Data=");
|
OutTrace("Data=%02.2X", p++);
|
||||||
for(i=0; i<*lpcbData; i++) OutTrace("%02.2X,", *p++);
|
for(i=1; i<*lpcbData; i++) OutTrace(",%02.2X", *p++);
|
||||||
OutTrace("\n");
|
OutTrace("\n");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -129,7 +132,6 @@ LONG WINAPI extRegQueryValueEx(
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
// going through here means we're in EMULATEREGISTRY mode
|
|
||||||
//if(!(dxw.dwFlags3 & EMULATEREGISTRY)) return res;
|
//if(!(dxw.dwFlags3 & EMULATEREGISTRY)) return res;
|
||||||
|
|
||||||
// try emulated registry
|
// try emulated registry
|
||||||
@ -221,10 +223,17 @@ 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 Type=%x(%s) cbData=%d\n", hKey, lpValueName, dwType, ExplainRegType(dwType), cbData);
|
OutTrace("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("Data=%x\n", *(DWORD *)lpData); break;
|
||||||
case REG_NONE: OutTrace("ValueName=\"%s\"\n", lpData); break;
|
case REG_NONE: OutTrace("Data=\"%s\"\n", lpData); break;
|
||||||
|
case REG_BINARY: {
|
||||||
|
DWORD i;
|
||||||
|
OutTrace("Data=%02.2X,", *lpData);
|
||||||
|
for(i=1; i<cbData; i++) OutTrace("%02.2X", lpData[i]);
|
||||||
|
OutTrace("\n");
|
||||||
|
};
|
||||||
|
break;
|
||||||
default: OutTrace("\n");
|
default: OutTrace("\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -236,7 +245,7 @@ LONG WINAPI extRegCreateKeyEx(HKEY hKey, LPCTSTR lpSubKey, DWORD Reserved, LPTST
|
|||||||
LPSECURITY_ATTRIBUTES lpSecurityAttributes, PHKEY phkResult, LPDWORD lpdwDisposition)
|
LPSECURITY_ATTRIBUTES lpSecurityAttributes, PHKEY phkResult, LPDWORD lpdwDisposition)
|
||||||
{
|
{
|
||||||
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;
|
||||||
if(lpdwDisposition) *lpdwDisposition=REG_OPENED_EXISTING_KEY;
|
if(lpdwDisposition) *lpdwDisposition=REG_OPENED_EXISTING_KEY;
|
||||||
return ERROR_SUCCESS;
|
return ERROR_SUCCESS;
|
||||||
@ -246,3 +255,13 @@ LONG WINAPI extRegCreateKeyEx(HKEY hKey, LPCTSTR lpSubKey, DWORD Reserved, LPTST
|
|||||||
lpSecurityAttributes, phkResult, lpdwDisposition);
|
lpSecurityAttributes, phkResult, lpdwDisposition);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LONG WINAPI extRegCreateKey(HKEY hKey, LPCTSTR lpSubKey, PHKEY phkResult)
|
||||||
|
{
|
||||||
|
OutTraceR("RegCreateKey: hKey=%x(%s) SubKey=\"%s\"\n", hKey, hKey2String(hKey), lpSubKey);
|
||||||
|
if (dxw.dwFlags3 & EMULATEREGISTRY){
|
||||||
|
*phkResult = HKEY_FAKE;
|
||||||
|
return ERROR_SUCCESS;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return (*pRegCreateKey)(hKey, lpSubKey, phkResult);
|
||||||
|
}
|
||||||
|
218
dll/ddraw.cpp
218
dll/ddraw.cpp
@ -1,6 +1,7 @@
|
|||||||
// to do: duplicate EnumSurfaces(D) handling
|
// to do: duplicate EnumSurfaces(D) handling
|
||||||
// fix Unlock duplicate hook in Judge Dredd Pinball
|
// fix Unlock duplicate hook in Judge Dredd Pinball
|
||||||
|
|
||||||
|
#define _CRT_SECURE_NO_WARNINGS
|
||||||
#define INITGUID
|
#define INITGUID
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
@ -216,12 +217,13 @@ SetEntries_Type pSetEntries;
|
|||||||
|
|
||||||
LPDIRECTDRAWSURFACE lpDDSEmu_Prim=NULL, lpDDSEmu_Back=NULL;
|
LPDIRECTDRAWSURFACE lpDDSEmu_Prim=NULL, lpDDSEmu_Back=NULL;
|
||||||
LPDIRECTDRAWSURFACE lpDDSBack=NULL;
|
LPDIRECTDRAWSURFACE lpDDSBack=NULL;
|
||||||
|
// v2.1.87: lpPrimaryDD is the DIRECTDRAW object to which the primary surface and all
|
||||||
|
// the service objects (emulated backbuffer, emulater primary, ....) are attached.
|
||||||
|
LPDIRECTDRAW lpPrimaryDD=NULL;
|
||||||
|
LPDIRECTDRAW lpBackBufferDD=NULL;
|
||||||
|
int iBakBufferVersion;
|
||||||
LPDIRECTDRAWCLIPPER lpDDC=NULL;
|
LPDIRECTDRAWCLIPPER lpDDC=NULL;
|
||||||
LPDIRECTDRAWPALETTE lpDDP=NULL;
|
LPDIRECTDRAWPALETTE lpDDP=NULL;
|
||||||
LPDIRECTDRAW lpDD=NULL;
|
|
||||||
// v2.1.87: lpServiceDD is the DIRECTDRAW object to which the primary surface and all
|
|
||||||
// the service objects (emulated backbuffer, emulater primary, ....) are attached.
|
|
||||||
LPDIRECTDRAW lpServiceDD=NULL;
|
|
||||||
DWORD PaletteEntries[256];
|
DWORD PaletteEntries[256];
|
||||||
DWORD *Palette16BPP = NULL;
|
DWORD *Palette16BPP = NULL;
|
||||||
void *EmuScreenBuffer = NULL; // to implement pitch bug fix
|
void *EmuScreenBuffer = NULL; // to implement pitch bug fix
|
||||||
@ -667,7 +669,13 @@ Unlock4_Type pUnlockMethod(LPDIRECTDRAWSURFACE lpdds)
|
|||||||
{
|
{
|
||||||
char sMsg[81];
|
char sMsg[81];
|
||||||
void * extUnlock;
|
void * extUnlock;
|
||||||
extUnlock=(void *)*(DWORD *)(*(DWORD *)lpdds + 128);
|
__try{ // v2.02.31: catch some possible exception (i.e. Abomination in EMULATION mode)
|
||||||
|
extUnlock=(void *)*(DWORD *)(*(DWORD *)lpdds + 128);
|
||||||
|
}
|
||||||
|
__except (EXCEPTION_EXECUTE_HANDLER){
|
||||||
|
OutTraceE("Exception at %d\n",__LINE__);
|
||||||
|
return (Unlock4_Type)pUnlock1;
|
||||||
|
};
|
||||||
if(extUnlock==(void *)extUnlock1) return (Unlock4_Type)pUnlock1;
|
if(extUnlock==(void *)extUnlock1) return (Unlock4_Type)pUnlock1;
|
||||||
if(extUnlock==(void *)extUnlock4) return (Unlock4_Type)pUnlock4;
|
if(extUnlock==(void *)extUnlock4) return (Unlock4_Type)pUnlock4;
|
||||||
if(extUnlock==(void *)extUnlockDir1) return (Unlock4_Type)pUnlock1;
|
if(extUnlock==(void *)extUnlockDir1) return (Unlock4_Type)pUnlock1;
|
||||||
@ -743,10 +751,10 @@ int lpddHookedVersion(LPDIRECTDRAW lpdd)
|
|||||||
__except (EXCEPTION_EXECUTE_HANDLER){
|
__except (EXCEPTION_EXECUTE_HANDLER){
|
||||||
extCreateSurface=NULL;
|
extCreateSurface=NULL;
|
||||||
};
|
};
|
||||||
if(extCreateSurface==(void *)extCreateSurface1) return 1;
|
|
||||||
if(extCreateSurface==(void *)extCreateSurface2) return 2;
|
|
||||||
if(extCreateSurface==(void *)extCreateSurface4) return 4;
|
|
||||||
if(extCreateSurface==(void *)extCreateSurface7) return 7;
|
if(extCreateSurface==(void *)extCreateSurface7) return 7;
|
||||||
|
if(extCreateSurface==(void *)extCreateSurface4) return 4;
|
||||||
|
if(extCreateSurface==(void *)extCreateSurface2) return 2;
|
||||||
|
if(extCreateSurface==(void *)extCreateSurface1) return 1;
|
||||||
sprintf_s(sMsg, 80, "lpddHookedVersion(%x) can't match %x\n", lpdd, extCreateSurface);
|
sprintf_s(sMsg, 80, "lpddHookedVersion(%x) can't match %x\n", lpdd, extCreateSurface);
|
||||||
OutTraceD(sMsg);
|
OutTraceD(sMsg);
|
||||||
if (IsAssertEnabled) MessageBox(0, sMsg, "lpddHookedVersion", MB_OK | MB_ICONEXCLAMATION);
|
if (IsAssertEnabled) MessageBox(0, sMsg, "lpddHookedVersion", MB_OK | MB_ICONEXCLAMATION);
|
||||||
@ -833,7 +841,7 @@ int Set_dwSize_From_Surface(LPDIRECTDRAWSURFACE lpdds)
|
|||||||
lpdds==lpDDSEmu_Prim ||
|
lpdds==lpDDSEmu_Prim ||
|
||||||
lpdds==lpDDSEmu_Back
|
lpdds==lpDDSEmu_Back
|
||||||
)
|
)
|
||||||
dxversion=lpddHookedVersion(lpServiceDD); // v2.1.87 fix
|
dxversion=lpddHookedVersion(lpPrimaryDD); // v2.01.87-v2.02.31 fix
|
||||||
else
|
else
|
||||||
dxversion=lpddsHookedVersion(lpdds);
|
dxversion=lpddsHookedVersion(lpdds);
|
||||||
|
|
||||||
@ -1282,10 +1290,6 @@ HRESULT WINAPI extGetCapsD(LPDIRECTDRAW lpdd, LPDDCAPS c1, LPDDCAPS c2)
|
|||||||
OutTraceD("\n");
|
OutTraceD("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
// GHO TRY
|
|
||||||
// tricky: it seems that this DD method is called using an un-hooked directdraw handle....
|
|
||||||
lpDD=lpdd;
|
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1337,8 +1341,6 @@ HRESULT WINAPI extDirectDrawCreate(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplpdd, I
|
|||||||
|
|
||||||
HookDDSession(lplpdd, dxw.dwDDVersion);
|
HookDDSession(lplpdd, dxw.dwDDVersion);
|
||||||
|
|
||||||
// added v2.1.44
|
|
||||||
lpDD = *lplpdd;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1420,8 +1422,6 @@ HRESULT WINAPI extDirectDrawCreateEx(GUID FAR *lpguid,
|
|||||||
|
|
||||||
HookDDSession(lplpdd,dxw.dwDDVersion);
|
HookDDSession(lplpdd,dxw.dwDDVersion);
|
||||||
|
|
||||||
// added v2.1.44
|
|
||||||
lpDD = *lplpdd;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1482,6 +1482,9 @@ HRESULT WINAPI extQueryInterfaceD(void *lpdd, REFIID riid, LPVOID *obp)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// some unhandled interfaces in emulation mode:
|
||||||
|
// REFIID={84e63de0-46aa-11cf-816f-0000c020156e}: IID_IDirect3DHALDevice
|
||||||
|
|
||||||
HRESULT WINAPI extQueryInterfaceS(void *lpdds, REFIID riid, LPVOID *obp)
|
HRESULT WINAPI extQueryInterfaceS(void *lpdds, REFIID riid, LPVOID *obp)
|
||||||
{
|
{
|
||||||
HRESULT res;
|
HRESULT res;
|
||||||
@ -1507,6 +1510,15 @@ HRESULT WINAPI extQueryInterfaceS(void *lpdds, REFIID riid, LPVOID *obp)
|
|||||||
case 0x06675a80:
|
case 0x06675a80:
|
||||||
dwLocalDDVersion = 7;
|
dwLocalDDVersion = 7;
|
||||||
break;
|
break;
|
||||||
|
case 0x84e63de0:
|
||||||
|
if (dxw.dwFlags3 & DISABLEHAL){ // IID_IDirect3DHALDevice - Dark Vengeance
|
||||||
|
// this is odd: this piece of code returns the very same error code returned by the actual
|
||||||
|
// QueryInterface call, but avoid a memory corruption and makes the game working....
|
||||||
|
// there must be something wrong behind it.
|
||||||
|
OutTraceD("QueryInterface: suppress IID_IDirect3DHALDevice interface res=DDERR_GENERIC\n");
|
||||||
|
return DDERR_GENERIC;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dwLocalDDVersion > dxw.dwMaxDDVersion) {
|
if (dwLocalDDVersion > dxw.dwMaxDDVersion) {
|
||||||
@ -1690,33 +1702,30 @@ void FixWindowFrame(HWND hwnd)
|
|||||||
HRESULT WINAPI extSetCooperativeLevel(void *lpdd, HWND hwnd, DWORD dwflags)
|
HRESULT WINAPI extSetCooperativeLevel(void *lpdd, HWND hwnd, DWORD dwflags)
|
||||||
{
|
{
|
||||||
HRESULT res;
|
HRESULT res;
|
||||||
HWND hDesktop;
|
|
||||||
|
|
||||||
OutTraceD("SetCooperativeLevel: hwnd=%x dwFlags=%x(%s)\n",
|
OutTraceD("SetCooperativeLevel: hwnd=%x dwFlags=%x(%s)\n",
|
||||||
hwnd, dwflags,ExplainCoopFlags(dwflags));
|
hwnd, dwflags,ExplainCoopFlags(dwflags));
|
||||||
|
|
||||||
InitDDScreenParameters((LPDIRECTDRAW)lpdd);
|
InitDDScreenParameters((LPDIRECTDRAW)lpdd);
|
||||||
|
|
||||||
// WARN: Tomb Raider 4 demo is setting cooperative level against hwnd 0 (desktop)
|
|
||||||
// so in this case better use the registered hWnd value. Same as GP500, who uses
|
|
||||||
// the desktop window handle.
|
|
||||||
// v2.1.82 fix:
|
|
||||||
hDesktop=(*pGetDesktopWindow)();
|
|
||||||
if ((hwnd==0) || (hwnd==hDesktop)) {
|
|
||||||
OutTraceD("SetCooperativeLevel: detected desktop hwnd=%x redirected to %x\n", hwnd, dxw.GethWnd());
|
|
||||||
hwnd=dxw.GethWnd();
|
|
||||||
// this fixes the blocks on "Tomb Raider IV" !!!!
|
|
||||||
if(dxw.dwFlags1 & FIXPARENTWIN) hwnd=dxw.hParentWnd;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dwflags & DDSCL_FULLSCREEN){
|
if (dwflags & DDSCL_FULLSCREEN){
|
||||||
|
// v2.01.82 fix:
|
||||||
|
// WARN: Tomb Raider 4 demo is setting cooperative level against hwnd 0 (desktop)
|
||||||
|
// so in this case better use the registered hWnd value. Same as GP500, who uses
|
||||||
|
// the desktop window handle.
|
||||||
|
// v2.02.31 fix:
|
||||||
|
// Hooligans - Storm over Europe wants to set cooperative level NORMAL to hwnd 0
|
||||||
|
// that is legitimate, but setting against desktop window gives an error code - so
|
||||||
|
// the zero hwnd redirection had to be moved within the FULLSCREEN if case.
|
||||||
|
if(dxw.IsRealDesktop(hwnd)){
|
||||||
|
OutTraceD("SetCooperativeLevel: desktop hwnd=%x -> %x\n", hwnd, dxw.GethWnd());
|
||||||
|
hwnd=dxw.GethWnd();
|
||||||
|
}
|
||||||
dxw.SetFullScreen(TRUE);
|
dxw.SetFullScreen(TRUE);
|
||||||
dwflags &= ~(DDSCL_FULLSCREEN | DDSCL_EXCLUSIVE | DDSCL_ALLOWMODEX);
|
dwflags &= ~(DDSCL_FULLSCREEN | DDSCL_EXCLUSIVE | DDSCL_ALLOWMODEX);
|
||||||
dwflags |= DDSCL_NORMAL;
|
dwflags |= DDSCL_NORMAL;
|
||||||
//res=(*pSetCooperativeLevel)(lpdd, hwnd, DDSCL_NORMAL);
|
|
||||||
res=(*pSetCooperativeLevel)(lpdd, hwnd, dwflags);
|
res=(*pSetCooperativeLevel)(lpdd, hwnd, dwflags);
|
||||||
AdjustWindowFrame(hwnd, dxw.GetScreenWidth(), dxw.GetScreenHeight());
|
AdjustWindowFrame(hwnd, dxw.GetScreenWidth(), dxw.GetScreenHeight());
|
||||||
//FixWindowFrame(hwnd); //-- incompatible with Microsoft Madness
|
|
||||||
if (dxw.dwFlags1 & FIXWINFRAME) FixWindowFrame(hwnd);
|
if (dxw.dwFlags1 & FIXWINFRAME) FixWindowFrame(hwnd);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
@ -1738,7 +1747,7 @@ HRESULT WINAPI extSetCooperativeLevel(void *lpdd, HWND hwnd, DWORD dwflags)
|
|||||||
// done, so better repeat the check here.
|
// done, so better repeat the check here.
|
||||||
|
|
||||||
if ((res==DD_OK) && (hwnd!=NULL)){
|
if ((res==DD_OK) && (hwnd!=NULL)){
|
||||||
if (hwnd==hDesktop){
|
if (hwnd==(*pGetDesktopWindow)()){
|
||||||
OutTraceE("SetCooperativeLevel: attempt to work on desktop window\n");
|
OutTraceE("SetCooperativeLevel: attempt to work on desktop window\n");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1767,12 +1776,40 @@ static char *FixSurfaceCaps(LPDDSURFACEDESC2 lpddsd)
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
case DDSD_CAPS|DDSD_WIDTH|DDSD_HEIGHT|DDSD_PIXELFORMAT:
|
case DDSD_CAPS|DDSD_WIDTH|DDSD_HEIGHT|DDSD_PIXELFORMAT:
|
||||||
// Duckman
|
switch (lpddsd->ddsCaps.dwCaps){
|
||||||
OutTrace("FixSurfaceCaps: SystemMemory OffScreen PixelFormat\n");
|
case DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY:
|
||||||
lpddsd->ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY;
|
// Duckman
|
||||||
lpddsd->ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN;
|
OutTrace("FixSurfaceCaps: SystemMemory OffScreen PixelFormat\n");
|
||||||
return SetPixFmt(lpddsd);
|
//lpddsd->ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY;
|
||||||
|
//lpddsd->ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN;
|
||||||
|
return SetPixFmt(lpddsd);
|
||||||
|
break;
|
||||||
|
case DDSCAPS_SYSTEMMEMORY|DDSCAPS_ZBUFFER:
|
||||||
|
// the Sims
|
||||||
|
OutTrace("FixSurfaceCaps: SystemMemory ZBuffer for the Sims\n");
|
||||||
|
//lpddsd->ddsCaps.dwCaps = DDSCAPS_SYSTEMMEMORY|DDSCAPS_ZBUFFER; identical ...
|
||||||
|
return "ZBUFFER";
|
||||||
|
break;
|
||||||
|
#if 0
|
||||||
|
case DDSCAPS_TEXTURE:
|
||||||
|
// Descent 3 cursors & other graphics
|
||||||
|
OutTrace("FixSurfaceCaps: Texture for Descent 3\n");
|
||||||
|
lpddsd->ddsCaps.dwCaps = DDSCAPS_TEXTURE|DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN;
|
||||||
|
SetPixFmt(lpddsd);
|
||||||
|
return "TEXTURE1";
|
||||||
|
break;
|
||||||
|
case DDSCAPS_TEXTURE|DDSCAPS_VIDEOMEMORY:
|
||||||
|
// Descent 3 cursors & other graphics
|
||||||
|
OutTrace("FixSurfaceCaps: VideoMemory Texture for Descent 3\n");
|
||||||
|
lpddsd->ddsCaps.dwCaps = DDSCAPS_TEXTURE|DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN;
|
||||||
|
SetPixFmt(lpddsd);
|
||||||
|
return "TEXTURE2";
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
break;
|
||||||
case DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH:
|
case DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH:
|
||||||
switch (lpddsd->ddsCaps.dwCaps){
|
switch (lpddsd->ddsCaps.dwCaps){
|
||||||
case DDSCAPS_OFFSCREENPLAIN|DDSCAPS_VIDEOMEMORY:
|
case DDSCAPS_OFFSCREENPLAIN|DDSCAPS_VIDEOMEMORY:
|
||||||
@ -1785,6 +1822,7 @@ static char *FixSurfaceCaps(LPDDSURFACEDESC2 lpddsd)
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1841,7 +1879,7 @@ HRESULT WINAPI extCreateSurfaceEmu(int dxversion, CreateSurface_Type pCreateSurf
|
|||||||
GetHookInfo()->Width=(short)dxw.GetScreenWidth();
|
GetHookInfo()->Width=(short)dxw.GetScreenWidth();
|
||||||
GetHookInfo()->ColorDepth=(short)dxw.VirtualPixelFormat.dwRGBBitCount;
|
GetHookInfo()->ColorDepth=(short)dxw.VirtualPixelFormat.dwRGBBitCount;
|
||||||
GetHookInfo()->DXVersion=dxversion;
|
GetHookInfo()->DXVersion=dxversion;
|
||||||
lpServiceDD = lpdd; // v2.1.87
|
lpPrimaryDD = lpdd; // v2.1.87
|
||||||
|
|
||||||
dxw.dwPrimarySurfaceCaps = ddsd.ddsCaps.dwCaps;
|
dxw.dwPrimarySurfaceCaps = ddsd.ddsCaps.dwCaps;
|
||||||
dxw.dwBackBufferCount = (ddsd.dwFlags & DDSD_BACKBUFFERCOUNT) ? ddsd.dwBackBufferCount : 0;
|
dxw.dwBackBufferCount = (ddsd.dwFlags & DDSD_BACKBUFFERCOUNT) ? ddsd.dwBackBufferCount : 0;
|
||||||
@ -1851,17 +1889,22 @@ HRESULT WINAPI extCreateSurfaceEmu(int dxversion, CreateSurface_Type pCreateSurf
|
|||||||
if (lpDDC) while(lpDDC->Release());
|
if (lpDDC) while(lpDDC->Release());
|
||||||
if (lpDDSEmu_Back) while(lpDDSEmu_Back->Release());
|
if (lpDDSEmu_Back) while(lpDDSEmu_Back->Release());
|
||||||
if (lpDDSEmu_Prim) while(lpDDSEmu_Prim->Release());
|
if (lpDDSEmu_Prim) while(lpDDSEmu_Prim->Release());
|
||||||
if (ddsd.dwFlags & DDSD_BACKBUFFERCOUNT)
|
if (ddsd.dwFlags & DDSD_BACKBUFFERCOUNT) {
|
||||||
if (lpDDSBack) while(lpDDSBack->Release());
|
if (lpDDSBack) while(lpDDSBack->Release());
|
||||||
|
lpBackBufferDD = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
lpDDC=NULL;
|
lpDDC=NULL;
|
||||||
lpDDSEmu_Back=NULL;
|
lpDDSEmu_Back=NULL;
|
||||||
lpDDSEmu_Prim=NULL;
|
lpDDSEmu_Prim=NULL;
|
||||||
if (ddsd.dwFlags & DDSD_BACKBUFFERCOUNT)
|
|
||||||
lpDDSBack=NULL;
|
|
||||||
|
|
||||||
int BBCount=1;
|
int BBCount=1;
|
||||||
if (ddsd.dwFlags & DDSD_BACKBUFFERCOUNT) BBCount=ddsd.dwBackBufferCount;
|
if (ddsd.dwFlags & DDSD_BACKBUFFERCOUNT) BBCount=ddsd.dwBackBufferCount;
|
||||||
|
if ((BBCount > 0) && (iBakBufferVersion < 4)){
|
||||||
|
lpDDSBack=NULL;
|
||||||
|
OutTraceD("CreateSurface: backbuffer cleared - BackBufferCount=%d\n", BBCount);
|
||||||
|
}
|
||||||
|
|
||||||
if (BBCount > MAXBACKBUFFERS){
|
if (BBCount > MAXBACKBUFFERS){
|
||||||
char sMsg[81];
|
char sMsg[81];
|
||||||
sprintf_s(sMsg, 80, "CreateSurface: BackBufferCount=%d\n", BBCount);
|
sprintf_s(sMsg, 80, "CreateSurface: BackBufferCount=%d\n", BBCount);
|
||||||
@ -1888,9 +1931,19 @@ HRESULT WINAPI extCreateSurfaceEmu(int dxversion, CreateSurface_Type pCreateSurf
|
|||||||
DumpSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Primary]" , __LINE__);
|
DumpSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Primary]" , __LINE__);
|
||||||
res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0);
|
res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0);
|
||||||
if(res){
|
if(res){
|
||||||
OutTraceE("CreateSurface ERROR: res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
if (res==DDERR_PRIMARYSURFACEALREADYEXISTS){
|
||||||
if(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd);
|
LPDIRECTDRAWSURFACE lpPrim;
|
||||||
return res;
|
OutTraceE("CreateSurface: CreateSurface DDERR_PRIMARYSURFACEALREADYEXISTS workaround\n");
|
||||||
|
(*pGetGDISurface)(lpPrimaryDD, &lpPrim);
|
||||||
|
while ((*pReleaseS)(lpPrim));
|
||||||
|
res = (*pCreateSurface)(lpdd, &ddsd, lplpdds, 0);
|
||||||
|
}
|
||||||
|
/* fall through */
|
||||||
|
if(res){
|
||||||
|
OutTraceE("CreateSurface ERROR: res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||||
|
if(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
lpDDSPrim = *lplpdds;
|
lpDDSPrim = *lplpdds;
|
||||||
OutTraceD("CreateSurface: created PRIMARY DDSPrim=%x\n", lpDDSPrim);
|
OutTraceD("CreateSurface: created PRIMARY DDSPrim=%x\n", lpDDSPrim);
|
||||||
@ -1922,7 +1975,10 @@ HRESULT WINAPI extCreateSurfaceEmu(int dxversion, CreateSurface_Type pCreateSurf
|
|||||||
OutTraceD("CreateSurface: created BACK DDSBack=%x\n", lpDDSBack);
|
OutTraceD("CreateSurface: created BACK DDSBack=%x\n", lpDDSBack);
|
||||||
dxw.UnmarkPrimarySurface(lpDDSBack);
|
dxw.UnmarkPrimarySurface(lpDDSBack);
|
||||||
HookDDSurfaceGeneric(&lpDDSBack, dxversion); // added !!!
|
HookDDSurfaceGeneric(&lpDDSBack, dxversion); // added !!!
|
||||||
|
lpBackBufferDD = lpdd; // v2.02.31
|
||||||
|
iBakBufferVersion=dxversion; // v2.02.31
|
||||||
}
|
}
|
||||||
|
|
||||||
FlipChainLength=BBCount;
|
FlipChainLength=BBCount;
|
||||||
// V2.1.85: tricky !!!!
|
// V2.1.85: tricky !!!!
|
||||||
// When a real backbuffer is created, it has a reference to its frontbuffer.
|
// When a real backbuffer is created, it has a reference to its frontbuffer.
|
||||||
@ -2050,7 +2106,7 @@ HRESULT WINAPI extCreateSurfaceDir(int dxversion, CreateSurface_Type pCreateSurf
|
|||||||
GetHookInfo()->DXVersion=dxversion;
|
GetHookInfo()->DXVersion=dxversion;
|
||||||
dxw.dwPrimarySurfaceCaps = ddsd.ddsCaps.dwCaps;
|
dxw.dwPrimarySurfaceCaps = ddsd.ddsCaps.dwCaps;
|
||||||
dxw.dwBackBufferCount = (ddsd.dwFlags & DDSD_BACKBUFFERCOUNT) ? ddsd.dwBackBufferCount : 0;
|
dxw.dwBackBufferCount = (ddsd.dwFlags & DDSD_BACKBUFFERCOUNT) ? ddsd.dwBackBufferCount : 0;
|
||||||
lpServiceDD = lpdd; // v2.1.87
|
lpPrimaryDD = lpdd; // v2.1.87
|
||||||
|
|
||||||
// clean up service objects
|
// clean up service objects
|
||||||
// beware of the different behaviour between older and newer directdraw releases...
|
// beware of the different behaviour between older and newer directdraw releases...
|
||||||
@ -2074,7 +2130,11 @@ HRESULT WINAPI extCreateSurfaceDir(int dxversion, CreateSurface_Type pCreateSurf
|
|||||||
|
|
||||||
int BBCount=1;
|
int BBCount=1;
|
||||||
if (ddsd.dwFlags & DDSD_BACKBUFFERCOUNT) BBCount=ddsd.dwBackBufferCount;
|
if (ddsd.dwFlags & DDSD_BACKBUFFERCOUNT) BBCount=ddsd.dwBackBufferCount;
|
||||||
if (BBCount > 0){
|
// beware: a previously allocated backbuffer should be cleared or not depending on
|
||||||
|
// the ddraw version of the backbuffer surface, not the current one!
|
||||||
|
//if(0){ // ok for Silent Hunter II
|
||||||
|
//if(1){ // ok for Dark Vengeance
|
||||||
|
if ((BBCount > 0) && (iBakBufferVersion < 4)){
|
||||||
lpDDSBack=NULL;
|
lpDDSBack=NULL;
|
||||||
OutTraceD("CreateSurface: BackBufferCount=%d\n", BBCount);
|
OutTraceD("CreateSurface: BackBufferCount=%d\n", BBCount);
|
||||||
}
|
}
|
||||||
@ -2093,6 +2153,14 @@ HRESULT WINAPI extCreateSurfaceDir(int dxversion, CreateSurface_Type pCreateSurf
|
|||||||
DumpSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Dir Primary]" , __LINE__);
|
DumpSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Dir Primary]" , __LINE__);
|
||||||
res = (*pCreateSurface)(lpdd, &ddsd, &lpDDSPrim, pu);
|
res = (*pCreateSurface)(lpdd, &ddsd, &lpDDSPrim, pu);
|
||||||
if(res){
|
if(res){
|
||||||
|
if (res==DDERR_PRIMARYSURFACEALREADYEXISTS){
|
||||||
|
LPDIRECTDRAWSURFACE lpPrim;
|
||||||
|
OutTraceE("CreateSurface: CreateSurface DDERR_PRIMARYSURFACEALREADYEXISTS workaround\n");
|
||||||
|
(*pGetGDISurface)(lpPrimaryDD, &lpPrim);
|
||||||
|
while ((*pReleaseS)(lpPrim));
|
||||||
|
res = (*pCreateSurface)(lpdd, &ddsd, &lpDDSPrim, pu);
|
||||||
|
}
|
||||||
|
/* fall through */
|
||||||
if ((dxw.dwFlags1 & SWITCHVIDEOMEMORY) && (res==DDERR_OUTOFVIDEOMEMORY)){
|
if ((dxw.dwFlags1 & SWITCHVIDEOMEMORY) && (res==DDERR_OUTOFVIDEOMEMORY)){
|
||||||
OutTraceD("CreateSurface: CreateSurface DDERR_OUTOFVIDEOMEMORY ERROR at %d, retry in SYSTEMMEMORY\n", __LINE__);
|
OutTraceD("CreateSurface: CreateSurface DDERR_OUTOFVIDEOMEMORY ERROR at %d, retry in SYSTEMMEMORY\n", __LINE__);
|
||||||
ddsd.ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY; // try ...
|
ddsd.ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY; // try ...
|
||||||
@ -2139,11 +2207,12 @@ HRESULT WINAPI extCreateSurfaceDir(int dxversion, CreateSurface_Type pCreateSurf
|
|||||||
RenewClipper(lpdd, lpDDSPrim);
|
RenewClipper(lpdd, lpDDSPrim);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
HookDDSurfacePrim(&lpDDSPrim, dxversion);
|
HookDDSurfacePrim(&lpDDSPrim, dxversion);
|
||||||
|
if(dxw.dwFlags1 & CLIPCURSOR) dxw.SetClipCursor();
|
||||||
|
|
||||||
if (!BBCount) return 0;
|
if (!BBCount) return 0;
|
||||||
FlipChainLength=BBCount;
|
FlipChainLength=BBCount;
|
||||||
|
if (lpDDSBack) return 0; // v2.02.31: if you got a previous backbuffer surface, use it!
|
||||||
|
|
||||||
ddsd.dwFlags |= DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS;
|
ddsd.dwFlags |= DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS;
|
||||||
// warning: can't create zero sized backbuffer surface !!!!
|
// warning: can't create zero sized backbuffer surface !!!!
|
||||||
@ -2187,8 +2256,9 @@ HRESULT WINAPI extCreateSurfaceDir(int dxversion, CreateSurface_Type pCreateSurf
|
|||||||
// reference to the zero count.
|
// reference to the zero count.
|
||||||
// Should this hold for EMULATED mode as well? Maybe, but Diablo crashes....
|
// Should this hold for EMULATED mode as well? Maybe, but Diablo crashes....
|
||||||
lpDDSBack->AddRef();
|
lpDDSBack->AddRef();
|
||||||
|
lpBackBufferDD = lpdd;
|
||||||
|
iBakBufferVersion=dxversion; // v2.02.31
|
||||||
|
|
||||||
if(dxw.dwFlags1 & CLIPCURSOR) dxw.SetClipCursor();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2275,7 +2345,6 @@ HRESULT WINAPI extCreateSurface(int dxversion, CreateSurface_Type pCreateSurface
|
|||||||
lpddsd->dwFlags++;
|
lpddsd->dwFlags++;
|
||||||
}
|
}
|
||||||
|
|
||||||
lpDD = lpdd;
|
|
||||||
if (dxw.dwFlags3 & SAVECAPS) ddsd=*lpddsd;
|
if (dxw.dwFlags3 & SAVECAPS) ddsd=*lpddsd;
|
||||||
|
|
||||||
if (dxw.dwFlags1 & EMULATESURFACE)
|
if (dxw.dwFlags1 & EMULATESURFACE)
|
||||||
@ -2298,6 +2367,13 @@ HRESULT WINAPI extGetAttachedSurface(int dxversion, GetAttachedSurface_Type pGet
|
|||||||
OutTraceD("GetAttachedSurface(%d): lpdds=%x%s caps=%x(%s)\n",
|
OutTraceD("GetAttachedSurface(%d): lpdds=%x%s caps=%x(%s)\n",
|
||||||
dxversion, lpdds, (IsPrim?"(PRIM)":""), lpddsc->dwCaps, ExplainDDSCaps(lpddsc->dwCaps));
|
dxversion, lpdds, (IsPrim?"(PRIM)":""), lpddsc->dwCaps, ExplainDDSCaps(lpddsc->dwCaps));
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
if(0 && (lpddsc->dwCaps & DDSCAPS_MIPMAP)){
|
||||||
|
OutTraceD("GetAttachedSurface: emulate MIPMAP capability\n");
|
||||||
|
lpddsc->dwCaps &= ~DDSCAPS_MIPMAP;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// if not primary, just proxy the method
|
// if not primary, just proxy the method
|
||||||
|
|
||||||
// v2.1.81: fix to make "Silver" working: if the primary surface was created with
|
// v2.1.81: fix to make "Silver" working: if the primary surface was created with
|
||||||
@ -2397,7 +2473,7 @@ static void BlitTrace(char *label, LPRECT lps, LPRECT lpd, int line)
|
|||||||
OutTrace(" dest=(%d,%d)-(%d,%d)",lpd->left, lpd->top, lpd->right, lpd->bottom);
|
OutTrace(" dest=(%d,%d)-(%d,%d)",lpd->left, lpd->top, lpd->right, lpd->bottom);
|
||||||
else
|
else
|
||||||
OutTrace(" dest=(NULL)");
|
OutTrace(" dest=(NULL)");
|
||||||
OutTrace(" at %d\n", __LINE__);
|
OutTrace(" at %d\n", line);
|
||||||
ReleaseMutex(hTraceMutex);
|
ReleaseMutex(hTraceMutex);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -2452,7 +2528,7 @@ HRESULT WINAPI sBlt(char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define FIXBIGGERRECT 1
|
#define FIXBIGGERRECT 1
|
||||||
#ifdef FIXBIGGERRECT
|
#if FIXBIGGERRECT
|
||||||
if(ToPrim && lpdestrect){
|
if(ToPrim && lpdestrect){
|
||||||
if((DWORD)lpdestrect->bottom > dxw.GetScreenHeight()) lpdestrect->bottom = dxw.GetScreenHeight();
|
if((DWORD)lpdestrect->bottom > dxw.GetScreenHeight()) lpdestrect->bottom = dxw.GetScreenHeight();
|
||||||
if((DWORD)lpdestrect->right > dxw.GetScreenWidth()) lpdestrect->right = dxw.GetScreenWidth();
|
if((DWORD)lpdestrect->right > dxw.GetScreenWidth()) lpdestrect->right = dxw.GetScreenWidth();
|
||||||
@ -2542,7 +2618,7 @@ HRESULT WINAPI sBlt(char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect,
|
|||||||
// Blit to primary surface
|
// Blit to primary surface
|
||||||
|
|
||||||
if(dxw.HandleFPS()) return DD_OK;
|
if(dxw.HandleFPS()) return DD_OK;
|
||||||
|
|
||||||
destrect=dxw.MapWindowRect(lpdestrect);
|
destrect=dxw.MapWindowRect(lpdestrect);
|
||||||
|
|
||||||
if(!(dxw.dwFlags1 & (EMULATESURFACE|EMULATEBUFFER))){
|
if(!(dxw.dwFlags1 & (EMULATESURFACE|EMULATEBUFFER))){
|
||||||
@ -2649,7 +2725,7 @@ HRESULT WINAPI sBlt(char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect,
|
|||||||
if (IsDebug) BlitTrace("BACK2PRIM", &emurect, &destrect, __LINE__);
|
if (IsDebug) BlitTrace("BACK2PRIM", &emurect, &destrect, __LINE__);
|
||||||
res=(*pBlt)(lpDDSEmu_Prim, &destrect, lpDDSSource, &emurect, DDBLT_WAIT, 0);
|
res=(*pBlt)(lpDDSEmu_Prim, &destrect, lpDDSSource, &emurect, DDBLT_WAIT, 0);
|
||||||
if (res==DDERR_NOCLIPLIST){
|
if (res==DDERR_NOCLIPLIST){
|
||||||
RenewClipper(lpDD, lpDDSEmu_Prim);
|
RenewClipper(lpPrimaryDD, lpDDSEmu_Prim);
|
||||||
if (IsDebug) BlitTrace("NOCLIP", &emurect, &destrect, __LINE__);
|
if (IsDebug) BlitTrace("NOCLIP", &emurect, &destrect, __LINE__);
|
||||||
res=(*pBlt)(lpDDSEmu_Prim, &destrect, lpDDSSource, &emurect, DDBLT_WAIT, 0);
|
res=(*pBlt)(lpDDSEmu_Prim, &destrect, lpDDSSource, &emurect, DDBLT_WAIT, 0);
|
||||||
}
|
}
|
||||||
@ -2707,8 +2783,7 @@ HRESULT WINAPI extFlip(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWSURFACE lpddssrc,
|
|||||||
// emulation to primary surface Flip - you can't flip to window surfaces,
|
// emulation to primary surface Flip - you can't flip to window surfaces,
|
||||||
// so you have to replace it with Blt operations.
|
// so you have to replace it with Blt operations.
|
||||||
|
|
||||||
//lpdds->GetDDInterface(lpDD); from IDirectDrawSurface2 only
|
if((dwflags & DDFLIP_WAIT) || (dxw.dwFlags1 & SAVELOAD)) lpPrimaryDD->WaitForVerticalBlank(DDWAITVB_BLOCKEND , 0);
|
||||||
if((dwflags & DDFLIP_WAIT) || (dxw.dwFlags1 & SAVELOAD)) lpDD->WaitForVerticalBlank(DDWAITVB_BLOCKEND , 0);
|
|
||||||
|
|
||||||
if(lpddssrc){
|
if(lpddssrc){
|
||||||
//res=lpdds->Blt(0, lpddssrc, 0, DDBLT_WAIT, 0);
|
//res=lpdds->Blt(0, lpddssrc, 0, DDBLT_WAIT, 0);
|
||||||
@ -3015,7 +3090,7 @@ HRESULT WINAPI extLockDir(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDIRECTDRAW
|
|||||||
|
|
||||||
// this hooker operates on
|
// this hooker operates on
|
||||||
// Beware!!! for strange reason, the function gets hooked to ANY surface, also non primary ones!!!
|
// Beware!!! for strange reason, the function gets hooked to ANY surface, also non primary ones!!!
|
||||||
// to find out whether it is the primary or not, using lpdds==lpDD->GetGDISurface(&lpDDSPrim);
|
// to find out whether it is the primary or not, using lpdds==lpPrimaryDD->GetGDISurface(&lpDDSPrim);
|
||||||
|
|
||||||
if(IsTraceD){
|
if(IsTraceD){
|
||||||
OutTrace("Lock: lpdds=%x flags=%x(%s) lpdds2=%x",
|
OutTrace("Lock: lpdds=%x flags=%x(%s) lpdds2=%x",
|
||||||
@ -3026,7 +3101,7 @@ HRESULT WINAPI extLockDir(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDIRECTDRAW
|
|||||||
OutTrace(" rect=(NULL)\n");
|
OutTrace(" rect=(NULL)\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
(*pGetGDISurface)(lpDD, &lpDDSPrim);
|
(*pGetGDISurface)(lpPrimaryDD, &lpDDSPrim);
|
||||||
if(lpdds==lpDDSPrim){
|
if(lpdds==lpDDSPrim){
|
||||||
if(dxw.dwFlags1 & LOCKEDSURFACE){
|
if(dxw.dwFlags1 & LOCKEDSURFACE){
|
||||||
DDSURFACEDESC2 ddsd;
|
DDSURFACEDESC2 ddsd;
|
||||||
@ -3040,8 +3115,7 @@ HRESULT WINAPI extLockDir(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDIRECTDRAW
|
|||||||
ddsd.ddsCaps.dwCaps = 0;
|
ddsd.ddsCaps.dwCaps = 0;
|
||||||
//if (SurfaceDescrSize(lpdds)==sizeof(DDSURFACEDESC2)) ddsd.ddsCaps.dwCaps |= DDSCAPS_OFFSCREENPLAIN;
|
//if (SurfaceDescrSize(lpdds)==sizeof(DDSURFACEDESC2)) ddsd.ddsCaps.dwCaps |= DDSCAPS_OFFSCREENPLAIN;
|
||||||
DumpSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Dir FixBuf]" , __LINE__);
|
DumpSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Dir FixBuf]" , __LINE__);
|
||||||
//res=(*pCreateSurfaceMethod(lpdds))(lpDD, &ddsd, (LPDIRECTDRAWSURFACE *)&lpDDSBuffer, 0);
|
res=(*pCreateSurface1)(lpPrimaryDD, (DDSURFACEDESC *)&ddsd, (LPDIRECTDRAWSURFACE *)&lpDDSBuffer, 0);
|
||||||
res=(*pCreateSurface1)(lpDD, (DDSURFACEDESC *)&ddsd, (LPDIRECTDRAWSURFACE *)&lpDDSBuffer, 0);
|
|
||||||
if(res){
|
if(res){
|
||||||
OutTraceE("CreateSurface: ERROR on DDSBuffer res=%x(%s) at %d\n",res, ExplainDDError(res), __LINE__);
|
OutTraceE("CreateSurface: ERROR on DDSBuffer res=%x(%s) at %d\n",res, ExplainDDError(res), __LINE__);
|
||||||
return res;
|
return res;
|
||||||
@ -3141,7 +3215,7 @@ HRESULT WINAPI extUnlockDir(int dxversion, Unlock4_Type pUnlock, LPDIRECTDRAWSUR
|
|||||||
OutTrace("lpvoid=%x\n", lprect);
|
OutTrace("lpvoid=%x\n", lprect);
|
||||||
}
|
}
|
||||||
|
|
||||||
(*pGetGDISurface)(lpDD, &lpDDSPrim);
|
(*pGetGDISurface)(lpPrimaryDD, &lpDDSPrim);
|
||||||
if((lpdds==lpDDSPrim) && (dxw.dwFlags1 & LOCKEDSURFACE)){
|
if((lpdds==lpDDSPrim) && (dxw.dwFlags1 & LOCKEDSURFACE)){
|
||||||
RECT client;
|
RECT client;
|
||||||
POINT upleft={0,0};
|
POINT upleft={0,0};
|
||||||
@ -3195,7 +3269,7 @@ HRESULT WINAPI extGetDC(LPDIRECTDRAWSURFACE lpdds, HDC FAR *pHDC)
|
|||||||
if(lpDDP==NULL){
|
if(lpDDP==NULL){
|
||||||
// should link here to the GDI palette? See Hyperblade....
|
// should link here to the GDI palette? See Hyperblade....
|
||||||
dxw.palNumEntries=256;
|
dxw.palNumEntries=256;
|
||||||
res=(*pCreatePalette)(lpDD, DDPCAPS_ALLOW256|DDPCAPS_8BIT|DDPCAPS_INITIALIZE, dxw.palPalEntry, &lpDDP, NULL);
|
res=(*pCreatePalette)(lpPrimaryDD, DDPCAPS_ALLOW256|DDPCAPS_8BIT|DDPCAPS_INITIALIZE, dxw.palPalEntry, &lpDDP, NULL);
|
||||||
if (res) {
|
if (res) {
|
||||||
OutTraceE("GetDC: CreatePalette ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
OutTraceE("GetDC: CreatePalette ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||||
return res;
|
return res;
|
||||||
@ -3244,6 +3318,14 @@ HRESULT WINAPI extFlipToGDISurface(LPDIRECTDRAW lpdd)
|
|||||||
HRESULT WINAPI extGetGDISurface(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w)
|
HRESULT WINAPI extGetGDISurface(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w)
|
||||||
{
|
{
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
|
// v2.02.31:
|
||||||
|
// in EMULATED mode, should not return the actual ddraw primary surface, but the virtual one.
|
||||||
|
if(dxw.dwFlags1 & EMULATESURFACE){
|
||||||
|
*w=dxw.GetPrimarySurface();
|
||||||
|
return DD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
res=(*pGetGDISurface)(lpdd, w);
|
res=(*pGetGDISurface)(lpdd, w);
|
||||||
if (res) {
|
if (res) {
|
||||||
OutTraceE("GetGDISurface: ERROR lpdd=%x res=%x(%s)\n", lpdd, res, ExplainDDError(res));
|
OutTraceE("GetGDISurface: ERROR lpdd=%x res=%x(%s)\n", lpdd, res, ExplainDDError(res));
|
||||||
@ -3599,6 +3681,7 @@ HRESULT WINAPI extAddAttachedSurface(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWSURF
|
|||||||
|
|
||||||
IsPrim=dxw.IsAPrimarySurface(lpdds);
|
IsPrim=dxw.IsAPrimarySurface(lpdds);
|
||||||
OutTraceD("AddAttachedSurface: lpdds=%x%s lpddsadd=%x\n", lpdds, IsPrim?"(PRIM)":"", lpddsadd);
|
OutTraceD("AddAttachedSurface: lpdds=%x%s lpddsadd=%x\n", lpdds, IsPrim?"(PRIM)":"", lpddsadd);
|
||||||
|
//if(!lpddsadd) return DDERR_CANNOTATTACHSURFACE; // to avoid a crash...
|
||||||
res=(*pAddAttachedSurface)(lpdds, lpddsadd);
|
res=(*pAddAttachedSurface)(lpdds, lpddsadd);
|
||||||
if (res) {
|
if (res) {
|
||||||
HRESULT sdres;
|
HRESULT sdres;
|
||||||
@ -3717,7 +3800,7 @@ ULONG WINAPI extReleaseD(LPDIRECTDRAW lpdd)
|
|||||||
BOOL IsClosed;
|
BOOL IsClosed;
|
||||||
|
|
||||||
dxversion=lpddHookedVersion(lpdd); // must be called BEFORE releasing the session!!
|
dxversion=lpddHookedVersion(lpdd); // must be called BEFORE releasing the session!!
|
||||||
OutTraceD("Release(D): lpdd=%x\n", lpdd);
|
OutTraceD("Release(D): lpdd=%x dxversion=%d\n", lpdd, dxversion);
|
||||||
|
|
||||||
IsClosed=0;
|
IsClosed=0;
|
||||||
__try{
|
__try{
|
||||||
@ -3733,7 +3816,7 @@ ULONG WINAPI extReleaseD(LPDIRECTDRAW lpdd)
|
|||||||
|
|
||||||
ref=IsClosed?0:(*pReleaseD)(lpdd);
|
ref=IsClosed?0:(*pReleaseD)(lpdd);
|
||||||
|
|
||||||
if (lpdd == lpServiceDD) { // v2.1.87: fix for Dungeon Keeper II
|
if (lpdd == lpPrimaryDD) { // v2.1.87: fix for Dungeon Keeper II
|
||||||
OutTraceD("Release(D): service lpdd=%x version=%d\n", lpdd, dxversion);
|
OutTraceD("Release(D): service lpdd=%x version=%d\n", lpdd, dxversion);
|
||||||
if((dxversion<4) && (ref==0)){
|
if((dxversion<4) && (ref==0)){
|
||||||
// directdraw old versions automatically free all linked objects when the parent session is closed.
|
// directdraw old versions automatically free all linked objects when the parent session is closed.
|
||||||
@ -3741,9 +3824,12 @@ ULONG WINAPI extReleaseD(LPDIRECTDRAW lpdd)
|
|||||||
lpDDSEmu_Prim=NULL;
|
lpDDSEmu_Prim=NULL;
|
||||||
lpDDSEmu_Back=NULL;
|
lpDDSEmu_Back=NULL;
|
||||||
lpDDC=NULL;
|
lpDDC=NULL;
|
||||||
lpDDSBack=NULL;
|
|
||||||
lpDDP=NULL;
|
lpDDP=NULL;
|
||||||
lpServiceDD=NULL; // v2.02.11
|
lpPrimaryDD=NULL; // v2.02.31
|
||||||
|
if(lpBackBufferDD==lpdd){
|
||||||
|
lpBackBufferDD=NULL;
|
||||||
|
lpDDSBack=NULL; // beware: Silent Hunter II seems to require the backbuffer ....
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#define DIRECTINPUT_VERSION 0x800
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <dinput.h>
|
#include <dinput.h>
|
||||||
#include "dxwnd.h"
|
#include "dxwnd.h"
|
||||||
|
@ -1211,3 +1211,14 @@ char *ExplainRegType(DWORD c)
|
|||||||
return "???";
|
return "???";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *ExplainDCType(DWORD c)
|
||||||
|
{
|
||||||
|
char *Captions[GDI_OBJ_LAST+1]={
|
||||||
|
"NULL", "OBJ_PEN", "OBJ_BRUSH", "OBJ_DC",
|
||||||
|
"OBJ_METADC", "OBJ_PAL", "OBJ_FONT", "OBJ_BITMAP",
|
||||||
|
"OBJ_REGION", "OBJ_METAFILE", "OBJ_MEMDC", "OBJ_EXTPEN",
|
||||||
|
"OBJ_ENHMETADC", "OBJ_ENHMETAFILE", "OBJ_COLORSPACE"};
|
||||||
|
|
||||||
|
if (c>=0 && c<=GDI_OBJ_LAST) return Captions[c];
|
||||||
|
return "???";
|
||||||
|
}
|
||||||
|
@ -33,3 +33,4 @@ extern char *ExplainDevModeFields(DWORD);
|
|||||||
extern char *ExplainMCICommands(DWORD);
|
extern char *ExplainMCICommands(DWORD);
|
||||||
extern char *ExplainMCIFlags(DWORD, DWORD);
|
extern char *ExplainMCIFlags(DWORD, DWORD);
|
||||||
extern char *ExplainRegType(DWORD);
|
extern char *ExplainRegType(DWORD);
|
||||||
|
extern char *ExplainDCType(DWORD);
|
||||||
|
@ -57,7 +57,7 @@ static char *Flag3Names[32]={
|
|||||||
"FORCEHOOKOPENGL", "MARKBLIT", "HOOKDLLS", "SUPPRESSD3DEXT",
|
"FORCEHOOKOPENGL", "MARKBLIT", "HOOKDLLS", "SUPPRESSD3DEXT",
|
||||||
"HOOKENABLED", "FIXD3DFRAME", "FORCE16BPP", "BLACKWHITE",
|
"HOOKENABLED", "FIXD3DFRAME", "FORCE16BPP", "BLACKWHITE",
|
||||||
"SAVECAPS", "SINGLEPROCAFFINITY", "EMULATEREGISTRY", "CDROMDRIVETYPE",
|
"SAVECAPS", "SINGLEPROCAFFINITY", "EMULATEREGISTRY", "CDROMDRIVETYPE",
|
||||||
"Flag3:13", "Flag3:14", "Flag3:15", "Flag3:16",
|
"NOWINDOWMOVE", "Flag3:14", "Flag3:15", "Flag3:16",
|
||||||
"", "", "", "",
|
"", "", "", "",
|
||||||
"", "", "", "",
|
"", "", "", "",
|
||||||
"", "", "", "",
|
"", "", "", "",
|
||||||
@ -924,8 +924,10 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WM_ERASEBKGND:
|
case WM_ERASEBKGND:
|
||||||
OutTraceD("WindowProc: WM_ERASEBKGND(%x,%x) - suppressed\n", wparam, lparam);
|
if(dxw.IsRealDesktop(hwnd)){
|
||||||
return 1; // 1 == OK, erased
|
OutTraceD("WindowProc: WM_ERASEBKGND(%x,%x) - suppressed\n", wparam, lparam);
|
||||||
|
return 1; // 1 == OK, erased
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case WM_DISPLAYCHANGE:
|
case WM_DISPLAYCHANGE:
|
||||||
if ((dxw.dwFlags1 & LOCKWINPOS) && dxw.IsFullScreen()){
|
if ((dxw.dwFlags1 & LOCKWINPOS) && dxw.IsFullScreen()){
|
||||||
@ -1126,7 +1128,7 @@ static void RecoverScreenMode()
|
|||||||
DEVMODE InitDevMode;
|
DEVMODE InitDevMode;
|
||||||
BOOL res;
|
BOOL res;
|
||||||
EnumDisplaySettings(NULL, ENUM_REGISTRY_SETTINGS, &InitDevMode);
|
EnumDisplaySettings(NULL, ENUM_REGISTRY_SETTINGS, &InitDevMode);
|
||||||
OutTraceD("ChangeDisplaySettings: RECOVER wxh=(%dx%d) BitsPerPel=%d\n",
|
OutTraceD("ChangeDisplaySettings: RECOVER WxH=(%dx%d) BitsPerPel=%d\n",
|
||||||
InitDevMode.dmPelsWidth, InitDevMode.dmPelsHeight, InitDevMode.dmBitsPerPel);
|
InitDevMode.dmPelsWidth, InitDevMode.dmPelsHeight, InitDevMode.dmBitsPerPel);
|
||||||
InitDevMode.dmFields |= DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
|
InitDevMode.dmFields |= DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
|
||||||
res=(*pChangeDisplaySettings)(&InitDevMode, 0);
|
res=(*pChangeDisplaySettings)(&InitDevMode, 0);
|
||||||
@ -1306,10 +1308,8 @@ void SetSingleProcessAffinity(void)
|
|||||||
OutTraceE("SetProcessAffinityMask: ERROR err=%d\n", GetLastError());
|
OutTraceE("SetProcessAffinityMask: ERROR err=%d\n", GetLastError());
|
||||||
}
|
}
|
||||||
|
|
||||||
int HookInit(TARGETMAP *target, HWND hwnd)
|
void HookInit(TARGETMAP *target, HWND hwnd)
|
||||||
{
|
{
|
||||||
BOOL res;
|
|
||||||
WINDOWPOS wp;
|
|
||||||
HMODULE base;
|
HMODULE base;
|
||||||
char *sModule;
|
char *sModule;
|
||||||
char sModuleBuf[60+1];
|
char sModuleBuf[60+1];
|
||||||
@ -1320,16 +1320,24 @@ int HookInit(TARGETMAP *target, HWND hwnd)
|
|||||||
|
|
||||||
dxw.InitTarget(target);
|
dxw.InitTarget(target);
|
||||||
|
|
||||||
// v2.1.75: is it correct to set hWnd here?
|
if(hwnd){ // v2/02.32: skip this when in code injection mode.
|
||||||
dxw.SethWnd(hwnd);
|
// v2.1.75: is it correct to set hWnd here?
|
||||||
dxw.hParentWnd=GetParent(hwnd);
|
//dxw.SethWnd(hwnd);
|
||||||
dxw.hChildWnd=hwnd;
|
dxw.hParentWnd=GetParent(hwnd);
|
||||||
|
dxw.hChildWnd=hwnd;
|
||||||
|
// v2.02.31: set main win either this one or the parent!
|
||||||
|
dxw.SethWnd((dxw.dwFlags1 & FIXPARENTWIN) ? GetParent(hwnd) : hwnd);
|
||||||
|
}
|
||||||
|
|
||||||
OutTraceD("HookInit: path=\"%s\" module=\"%s\" dxversion=%s pos=(%d,%d) size=(%d,%d) hWnd=%x dxw.hParentWnd=%x desktop=%x\n",
|
if(IsTraceD){
|
||||||
target->path, target->module, dxversions[dxw.dwTargetDDVersion],
|
OutTrace("HookInit: path=\"%s\" module=\"%s\" dxversion=%s pos=(%d,%d) size=(%d,%d)",
|
||||||
target->posx, target->posy, target->sizx, target->sizy,
|
target->path, target->module, dxversions[dxw.dwTargetDDVersion],
|
||||||
hwnd, dxw.hParentWnd, GetDesktopWindow());
|
target->posx, target->posy, target->sizx, target->sizy);
|
||||||
if (IsDebug){
|
if(hwnd) OutTrace(" hWnd=%x dxw.hParentWnd=%x desktop=%x\n", hwnd, dxw.hParentWnd, GetDesktopWindow());
|
||||||
|
else OutTrace("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hwnd && IsDebug){
|
||||||
DWORD dwStyle, dwExStyle;
|
DWORD dwStyle, dwExStyle;
|
||||||
dwStyle=GetWindowLong(dxw.GethWnd(), GWL_STYLE);
|
dwStyle=GetWindowLong(dxw.GethWnd(), GWL_STYLE);
|
||||||
dwExStyle=GetWindowLong(dxw.GethWnd(), GWL_EXSTYLE);
|
dwExStyle=GetWindowLong(dxw.GethWnd(), GWL_EXSTYLE);
|
||||||
@ -1349,7 +1357,8 @@ int HookInit(TARGETMAP *target, HWND hwnd)
|
|||||||
|
|
||||||
if (dxw.dwTFlags & DXPROXED){
|
if (dxw.dwTFlags & DXPROXED){
|
||||||
HookDDProxy(base, dxw.dwTargetDDVersion);
|
HookDDProxy(base, dxw.dwTargetDDVersion);
|
||||||
return 0;
|
//return 0;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// make InitPosition used for both DInput and DDraw
|
// make InitPosition used for both DInput and DDraw
|
||||||
@ -1382,14 +1391,14 @@ int HookInit(TARGETMAP *target, HWND hwnd)
|
|||||||
InitScreenParameters();
|
InitScreenParameters();
|
||||||
|
|
||||||
if (IsDebug) OutTraceD("MoveWindow: target pos=(%d,%d) size=(%d,%d)\n", dxw.iPosX, dxw.iPosY, dxw.iSizX, dxw.iSizY); //v2.02.09
|
if (IsDebug) OutTraceD("MoveWindow: target pos=(%d,%d) size=(%d,%d)\n", dxw.iPosX, dxw.iPosY, dxw.iSizX, dxw.iSizY); //v2.02.09
|
||||||
if(dxw.dwFlags1 & FIXPARENTWIN){
|
//if(dxw.dwFlags1 & FIXPARENTWIN){
|
||||||
CalculateWindowPos(hwnd, dxw.iSizX, dxw.iSizY, &wp);
|
// CalculateWindowPos(hwnd, dxw.iSizX, dxw.iSizY, &wp);
|
||||||
if (IsDebug) OutTraceD("MoveWindow: dxw.hParentWnd=%x pos=(%d,%d) size=(%d,%d)\n", dxw.hParentWnd, wp.x, wp.y, wp.cx, wp.cy);
|
// if (IsDebug) OutTraceD("MoveWindow: dxw.hParentWnd=%x pos=(%d,%d) size=(%d,%d)\n", dxw.hParentWnd, wp.x, wp.y, wp.cx, wp.cy);
|
||||||
res=(*pMoveWindow)(dxw.hParentWnd, wp.x, wp.y, wp.cx, wp.cy, FALSE);
|
// res=(*pMoveWindow)(dxw.hParentWnd, wp.x, wp.y, wp.cx, wp.cy, FALSE);
|
||||||
if(!res) OutTraceE("MoveWindow ERROR: dxw.hParentWnd=%x err=%d at %d\n", dxw.hParentWnd, GetLastError(), __LINE__);
|
// if(!res) OutTraceE("MoveWindow ERROR: dxw.hParentWnd=%x err=%d at %d\n", dxw.hParentWnd, GetLastError(), __LINE__);
|
||||||
}
|
//}
|
||||||
|
|
||||||
return 0;
|
//return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
LPCSTR ProcToString(LPCSTR proc)
|
LPCSTR ProcToString(LPCSTR proc)
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#define _CRT_SECURE_NO_WARNINGS
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "dxwnd.h"
|
#include "dxwnd.h"
|
||||||
#include "dxwcore.hpp"
|
#include "dxwcore.hpp"
|
||||||
@ -31,6 +33,24 @@ dxwCore::~dxwCore()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void dxwCore::SetFullScreen(BOOL fs, int line)
|
||||||
|
{
|
||||||
|
OutTraceD("SetFullScreen: %s at %d\n", fs?"FULLSCREEN":"WINDOWED", line);
|
||||||
|
FullScreen=fs;
|
||||||
|
}
|
||||||
|
|
||||||
|
void dxwCore::SetFullScreen(BOOL fs)
|
||||||
|
{
|
||||||
|
OutTraceD("SetFullScreen: %s\n", fs?"FULLSCREEN":"WINDOWED");
|
||||||
|
FullScreen=fs;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL dxwCore::IsFullScreen()
|
||||||
|
{
|
||||||
|
// if(dxw.dwFlagsX && ALWAYSFULLSCREEN) return TRUE;
|
||||||
|
return FullScreen;
|
||||||
|
}
|
||||||
|
|
||||||
void dxwCore::InitTarget(TARGETMAP *target)
|
void dxwCore::InitTarget(TARGETMAP *target)
|
||||||
{
|
{
|
||||||
dwFlags1 = target->flags;
|
dwFlags1 = target->flags;
|
||||||
@ -154,6 +174,15 @@ BOOL dxwCore::IsDesktop(HWND hwnd)
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOL dxwCore::IsRealDesktop(HWND hwnd)
|
||||||
|
{
|
||||||
|
return (
|
||||||
|
(hwnd == 0)
|
||||||
|
||
|
||||||
|
(hwnd == (*pGetDesktopWindow)())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// v2.1.93: FixCursorPos completely revised to introduce a clipping tolerance in
|
// v2.1.93: FixCursorPos completely revised to introduce a clipping tolerance in
|
||||||
// clipping regions as well as in normal operations
|
// clipping regions as well as in normal operations
|
||||||
|
|
||||||
@ -288,6 +317,13 @@ void dxwCore::EraseClipCursor()
|
|||||||
(*pClipCursor)(NULL);
|
(*pClipCursor)(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void dxwCore::SethWnd(HWND hwnd)
|
||||||
|
{
|
||||||
|
OutTraceD("SethWnd: setting main win=%x\n", hwnd);
|
||||||
|
hWnd=hwnd;
|
||||||
|
hWndFPS=hwnd;
|
||||||
|
}
|
||||||
|
|
||||||
RECT dxwCore::MapWindowRect(LPRECT lpRect)
|
RECT dxwCore::MapWindowRect(LPRECT lpRect)
|
||||||
{
|
{
|
||||||
POINT UpLeft={0,0};
|
POINT UpLeft={0,0};
|
||||||
@ -296,6 +332,10 @@ RECT dxwCore::MapWindowRect(LPRECT lpRect)
|
|||||||
int w, h, bx, by; // width, height and x,y borders
|
int w, h, bx, by; // width, height and x,y borders
|
||||||
if (!(*pGetClientRect)(hWnd, &ClientRect)){
|
if (!(*pGetClientRect)(hWnd, &ClientRect)){
|
||||||
OutTraceE("GetClientRect ERROR: err=%d hwnd=%x at %d\n", GetLastError(), hWnd, __LINE__);
|
OutTraceE("GetClientRect ERROR: err=%d hwnd=%x at %d\n", GetLastError(), hWnd, __LINE__);
|
||||||
|
// v2.02.31: try....
|
||||||
|
ClientRect.top=ClientRect.left=0;
|
||||||
|
ClientRect.right=dxw.iSizX;
|
||||||
|
ClientRect.bottom=dxw.iSizY;
|
||||||
}
|
}
|
||||||
RetRect=ClientRect;
|
RetRect=ClientRect;
|
||||||
bx = by = 0;
|
bx = by = 0;
|
||||||
@ -308,7 +348,7 @@ RECT dxwCore::MapWindowRect(LPRECT lpRect)
|
|||||||
else {
|
else {
|
||||||
by = (h - (w * 600 / 800))/2;
|
by = (h - (w * 600 / 800))/2;
|
||||||
}
|
}
|
||||||
OutTraceD("bx=%d by=%d\n", bx, by);
|
OutTraceB("bx=%d by=%d\n", bx, by);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(lpRect){
|
if(lpRect){
|
||||||
@ -336,29 +376,49 @@ RECT dxwCore::MapWindowRect(LPRECT lpRect)
|
|||||||
void dxwCore::MapClient(LPRECT rect)
|
void dxwCore::MapClient(LPRECT rect)
|
||||||
{
|
{
|
||||||
RECT client;
|
RECT client;
|
||||||
|
int w, h;
|
||||||
(*pGetClientRect)(hWnd, &client);
|
(*pGetClientRect)(hWnd, &client);
|
||||||
rect->left= rect->left * client.right / dwScreenWidth;
|
w = client.right ? client.right : iSizX;
|
||||||
rect->top= rect->top * client.bottom / dwScreenHeight;
|
h = client.bottom ? client.bottom : iSizY;
|
||||||
rect->right= rect->right * client.right / dwScreenWidth;
|
rect->left= rect->left * w / (int)dwScreenWidth;
|
||||||
rect->bottom= rect->bottom * client.bottom / dwScreenHeight;
|
rect->top= rect->top * h / (int)dwScreenHeight;
|
||||||
|
rect->right= rect->right * w / (int)dwScreenWidth;
|
||||||
|
rect->bottom= rect->bottom * h / (int)dwScreenHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
void dxwCore::MapClient(int *nXDest, int *nYDest, int *nWDest, int *nHDest)
|
void dxwCore::MapClient(int *nXDest, int *nYDest, int *nWDest, int *nHDest)
|
||||||
{
|
{
|
||||||
RECT client;
|
RECT client;
|
||||||
|
int w, h;
|
||||||
(*pGetClientRect)(hWnd, &client);
|
(*pGetClientRect)(hWnd, &client);
|
||||||
*nXDest= *nXDest * client.right / dwScreenWidth;
|
w = client.right ? client.right : iSizX;
|
||||||
*nYDest= *nYDest * client.bottom / dwScreenHeight;
|
h = client.bottom ? client.bottom : iSizY;
|
||||||
*nWDest= *nWDest * client.right / dwScreenWidth;
|
*nXDest= *nXDest * w / (int)dwScreenWidth;
|
||||||
*nHDest= *nHDest * client.bottom / dwScreenHeight;
|
*nYDest= *nYDest * h / (int)dwScreenHeight;
|
||||||
|
*nWDest= *nWDest * w / (int)dwScreenWidth;
|
||||||
|
*nHDest= *nHDest * h / (int)dwScreenHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
void dxwCore::MapClient(LPPOINT lppoint)
|
void dxwCore::MapClient(LPPOINT lppoint)
|
||||||
{
|
{
|
||||||
RECT client;
|
RECT client;
|
||||||
|
int w, h;
|
||||||
(*pGetClientRect)(hWnd, &client);
|
(*pGetClientRect)(hWnd, &client);
|
||||||
lppoint->x = (lppoint->x * client.right) / dwScreenWidth;
|
w = client.right ? client.right : iSizX;
|
||||||
lppoint->y = (lppoint->y * client.bottom) / dwScreenHeight;
|
h = client.bottom ? client.bottom : iSizY;
|
||||||
|
lppoint->x = (lppoint->x * w) / (int)dwScreenWidth;
|
||||||
|
lppoint->y = (lppoint->y * h) / (int)dwScreenHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
void dxwCore::MapClient(int *nXDest, int *nYDest)
|
||||||
|
{
|
||||||
|
RECT client;
|
||||||
|
int w, h;
|
||||||
|
(*pGetClientRect)(hWnd, &client);
|
||||||
|
w = client.right ? client.right : iSizX;
|
||||||
|
h = client.bottom ? client.bottom : iSizY;
|
||||||
|
*nXDest= *nXDest * w / (int)dwScreenWidth;
|
||||||
|
*nYDest= *nYDest * h / (int)dwScreenHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
void dxwCore::MapWindow(LPRECT rect)
|
void dxwCore::MapWindow(LPRECT rect)
|
||||||
@ -367,10 +427,10 @@ void dxwCore::MapWindow(LPRECT rect)
|
|||||||
POINT upleft = {0,0};
|
POINT upleft = {0,0};
|
||||||
(*pGetClientRect)(hWnd, &client);
|
(*pGetClientRect)(hWnd, &client);
|
||||||
(*pClientToScreen)(hWnd, &upleft);
|
(*pClientToScreen)(hWnd, &upleft);
|
||||||
rect->left= upleft.x + ((rect->left * client.right) / dwScreenWidth);
|
rect->left= upleft.x + ((rect->left * client.right) / (int)dwScreenWidth);
|
||||||
rect->top= upleft.y + ((rect->top * client.bottom) / dwScreenHeight);
|
rect->top= upleft.y + ((rect->top * client.bottom) / (int)dwScreenHeight);
|
||||||
rect->right= upleft.x + ((rect->right * client.right) / dwScreenWidth);
|
rect->right= upleft.x + ((rect->right * client.right) / (int)dwScreenWidth);
|
||||||
rect->bottom= upleft.y + ((rect->bottom * client.bottom) / dwScreenHeight);
|
rect->bottom= upleft.y + ((rect->bottom * client.bottom) / (int)dwScreenHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
void dxwCore::MapWindow(int *nXDest, int *nYDest, int *nWDest, int *nHDest)
|
void dxwCore::MapWindow(int *nXDest, int *nYDest, int *nWDest, int *nHDest)
|
||||||
@ -379,10 +439,10 @@ void dxwCore::MapWindow(int *nXDest, int *nYDest, int *nWDest, int *nHDest)
|
|||||||
POINT upleft = {0,0};
|
POINT upleft = {0,0};
|
||||||
(*pGetClientRect)(hWnd, &client);
|
(*pGetClientRect)(hWnd, &client);
|
||||||
(*pClientToScreen)(hWnd, &upleft);
|
(*pClientToScreen)(hWnd, &upleft);
|
||||||
*nXDest= upleft.x + ((*nXDest * client.right) / dwScreenWidth);
|
*nXDest= upleft.x + ((*nXDest * client.right) / (int)dwScreenWidth);
|
||||||
*nYDest= upleft.y + ((*nYDest * client.bottom) / dwScreenHeight);
|
*nYDest= upleft.y + ((*nYDest * client.bottom) / (int)dwScreenHeight);
|
||||||
*nWDest= (*nWDest * client.right) / dwScreenWidth;
|
*nWDest= (*nWDest * client.right) / (int)dwScreenWidth;
|
||||||
*nHDest= (*nHDest * client.bottom) / dwScreenHeight;
|
*nHDest= (*nHDest * client.bottom) / (int)dwScreenHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
void dxwCore::MapWindow(LPPOINT lppoint)
|
void dxwCore::MapWindow(LPPOINT lppoint)
|
||||||
|
@ -13,7 +13,7 @@ public:
|
|||||||
// Operations
|
// Operations
|
||||||
public: // methods
|
public: // methods
|
||||||
void InitTarget(TARGETMAP *);
|
void InitTarget(TARGETMAP *);
|
||||||
void SethWnd(HWND hwnd) {hWnd=hwnd; hWndFPS=hwnd;}
|
void SethWnd(HWND hwnd);
|
||||||
void SethWnd(HWND hwnd, HWND hwndfps) {hWnd=hwnd; hWndFPS=hwndfps;}
|
void SethWnd(HWND hwnd, HWND hwndfps) {hWnd=hwnd; hWndFPS=hwndfps;}
|
||||||
void InitWindowPos(int, int, int, int);
|
void InitWindowPos(int, int, int, int);
|
||||||
HWND GethWnd(void) {return hWnd;}
|
HWND GethWnd(void) {return hWnd;}
|
||||||
@ -21,9 +21,11 @@ public: // methods
|
|||||||
void SetScreenSize(int x, int y) {if(x)dwScreenWidth=x; if(y)dwScreenHeight=y;}
|
void SetScreenSize(int x, int y) {if(x)dwScreenWidth=x; if(y)dwScreenHeight=y;}
|
||||||
DWORD GetScreenWidth(void) {return dwScreenWidth;}
|
DWORD GetScreenWidth(void) {return dwScreenWidth;}
|
||||||
DWORD GetScreenHeight(void) {return dwScreenHeight;}
|
DWORD GetScreenHeight(void) {return dwScreenHeight;}
|
||||||
void SetFullScreen(BOOL fs) {FullScreen=fs;}
|
void SetFullScreen(BOOL);
|
||||||
BOOL IsFullScreen() {return FullScreen;}
|
void SetFullScreen(BOOL, int);
|
||||||
|
BOOL IsFullScreen();
|
||||||
BOOL IsDesktop(HWND);
|
BOOL IsDesktop(HWND);
|
||||||
|
BOOL IsRealDesktop(HWND);
|
||||||
POINT FixCursorPos(POINT);
|
POINT FixCursorPos(POINT);
|
||||||
void FixNCHITCursorPos(LPPOINT);
|
void FixNCHITCursorPos(LPPOINT);
|
||||||
void SetClipCursor(void);
|
void SetClipCursor(void);
|
||||||
@ -33,6 +35,7 @@ public: // methods
|
|||||||
void MapClient(LPPOINT);
|
void MapClient(LPPOINT);
|
||||||
void MapClient(LPRECT);
|
void MapClient(LPRECT);
|
||||||
void MapClient(int *, int *, int *, int *);
|
void MapClient(int *, int *, int *, int *);
|
||||||
|
void MapClient(int *, int *);
|
||||||
void MapWindow(LPPOINT);
|
void MapWindow(LPPOINT);
|
||||||
void MapWindow(LPRECT);
|
void MapWindow(LPRECT);
|
||||||
void MapWindow(int *, int *, int *, int *);
|
void MapWindow(int *, int *, int *, int *);
|
||||||
|
@ -24,7 +24,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#include "dxwnd.h"
|
#include "dxwnd.h"
|
||||||
#include "dxwcore.hpp"
|
#include "dxwcore.hpp"
|
||||||
|
|
||||||
#define VERSION "2.02.29"
|
#define VERSION "2.02.31"
|
||||||
|
|
||||||
#define DDTHREADLOCK 1
|
#define DDTHREADLOCK 1
|
||||||
|
|
||||||
|
Binary file not shown.
594
dll/gdi32.cpp
594
dll/gdi32.cpp
@ -8,7 +8,6 @@
|
|||||||
static HookEntry_Type Hooks[]={
|
static HookEntry_Type Hooks[]={
|
||||||
{"GetDeviceCaps", (FARPROC)GetDeviceCaps, (FARPROC *)&pGDIGetDeviceCaps, (FARPROC)extGetDeviceCaps},
|
{"GetDeviceCaps", (FARPROC)GetDeviceCaps, (FARPROC *)&pGDIGetDeviceCaps, (FARPROC)extGetDeviceCaps},
|
||||||
{"TextOutA", (FARPROC)TextOutA, (FARPROC *)&pGDITextOutA, (FARPROC)extTextOutA},
|
{"TextOutA", (FARPROC)TextOutA, (FARPROC *)&pGDITextOutA, (FARPROC)extTextOutA},
|
||||||
{"TabbedTextOutA", (FARPROC)TabbedTextOutA, (FARPROC *)&pTabbedTextOutA, (FARPROC)extTabbedTextOutA},
|
|
||||||
{"ScaleWindowExtEx", (FARPROC)ScaleWindowExtEx, (FARPROC *)&pGDIScaleWindowExtEx, (FARPROC)extScaleWindowExtEx},
|
{"ScaleWindowExtEx", (FARPROC)ScaleWindowExtEx, (FARPROC *)&pGDIScaleWindowExtEx, (FARPROC)extScaleWindowExtEx},
|
||||||
{"Rectangle", (FARPROC)Rectangle, (FARPROC *)&pGDIRectangle, (FARPROC)extRectangle},
|
{"Rectangle", (FARPROC)Rectangle, (FARPROC *)&pGDIRectangle, (FARPROC)extRectangle},
|
||||||
{"SaveDC", (FARPROC)SaveDC, (FARPROC *)&pGDISaveDC, (FARPROC)extGDISaveDC},
|
{"SaveDC", (FARPROC)SaveDC, (FARPROC *)&pGDISaveDC, (FARPROC)extGDISaveDC},
|
||||||
@ -17,6 +16,29 @@ static HookEntry_Type Hooks[]={
|
|||||||
{"SelectPalette", (FARPROC)SelectPalette, (FARPROC *)&pGDISelectPalette, (FARPROC)extSelectPalette},
|
{"SelectPalette", (FARPROC)SelectPalette, (FARPROC *)&pGDISelectPalette, (FARPROC)extSelectPalette},
|
||||||
{"RealizePalette", (FARPROC)RealizePalette, (FARPROC *)&pGDIRealizePalette, (FARPROC)extRealizePalette},
|
{"RealizePalette", (FARPROC)RealizePalette, (FARPROC *)&pGDIRealizePalette, (FARPROC)extRealizePalette},
|
||||||
{"GetSystemPaletteEntries", (FARPROC)GetSystemPaletteEntries, (FARPROC *)&pGDIGetSystemPaletteEntries, (FARPROC)extGetSystemPaletteEntries},
|
{"GetSystemPaletteEntries", (FARPROC)GetSystemPaletteEntries, (FARPROC *)&pGDIGetSystemPaletteEntries, (FARPROC)extGetSystemPaletteEntries},
|
||||||
|
{"GetClipBox", (FARPROC)NULL, (FARPROC *)&pGDIGetClipBox, (FARPROC)extGetClipBox},
|
||||||
|
{"Polyline", (FARPROC)NULL, (FARPROC *)&pPolyline, (FARPROC)extPolyline},
|
||||||
|
{"PolyBezierTo", (FARPROC)NULL, (FARPROC *)&pPolyBezierTo, (FARPROC)extPolyBezierTo},
|
||||||
|
{"PolylineTo", (FARPROC)NULL, (FARPROC *)&pPolylineTo, (FARPROC)extPolylineTo},
|
||||||
|
{"PolyDraw", (FARPROC)NULL, (FARPROC *)&pPolyDraw, (FARPROC)extPolyDraw},
|
||||||
|
{"MoveToEx", (FARPROC)NULL, (FARPROC *)&pMoveToEx, (FARPROC)extMoveToEx},
|
||||||
|
{"ArcTo", (FARPROC)NULL, (FARPROC *)&pArcTo, (FARPROC)extArcTo},
|
||||||
|
{"LineTo", (FARPROC)NULL, (FARPROC *)&pLineTo, (FARPROC)extLineTo},
|
||||||
|
{"StretchDIBits", (FARPROC)StretchDIBits, (FARPROC *)&pStretchDIBits, (FARPROC)extStretchDIBits},
|
||||||
|
{"SetDIBitsToDevice", (FARPROC)NULL, (FARPROC *)&pSetDIBitsToDevice, (FARPROC)extSetDIBitsToDevice},
|
||||||
|
//{"CreateCompatibleBitmap", (FARPROC)NULL, (FARPROC *)&pCreateCompatibleBitmap, (FARPROC)extCreateCompatibleBitmap},
|
||||||
|
{"SetPixel", (FARPROC)NULL, (FARPROC *)&pSetPixel, (FARPROC)extSetPixel},
|
||||||
|
{"Ellipse", (FARPROC)NULL, (FARPROC *)&pEllipse, (FARPROC)extEllipse},
|
||||||
|
{"Polygon", (FARPROC)NULL, (FARPROC *)&pPolygon, (FARPROC)extPolygon},
|
||||||
|
{"Arc", (FARPROC)NULL, (FARPROC *)&pArc, (FARPROC)extArc},
|
||||||
|
{"CreateEllipticRgn", (FARPROC)NULL, (FARPROC *)&pCreateEllipticRgn, (FARPROC)extCreateEllipticRgn},
|
||||||
|
{"CreateEllipticRgnIndirect", (FARPROC)NULL, (FARPROC *)&pCreateEllipticRgnIndirect, (FARPROC)extCreateEllipticRgnIndirect},
|
||||||
|
{"CreateRectRgn", (FARPROC)NULL, (FARPROC *)&pCreateRectRgn, (FARPROC)extCreateRectRgn},
|
||||||
|
{"CreateRectRgnIndirect", (FARPROC)NULL, (FARPROC *)&pCreateRectRgnIndirect, (FARPROC)extCreateRectRgnIndirect},
|
||||||
|
{"CreatePolygonRgn", (FARPROC)NULL, (FARPROC *)&pCreatePolygonRgn, (FARPROC)extCreatePolygonRgn},
|
||||||
|
{"DrawTextA", (FARPROC)NULL, (FARPROC *)&pDrawText, (FARPROC)extDrawText},
|
||||||
|
{"DrawTextExA", (FARPROC)NULL, (FARPROC *)&pDrawTextEx, (FARPROC)extDrawTextEx},
|
||||||
|
{"MaskBlt", (FARPROC)NULL, (FARPROC *)&pMaskBlt, (FARPROC)extMaskBlt},
|
||||||
{0, NULL, 0, 0} // terminator
|
{0, NULL, 0, 0} // terminator
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -41,9 +63,9 @@ static HookEntry_Type GDIHooks[]={
|
|||||||
};
|
};
|
||||||
|
|
||||||
static HookEntry_Type EmuHooks[]={
|
static HookEntry_Type EmuHooks[]={
|
||||||
{"SetTextColor", (FARPROC)SetTextColor, (FARPROC *)&pGDISetTextColor, (FARPROC)extSetTextColor},
|
//{"SetTextColor", (FARPROC)SetTextColor, (FARPROC *)&pGDISetTextColor, (FARPROC)extSetTextColor},
|
||||||
{"SetBkColor", (FARPROC)SetBkColor, (FARPROC *)&pGDISetBkColor, (FARPROC)extSetBkColor},
|
//{"SetBkColor", (FARPROC)SetBkColor, (FARPROC *)&pGDISetBkColor, (FARPROC)extSetBkColor},
|
||||||
{"CreateFont", (FARPROC)CreateFont, (FARPROC *)&pGDICreateFont, (FARPROC)extCreateFont},
|
{"CreateFontA", (FARPROC)CreateFont, (FARPROC *)&pGDICreateFont, (FARPROC)extCreateFont},
|
||||||
{"CreateFontIndirectA", (FARPROC)CreateFontIndirectA, (FARPROC *)&pGDICreateFontIndirect, (FARPROC)extCreateFontIndirect},
|
{"CreateFontIndirectA", (FARPROC)CreateFontIndirectA, (FARPROC *)&pGDICreateFontIndirect, (FARPROC)extCreateFontIndirect},
|
||||||
{0, NULL, 0, 0} // terminator
|
{0, NULL, 0, 0} // terminator
|
||||||
};
|
};
|
||||||
@ -277,35 +299,17 @@ int WINAPI extGetDeviceCaps(HDC hdc, int nindex)
|
|||||||
|
|
||||||
BOOL WINAPI extTextOutA(HDC hdc, int nXStart, int nYStart, LPCTSTR lpString, int cchString)
|
BOOL WINAPI extTextOutA(HDC hdc, int nXStart, int nYStart, LPCTSTR lpString, int cchString)
|
||||||
{
|
{
|
||||||
BOOL res;
|
BOOL ret;
|
||||||
OutTraceD("TextOut: hdc=%x xy=(%d,%d) str=(%d)\"%s\"\n", hdc, nXStart, nYStart, cchString, lpString);
|
OutTraceD("TextOut: hdc=%x xy=(%d,%d) str=(%d)\"%s\"\n", hdc, nXStart, nYStart, cchString, lpString);
|
||||||
if (dxw.dwFlags1 & FIXTEXTOUT) {
|
|
||||||
POINT anchor;
|
|
||||||
anchor.x=nXStart;
|
|
||||||
anchor.y=nYStart;
|
|
||||||
(*pClientToScreen)(dxw.GethWnd(), &anchor);
|
|
||||||
nXStart=anchor.x;
|
|
||||||
nYStart=anchor.y;
|
|
||||||
}
|
|
||||||
res=(*pGDITextOutA)(hdc, nXStart, nYStart, lpString, cchString);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
LONG WINAPI extTabbedTextOutA(HDC hDC, int X, int Y, LPCTSTR lpString, int nCount, int nTabPositions, const LPINT lpnTabStopPositions, int nTabOrigin)
|
if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdc))){
|
||||||
{
|
dxw.MapClient(&nXStart, &nYStart);
|
||||||
BOOL res;
|
OutTraceD("TextOut: fixed dest=(%d,%d)\n", nXStart, nYStart);
|
||||||
OutTraceD("TabbedTextOut: hdc=%x xy=(%d,%d) nCount=%d nTP=%d nTOS=%d str=(%d)\"%s\"\n",
|
|
||||||
hDC, X, Y, nCount, nTabPositions, nTabOrigin, lpString);
|
|
||||||
if (dxw.dwFlags1 & FIXTEXTOUT) {
|
|
||||||
POINT anchor;
|
|
||||||
anchor.x=X;
|
|
||||||
anchor.y=Y;
|
|
||||||
(*pClientToScreen)(dxw.GethWnd(), &anchor);
|
|
||||||
X=anchor.x;
|
|
||||||
Y=anchor.y;
|
|
||||||
}
|
}
|
||||||
res=(*pTabbedTextOutA)(hDC, X, Y, lpString, nCount, nTabPositions, lpnTabStopPositions, nTabOrigin);
|
|
||||||
return res;
|
ret=(*pGDITextOutA)(hdc, nXStart, nYStart, lpString, cchString);
|
||||||
|
if(!ret) OutTraceE("TextOut: ERROR ret=%x\n", ret);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL WINAPI extScaleWindowExtEx(HDC hdc, int Xnum, int Xdenom, int Ynum, int Ydenom, LPSIZE lpSize)
|
BOOL WINAPI extScaleWindowExtEx(HDC hdc, int Xnum, int Xdenom, int Ynum, int Ydenom, LPSIZE lpSize)
|
||||||
@ -320,21 +324,18 @@ BOOL WINAPI extScaleWindowExtEx(HDC hdc, int Xnum, int Xdenom, int Ynum, int Yde
|
|||||||
|
|
||||||
BOOL WINAPI extRectangle(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect)
|
BOOL WINAPI extRectangle(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
OutTraceD("Rectangle: hdc=%x xy=(%d,%d)-(%d,%d)\n", hdc, nLeftRect, nTopRect, nRightRect, nBottomRect);
|
OutTraceD("Rectangle: hdc=%x xy=(%d,%d)-(%d,%d)\n", hdc, nLeftRect, nTopRect, nRightRect, nBottomRect);
|
||||||
if (dxw.dwFlags1 & FIXTEXTOUT) {
|
|
||||||
POINT anchor;
|
if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdc))){
|
||||||
anchor.x=nLeftRect;
|
dxw.MapClient(&nLeftRect, &nTopRect, &nRightRect, &nBottomRect);
|
||||||
anchor.y=nTopRect;
|
OutTraceD("Rectangle: fixed dest=(%d,%d)-(%d,%d)\n", nLeftRect, nTopRect, nRightRect, nBottomRect);
|
||||||
(*pClientToScreen)(dxw.GethWnd(), &anchor);
|
|
||||||
nLeftRect=anchor.x;
|
|
||||||
nTopRect=anchor.y;
|
|
||||||
anchor.x=nRightRect;
|
|
||||||
anchor.y=nBottomRect;
|
|
||||||
(*pClientToScreen)(dxw.GethWnd(), &anchor);
|
|
||||||
nRightRect=anchor.x;
|
|
||||||
nBottomRect=anchor.y;
|
|
||||||
}
|
}
|
||||||
return (*pGDIRectangle)(hdc, nLeftRect, nTopRect, nRightRect, nBottomRect);
|
|
||||||
|
ret=(*pGDIRectangle)(hdc, nLeftRect, nTopRect, nRightRect, nBottomRect);
|
||||||
|
if(!ret) OutTraceE("Rectangle: ERROR ret=%x\n", ret);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int WINAPI extGDISaveDC(HDC hdc)
|
int WINAPI extGDISaveDC(HDC hdc)
|
||||||
@ -492,7 +493,7 @@ static HDC WINAPI winDDGetDC(HWND hwnd, char *api)
|
|||||||
dxw.ResetPrimarySurface();
|
dxw.ResetPrimarySurface();
|
||||||
dxw.SetPrimarySurface();
|
dxw.SetPrimarySurface();
|
||||||
|
|
||||||
if(dxw.IsDesktop(hwnd)) hwnd=dxw.GethWnd();
|
if(dxw.IsRealDesktop(hwnd)) hwnd=dxw.GethWnd();
|
||||||
|
|
||||||
if(dxw.lpDDSPrimHDC){
|
if(dxw.lpDDSPrimHDC){
|
||||||
if (PrimHDC){
|
if (PrimHDC){
|
||||||
@ -702,6 +703,8 @@ BOOL WINAPI extGDIBitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nH
|
|||||||
// the screen surface later on, on ReleaseDC or ddraw Blit / Flip operation. Scaling of rect coordinates is
|
// the screen surface later on, on ReleaseDC or ddraw Blit / Flip operation. Scaling of rect coordinates is
|
||||||
// needed only in the first case, and must be avoided on the second, otherwise the image would be scaled twice!
|
// needed only in the first case, and must be avoided on the second, otherwise the image would be scaled twice!
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdcDest))){
|
if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdcDest))){
|
||||||
int nWDest, nHDest;
|
int nWDest, nHDest;
|
||||||
nWDest= nWidth;
|
nWDest= nWidth;
|
||||||
@ -710,6 +713,15 @@ BOOL WINAPI extGDIBitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nH
|
|||||||
if (dxw.dwFlags2 & SHOWFPSOVERLAY) dxw.ShowFPS(hdcDest);
|
if (dxw.dwFlags2 & SHOWFPSOVERLAY) dxw.ShowFPS(hdcDest);
|
||||||
res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, hdcSrc, nXSrc, nYSrc, nWidth, nHeight, dwRop);
|
res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, hdcSrc, nXSrc, nYSrc, nWidth, nHeight, dwRop);
|
||||||
}
|
}
|
||||||
|
else if(WindowFromDC(hdcDest)==NULL){
|
||||||
|
// V2.02.31: See StretchBlt.
|
||||||
|
int nWDest, nHDest;
|
||||||
|
nWDest= nWidth;
|
||||||
|
nHDest= nHeight;
|
||||||
|
dxw.MapWindow(&nXDest, &nYDest, &nWDest, &nHDest);
|
||||||
|
res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, hdcSrc, nXSrc, nYSrc, nWidth, nHeight, dwRop);
|
||||||
|
if (dxw.dwFlags2 & SHOWFPSOVERLAY) dxw.ShowFPS(hdcDest);
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
res=(*pGDIBitBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, dwRop);
|
res=(*pGDIBitBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, dwRop);
|
||||||
}
|
}
|
||||||
@ -727,11 +739,18 @@ BOOL WINAPI extGDIPatBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nH
|
|||||||
|
|
||||||
if (dxw.HandleFPS()) return TRUE;
|
if (dxw.HandleFPS()) return TRUE;
|
||||||
|
|
||||||
|
OutTraceB("GDI.StretchBlt: DEBUG FullScreen=%x target hdctype=%x(%s) hwnd=%x\n",
|
||||||
|
dxw.IsFullScreen(), GetObjectType(hdcDest), ExplainDCType(GetObjectType(hdcDest)), WindowFromDC(hdcDest));
|
||||||
|
|
||||||
if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdcDest))){
|
if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdcDest))){
|
||||||
int nWDest, nHDest;
|
dxw.MapClient(&nXDest, &nYDest, &nWidth, &nHeight);
|
||||||
dxw.MapClient(&nXDest, &nYDest, &nWDest, &nHDest);
|
|
||||||
if (dxw.dwFlags2 & SHOWFPSOVERLAY) dxw.ShowFPS(hdcDest);
|
if (dxw.dwFlags2 & SHOWFPSOVERLAY) dxw.ShowFPS(hdcDest);
|
||||||
res=(*pGDIPatBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, dwRop);
|
res=(*pGDIPatBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, dwRop);
|
||||||
|
}
|
||||||
|
else if(WindowFromDC(hdcDest)==NULL){
|
||||||
|
// V2.02.31: See StretchBlt.
|
||||||
|
dxw.MapWindow(&nXDest, &nYDest, &nWidth, &nHeight);
|
||||||
|
res=(*pGDIPatBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, dwRop);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
res=(*pGDIPatBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, dwRop);
|
res=(*pGDIPatBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, dwRop);
|
||||||
@ -751,9 +770,21 @@ BOOL WINAPI extGDIStretchBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, in
|
|||||||
|
|
||||||
if (dxw.HandleFPS()) return TRUE;
|
if (dxw.HandleFPS()) return TRUE;
|
||||||
|
|
||||||
// to do: what happend if StretchBlt is applied on screen DC ?
|
OutTraceB("GDI.StretchBlt: DEBUG FullScreen=%x target hdctype=%x(%s) hwnd=%x\n",
|
||||||
|
dxw.IsFullScreen(), GetObjectType(hdcDest), ExplainDCType(GetObjectType(hdcDest)), WindowFromDC(hdcDest));
|
||||||
|
|
||||||
|
if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdcDest))){
|
||||||
|
dxw.MapClient(&nXDest, &nYDest, &nWidth, &nHeight);
|
||||||
|
if (dxw.dwFlags2 & SHOWFPSOVERLAY) dxw.ShowFPS(hdcDest);
|
||||||
|
}
|
||||||
|
else if(WindowFromDC(hdcDest)==NULL){
|
||||||
|
// V2.02.31: In "Silent Hunter II" intro movie, QuickTime 5 renders the vidoe on the PrimarySurface->GetDC device context,
|
||||||
|
// that is a memory device type associated to NULL (desktop) window, through GDI StretchBlt api. So, you shoud compensate
|
||||||
|
// by scaling and offsetting to main window.
|
||||||
|
dxw.MapWindow(&nXDest, &nYDest, &nWidth, &nHeight);
|
||||||
|
if (dxw.dwFlags2 & SHOWFPSOVERLAY) dxw.ShowFPS(hdcDest);
|
||||||
|
}
|
||||||
|
|
||||||
if (dxw.dwFlags2 & SHOWFPSOVERLAY) dxw.ShowFPS(hdcDest);
|
|
||||||
res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, dwRop);
|
res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, dwRop);
|
||||||
if(!res) OutTraceE("GDI.StretchBlt: ERROR err=%d at %d\n", GetLastError(), __LINE__);
|
if(!res) OutTraceE("GDI.StretchBlt: ERROR err=%d at %d\n", GetLastError(), __LINE__);
|
||||||
return res;
|
return res;
|
||||||
@ -798,6 +829,14 @@ HFONT WINAPI extCreateFont(int nHeight, int nWidth, int nEscapement, int nOrient
|
|||||||
DWORD fdwPitchAndFamily, LPCTSTR lpszFace)
|
DWORD fdwPitchAndFamily, LPCTSTR lpszFace)
|
||||||
{
|
{
|
||||||
OutTraceD("CreateFont: h=%d w=%d face=\"%s\"\n", nHeight, nWidth, lpszFace);
|
OutTraceD("CreateFont: h=%d w=%d face=\"%s\"\n", nHeight, nWidth, lpszFace);
|
||||||
|
if(dxw.dwFlags1 & FIXTEXTOUT) {
|
||||||
|
if(nHeight > 0) dxw.MapClient(&nWidth, &nHeight);
|
||||||
|
else {
|
||||||
|
nHeight= -nHeight;
|
||||||
|
dxw.MapClient(&nWidth, &nHeight);
|
||||||
|
nHeight= -nHeight;
|
||||||
|
}
|
||||||
|
}
|
||||||
return (*pGDICreateFont)(nHeight, nWidth, nEscapement, nOrientation, fnWeight,
|
return (*pGDICreateFont)(nHeight, nWidth, nEscapement, nOrientation, fnWeight,
|
||||||
fdwItalic, fdwUnderline, fdwStrikeOut, fdwCharSet,
|
fdwItalic, fdwUnderline, fdwStrikeOut, fdwCharSet,
|
||||||
fdwOutputPrecision, fdwClipPrecision, NONANTIALIASED_QUALITY,
|
fdwOutputPrecision, fdwClipPrecision, NONANTIALIASED_QUALITY,
|
||||||
@ -813,6 +852,14 @@ HFONT WINAPI extCreateFontIndirect(const LOGFONT* lplf)
|
|||||||
OutTraceD("CreateFontIndirect: h=%d w=%d face=\"%s\"\n", lplf->lfHeight, lplf->lfWidth, lplf->lfFaceName);
|
OutTraceD("CreateFontIndirect: h=%d w=%d face=\"%s\"\n", lplf->lfHeight, lplf->lfWidth, lplf->lfFaceName);
|
||||||
memcpy((char *)&lf, (char *)lplf, sizeof(LOGFONT));
|
memcpy((char *)&lf, (char *)lplf, sizeof(LOGFONT));
|
||||||
lf.lfQuality=NONANTIALIASED_QUALITY;
|
lf.lfQuality=NONANTIALIASED_QUALITY;
|
||||||
|
if(dxw.dwFlags1 & FIXTEXTOUT) {
|
||||||
|
if(lf.lfHeight > 0) dxw.MapClient((int *)&lf.lfWidth, (int *)&lf.lfHeight);
|
||||||
|
else {
|
||||||
|
lf.lfHeight= -lf.lfHeight;
|
||||||
|
dxw.MapClient((int *)&lf.lfWidth, (int *)&lf.lfHeight);
|
||||||
|
lf.lfHeight= -lf.lfHeight;
|
||||||
|
}
|
||||||
|
}
|
||||||
retHFont=((*pGDICreateFontIndirect)(&lf));
|
retHFont=((*pGDICreateFontIndirect)(&lf));
|
||||||
if(retHFont)
|
if(retHFont)
|
||||||
OutTraceD("CreateFontIndirect: hfont=%x\n", retHFont);
|
OutTraceD("CreateFontIndirect: hfont=%x\n", retHFont);
|
||||||
@ -843,3 +890,452 @@ BOOL WINAPI extGetDeviceGammaRamp(HDC hDC, LPVOID lpRamp)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int WINAPI extGetClipBox(HDC hdc, LPRECT lprc)
|
||||||
|
{
|
||||||
|
// v2.02.31: needed in "Imperialism II" to avoid blit clipping
|
||||||
|
int ret;
|
||||||
|
char *sRetCodes[4]={"ERROR", "NULLREGION", "SIMPLEREGION", "COMPLEXREGION"};
|
||||||
|
OutTraceD("GetClipBox: hdc=%x\n", hdc);
|
||||||
|
ret=(*pGDIGetClipBox)(hdc, lprc);
|
||||||
|
if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdc)) && (ret!=ERROR)){
|
||||||
|
OutTraceD("GetClipBox: scaling main win coordinates (%d,%d)-(%d,%d)\n",
|
||||||
|
lprc->left, lprc->top, lprc->right, lprc->bottom);
|
||||||
|
*lprc=dxw.GetScreenRect();
|
||||||
|
}
|
||||||
|
OutTraceD("GetClipBox: ret=%x(%s)\n", ret, sRetCodes[ret]);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL WINAPI extPolyline(HDC hdc, const POINT *lppt, int cPoints)
|
||||||
|
{
|
||||||
|
BOOL ret;
|
||||||
|
if(IsTraceD){
|
||||||
|
int i;
|
||||||
|
OutTrace("Polyline: hdc=%x cPoints=%d pt=", hdc, cPoints);
|
||||||
|
for(i=0; i<cPoints; i++) OutTrace("(%d,%d) ", lppt[i].x, lppt[i].y);
|
||||||
|
OutTrace("\n");
|
||||||
|
}
|
||||||
|
if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdc))){
|
||||||
|
int i;
|
||||||
|
OutTrace("Polyline: fixed cPoints=%d pt=", cPoints);
|
||||||
|
for(i=0; i<cPoints; i++) {
|
||||||
|
dxw.MapClient((LPPOINT)&lppt[i]);
|
||||||
|
OutTrace("(%d,%d) ", lppt[i].x, lppt[i].y);
|
||||||
|
}
|
||||||
|
OutTrace("\n");
|
||||||
|
}
|
||||||
|
ret=(*pPolyline)(hdc, lppt, cPoints);
|
||||||
|
if(!ret)OutTraceE("Polyline: ERROR ret=%x\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL WINAPI extLineTo(HDC hdc, int nXEnd, int nYEnd)
|
||||||
|
{
|
||||||
|
BOOL ret;
|
||||||
|
OutTraceD("LineTo: hdc=%x pt=(%d,%d)\n", hdc, nXEnd, nYEnd);
|
||||||
|
if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdc))){
|
||||||
|
dxw.MapClient(&nXEnd, &nYEnd);
|
||||||
|
OutTraceD("LineTo: fixed pt=(%d,%d)\n", nXEnd, nYEnd);
|
||||||
|
}
|
||||||
|
ret=(*pLineTo)(hdc, nXEnd, nYEnd);
|
||||||
|
if(!ret)OutTraceE("LineTo: ERROR ret=%x\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL WINAPI extArcTo(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, int nXRadial1, int nYRadial1, int nXRadial2, int nYRadial2)
|
||||||
|
{
|
||||||
|
BOOL ret;
|
||||||
|
OutTraceD("ArcTo: hdc=%x rect=(%d,%d)(%d,%d) radial=(%d,%d)(%d,%d)\n",
|
||||||
|
hdc, nLeftRect, nTopRect, nRightRect, nBottomRect, nXRadial1, nYRadial1, nXRadial2, nYRadial2);
|
||||||
|
if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdc))){
|
||||||
|
dxw.MapClient(&nLeftRect, &nTopRect, &nRightRect, &nBottomRect);
|
||||||
|
dxw.MapClient(&nXRadial1, &nYRadial1, &nXRadial2, &nYRadial2);
|
||||||
|
OutTraceD("ArcTo: fixed rect=(%d,%d)(%d,%d) radial=(%d,%d)(%d,%d)\n",
|
||||||
|
nLeftRect, nTopRect, nRightRect, nBottomRect, nXRadial1, nYRadial1, nXRadial2, nYRadial2);
|
||||||
|
}
|
||||||
|
ret=(*pArcTo)(hdc, nLeftRect, nTopRect, nRightRect, nBottomRect, nXRadial1, nYRadial1, nXRadial2, nYRadial2);
|
||||||
|
if(!ret)OutTraceE("ArcTo: ERROR ret=%x\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL WINAPI extMoveToEx(HDC hdc, int X, int Y, LPPOINT lpPoint)
|
||||||
|
{
|
||||||
|
BOOL ret;
|
||||||
|
OutTraceD("MoveToEx: hdc=%x pt=(%d,%d)\n", hdc, X, Y);
|
||||||
|
if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdc))){
|
||||||
|
dxw.MapClient(&X, &Y);
|
||||||
|
OutTraceD("MoveToEx: fixed pt=(%d,%d)\n", X, Y);
|
||||||
|
}
|
||||||
|
ret=(*pMoveToEx)(hdc, X, Y, lpPoint);
|
||||||
|
if(!ret)OutTraceE("MoveToEx: ERROR ret=%x\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL WINAPI extPolyDraw(HDC hdc, const POINT *lppt, const BYTE *lpbTypes, int cCount)
|
||||||
|
{
|
||||||
|
BOOL ret;
|
||||||
|
if(IsTraceD){
|
||||||
|
int i;
|
||||||
|
OutTrace("PolyDraw: hdc=%x cCount=%d pt=", hdc, cCount);
|
||||||
|
for(i=0; i<cCount; i++) OutTrace("(%x:%d,%d) ", lpbTypes[i], lppt[i].x, lppt[i].y);
|
||||||
|
OutTrace("\n");
|
||||||
|
}
|
||||||
|
if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdc))){
|
||||||
|
int i;
|
||||||
|
OutTrace("PolyDraw: fixed cCount=%d pt=", cCount);
|
||||||
|
for(i=0; i<cCount; i++) {
|
||||||
|
dxw.MapClient((LPPOINT)&lppt[i]);
|
||||||
|
OutTrace("(%d,%d) ", lppt[i].x, lppt[i].y);
|
||||||
|
}
|
||||||
|
OutTrace("\n");
|
||||||
|
}
|
||||||
|
ret=(*pPolyDraw)(hdc, lppt, lpbTypes, cCount);
|
||||||
|
if(!ret)OutTraceE("PolyDraw: ERROR ret=%x\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL WINAPI extPolylineTo(HDC hdc, const POINT *lppt, DWORD cCount)
|
||||||
|
{
|
||||||
|
BOOL ret;
|
||||||
|
if(IsTraceD){
|
||||||
|
DWORD i;
|
||||||
|
OutTrace("PolylineTo: hdc=%x cCount=%d pt=", hdc, cCount);
|
||||||
|
for(i=0; i<cCount; i++) OutTrace("(%d,%d) ", lppt[i].x, lppt[i].y);
|
||||||
|
OutTrace("\n");
|
||||||
|
}
|
||||||
|
if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdc))){
|
||||||
|
DWORD i;
|
||||||
|
OutTrace("PolylineTo: fixed cCount=%d pt=", cCount);
|
||||||
|
for(i=0; i<cCount; i++) {
|
||||||
|
dxw.MapClient((LPPOINT)&lppt[i]);
|
||||||
|
OutTrace("(%d,%d) ", lppt[i].x, lppt[i].y);
|
||||||
|
}
|
||||||
|
OutTrace("\n");
|
||||||
|
}
|
||||||
|
ret=(*pPolylineTo)(hdc, lppt, cCount);
|
||||||
|
if(!ret)OutTraceE("PolylineTo: ERROR ret=%x\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL WINAPI extPolyBezierTo(HDC hdc, const POINT *lppt, DWORD cCount)
|
||||||
|
{
|
||||||
|
BOOL ret;
|
||||||
|
if(IsTraceD){
|
||||||
|
DWORD i;
|
||||||
|
OutTrace("PolyBezierTo: hdc=%x cCount=%d pt=", hdc, cCount);
|
||||||
|
for(i=0; i<cCount; i++) OutTrace("(%d,%d) ", lppt[i].x, lppt[i].y);
|
||||||
|
OutTrace("\n");
|
||||||
|
}
|
||||||
|
if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdc))){
|
||||||
|
DWORD i;
|
||||||
|
OutTrace("PolyBezierTo: fixed cCount=%d pt=", cCount);
|
||||||
|
for(i=0; i<cCount; i++) {
|
||||||
|
dxw.MapClient((LPPOINT)&lppt[i]);
|
||||||
|
OutTrace("(%d,%d) ", lppt[i].x, lppt[i].y);
|
||||||
|
}
|
||||||
|
OutTrace("\n");
|
||||||
|
}
|
||||||
|
ret=(*pPolyBezierTo)(hdc, lppt, cCount);
|
||||||
|
if(!ret)OutTraceE("PolyBezierTo: ERROR ret=%x\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int WINAPI extStretchDIBits(HDC hdc, int XDest, int YDest, int nDestWidth, int nDestHeight, int XSrc, int YSrc, int nSrcWidth, int nSrcHeight,
|
||||||
|
const VOID *lpBits, const BITMAPINFO *lpBitsInfo, UINT iUsage, DWORD dwRop)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
OutTraceD("StretchDIBits: hdc=%x dest=(%d,%d)-(%d,%d) src=(%d,%d)-(%d,%d) rop=%x(%s)\n",
|
||||||
|
hdc, XDest, YDest, nDestWidth, nDestHeight, XSrc, YSrc, nSrcWidth, nSrcHeight, dwRop, ExplainROP(dwRop));
|
||||||
|
|
||||||
|
if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdc))){
|
||||||
|
dxw.MapClient(&XDest, &YDest, &nDestWidth, &nDestHeight);
|
||||||
|
OutTraceD("StretchDIBits: fixed dest=(%d,%d)-(%d,%d)\n", XDest, YDest, nDestWidth, nDestHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret=(*pStretchDIBits)(hdc, XDest, YDest, nDestWidth, nDestHeight, XSrc, YSrc, nSrcWidth, nSrcHeight, lpBits, lpBitsInfo, iUsage, dwRop);
|
||||||
|
if(!ret || (ret==GDI_ERROR)) OutTraceE("StretchDIBits: ERROR ret=%x\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int WINAPI extSetDIBitsToDevice(HDC hdc, int XDest, int YDest, DWORD dwWidth, DWORD dwHeight, int XSrc, int YSrc, UINT uStartScan, UINT cScanLines,
|
||||||
|
const VOID *lpvBits, const BITMAPINFO *lpbmi, UINT fuColorUse)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
BITMAPINFOHEADER *bmi;
|
||||||
|
OutTraceD("SetDIBitsToDevice: hdc=%x dest=(%d,%d)-(%dx%d) src=(%d,%d)-(%dx%d)\n",
|
||||||
|
hdc, XDest, YDest, dwWidth, dwHeight, XSrc, YSrc, uStartScan, cScanLines);
|
||||||
|
bmi=(BITMAPINFOHEADER *)&(lpbmi->bmiHeader);
|
||||||
|
OutTraceD("SetDIBitsToDevice: BitmapInfo dim=(%dx%d) Planes=%d BPP=%d Compression=%x SizeImage=%x\n",
|
||||||
|
bmi->biWidth, bmi->biHeight, bmi->biPlanes, bmi->biBitCount, bmi->biCompression, bmi->biSizeImage);
|
||||||
|
|
||||||
|
if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdc))){
|
||||||
|
DWORD OrigWidth, OrigHeight;
|
||||||
|
int OrigXDest, OrigYDest;
|
||||||
|
OrigWidth=dwWidth;
|
||||||
|
OrigHeight=dwHeight;
|
||||||
|
OrigXDest=XDest;
|
||||||
|
OrigYDest=YDest;
|
||||||
|
dxw.MapClient(&XDest, &YDest, (int *)&dwWidth, (int *)&dwHeight);
|
||||||
|
OutTraceD("SetDIBitsToDevice: fixed dest=(%d,%d)-(%d,%d)\n", XDest, YDest, dwWidth, dwHeight);
|
||||||
|
HDC hTempDc;
|
||||||
|
HBITMAP hbmPic;
|
||||||
|
if(!(hTempDc=CreateCompatibleDC(hdc)))
|
||||||
|
OutTraceE("CreateCompatibleDC: ERROR err=%d at=%d\n", GetLastError(), __LINE__);
|
||||||
|
// tricky part: CreateCompatibleBitmap is needed to set the dc size, but it has to be performed
|
||||||
|
// against hdc to set for color depth, then selected (through SelectObject) against the temporary
|
||||||
|
// dc to assign the needed size and color space to the temporary dc.
|
||||||
|
if(!(hbmPic=CreateCompatibleBitmap(hdc, OrigWidth, OrigHeight)))
|
||||||
|
OutTraceE("CreateCompatibleBitmap: ERROR err=%d at=%d\n", GetLastError(), __LINE__);
|
||||||
|
if(!SelectObject(hTempDc, hbmPic))
|
||||||
|
OutTraceE("SelectObject: ERROR err=%d at=%d\n", GetLastError(), __LINE__);
|
||||||
|
if(!(*pSetDIBitsToDevice)(hTempDc, 0, 0, OrigWidth, OrigHeight, XSrc, YSrc, uStartScan, cScanLines, lpvBits, lpbmi, fuColorUse))
|
||||||
|
OutTraceE("SetDIBitsToDevice: ERROR err=%d at=%d\n", GetLastError(), __LINE__);
|
||||||
|
if(!(ret=(*pGDIStretchBlt)(hdc, XDest, YDest, dwWidth, dwHeight, hTempDc, 0, 0, OrigWidth, OrigHeight, SRCCOPY)))
|
||||||
|
OutTraceE("StretchBlt: ERROR err=%d at=%d\n", GetLastError(), __LINE__);
|
||||||
|
DeleteDC(hTempDc);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
ret=(*pSetDIBitsToDevice)(hdc, XDest, YDest, dwWidth, dwHeight, XSrc, YSrc, uStartScan, cScanLines, lpvBits, lpbmi, fuColorUse);
|
||||||
|
}
|
||||||
|
if(!ret || (ret==GDI_ERROR)) OutTraceE("SetDIBitsToDevice: ERROR ret=%x err=%d\n", ret, GetLastError());
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
//HBITMAP WINAPI extCreateCompatibleBitmap(HDC hdc, int nWidth, int nHeight)
|
||||||
|
//{
|
||||||
|
// HBITMAP ret;
|
||||||
|
// OutTraceD("CreateCompatibleBitmap: hdc=%x size=(%d,%d)\n",
|
||||||
|
// hdc, nWidth, nHeight);
|
||||||
|
//
|
||||||
|
// if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdc))){
|
||||||
|
// dxw.MapClient(&nWidth, &nHeight);
|
||||||
|
// OutTraceD("CreateCompatibleBitmap: fixed size=(%d,%d)\n", nWidth, nHeight);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// ret=(*pCreateCompatibleBitmap)(hdc, nWidth, nHeight);
|
||||||
|
// if(!ret) OutTraceE("CreateCompatibleBitmap: ERROR ret=%x err=%d\n", ret, GetLastError());
|
||||||
|
// return ret;
|
||||||
|
//}
|
||||||
|
|
||||||
|
COLORREF WINAPI extSetPixel(HDC hdc, int X, int Y, COLORREF crColor)
|
||||||
|
{
|
||||||
|
COLORREF ret;
|
||||||
|
OutTraceD("SetPixel: hdc=%x color=%x point=(%d,%d)\n", hdc, crColor, X, Y);
|
||||||
|
|
||||||
|
if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdc))){
|
||||||
|
dxw.MapClient(&X, &Y);
|
||||||
|
OutTraceD("SetPixel: fixed pos=(%d,%d)\n", X, Y);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret=(*pSetPixel)(hdc, X, Y, crColor);
|
||||||
|
// both 0x00000000 and 0xFFFFFFFF are legitimate colors and therefore valid return codes...
|
||||||
|
//if(ret==GDI_ERROR) OutTraceE("SetPixel: ERROR ret=%x err=%d\n", ret, GetLastError());
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL WINAPI extEllipse(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
OutTraceD("Ellipse: hdc=%x rect=(%d,%d)-(%d,%d)\n", hdc, nLeftRect, nTopRect, nRightRect, nBottomRect);
|
||||||
|
|
||||||
|
if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdc))){
|
||||||
|
dxw.MapClient(&nLeftRect, &nTopRect, &nRightRect, &nBottomRect);
|
||||||
|
OutTraceD("Ellipse: fixed dest=(%d,%d)-(%d,%d)\n", nLeftRect, nTopRect, nRightRect, nBottomRect);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret=(*pEllipse)(hdc, nLeftRect, nTopRect, nRightRect, nBottomRect);
|
||||||
|
if(!ret) OutTraceE("Ellipse: ERROR ret=%x err=%d\n", ret, GetLastError());
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL WINAPI extPolygon(HDC hdc, const POINT *lpPoints, int cCount)
|
||||||
|
{
|
||||||
|
BOOL ret;
|
||||||
|
if(IsTraceD){
|
||||||
|
int i;
|
||||||
|
OutTrace("Polygon: hdc=%x cCount=%d pt=", hdc, cCount);
|
||||||
|
for(i=0; i<cCount; i++) OutTrace("(%d,%d) ", lpPoints[i].x, lpPoints[i].y);
|
||||||
|
OutTrace("\n");
|
||||||
|
}
|
||||||
|
if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdc))){
|
||||||
|
int i;
|
||||||
|
OutTrace("Polygon: fixed cCount=%d pt=", cCount);
|
||||||
|
for(i=0; i<cCount; i++) {
|
||||||
|
dxw.MapClient((LPPOINT)&lpPoints[i]);
|
||||||
|
OutTrace("(%d,%d) ", lpPoints[i].x, lpPoints[i].y);
|
||||||
|
}
|
||||||
|
OutTrace("\n");
|
||||||
|
}
|
||||||
|
ret=(*pPolygon)(hdc, lpPoints, cCount);
|
||||||
|
if(!ret)OutTraceE("Polygon: ERROR ret=%x\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL WINAPI extArc(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, int nXStartArc, int nYStartArc, int nXEndArc, int nYEndArc)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
OutTraceD("Arc: hdc=%x rect=(%d,%d)-(%d,%d) start=(%d,%d) end=(%d,%d)\n",
|
||||||
|
hdc, nLeftRect, nTopRect, nRightRect, nBottomRect, nXStartArc, nYStartArc, nXEndArc, nYEndArc);
|
||||||
|
|
||||||
|
if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdc))){
|
||||||
|
dxw.MapClient(&nLeftRect, &nTopRect, &nRightRect, &nBottomRect);
|
||||||
|
dxw.MapClient(&nXStartArc, &nYStartArc, &nXEndArc, &nYEndArc);
|
||||||
|
OutTraceD("Arc: fixed rect=(%d,%d)-(%d,%d) start=(%d,%d) end=(%d,%d)\n",
|
||||||
|
nLeftRect, nTopRect, nRightRect, nBottomRect, nXStartArc, nYStartArc, nXEndArc, nYEndArc);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret=(*pArc)(hdc, nLeftRect, nTopRect, nRightRect, nBottomRect, nXStartArc, nYStartArc, nXEndArc, nYEndArc);
|
||||||
|
if(!ret) OutTraceE("Arc: ERROR ret=%x err=%d\n", ret, GetLastError());
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRGN WINAPI extCreateEllipticRgn(int nLeftRect, int nTopRect, int nRightRect, int nBottomRect)
|
||||||
|
{
|
||||||
|
HRGN ret;
|
||||||
|
OutTraceD("CreateEllipticRgn: rect=(%d,%d)-(%d,%d)\n", nLeftRect, nTopRect, nRightRect, nBottomRect);
|
||||||
|
|
||||||
|
if (dxw.IsFullScreen()){
|
||||||
|
dxw.MapClient(&nLeftRect, &nTopRect, &nRightRect, &nBottomRect);
|
||||||
|
OutTraceD("CreateEllipticRgn: fixed rect=(%d,%d)-(%d,%d)\n", nLeftRect, nTopRect, nRightRect, nBottomRect);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret=(*pCreateEllipticRgn)(nLeftRect, nTopRect, nRightRect, nBottomRect);
|
||||||
|
if(!ret) OutTraceE("CreateEllipticRgn: ERROR ret=%x err=%d\n", ret, GetLastError());
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRGN WINAPI extCreateEllipticRgnIndirect(const RECT *lprc)
|
||||||
|
{
|
||||||
|
HRGN ret;
|
||||||
|
OutTraceD("CreateEllipticRgnIndirect: rect=(%d,%d)-(%d,%d)\n", lprc->left, lprc->top, lprc->right, lprc->bottom);
|
||||||
|
|
||||||
|
if (dxw.IsFullScreen()){
|
||||||
|
dxw.MapClient((RECT *)lprc);
|
||||||
|
OutTraceD("CreateEllipticRgnIndirect: fixed rect=(%d,%d)-(%d,%d)\n", lprc->left, lprc->top, lprc->right, lprc->bottom);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret=(*pCreateEllipticRgnIndirect)(lprc);
|
||||||
|
if(!ret) OutTraceE("CreateEllipticRgnIndirect: ERROR ret=%x err=%d\n", ret, GetLastError());
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRGN WINAPI extCreateRectRgn(int nLeftRect, int nTopRect, int nRightRect, int nBottomRect)
|
||||||
|
{
|
||||||
|
HRGN ret;
|
||||||
|
OutTraceD("CreateRectRgn: rect=(%d,%d)-(%d,%d)\n", nLeftRect, nTopRect, nRightRect, nBottomRect);
|
||||||
|
|
||||||
|
if (dxw.IsFullScreen()){
|
||||||
|
dxw.MapClient(&nLeftRect, &nTopRect, &nRightRect, &nBottomRect);
|
||||||
|
OutTraceD("CreateRectRgn: fixed rect=(%d,%d)-(%d,%d)\n", nLeftRect, nTopRect, nRightRect, nBottomRect);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret=(*pCreateRectRgn)(nLeftRect, nTopRect, nRightRect, nBottomRect);
|
||||||
|
if(!ret) OutTraceE("CreateRectRgn: ERROR ret=%x err=%d\n", ret, GetLastError());
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRGN WINAPI extCreateRectRgnIndirect(const RECT *lprc)
|
||||||
|
{
|
||||||
|
HRGN ret;
|
||||||
|
OutTraceD("CreateRectRgnIndirect: rect=(%d,%d)-(%d,%d)\n", lprc->left, lprc->top, lprc->right, lprc->bottom);
|
||||||
|
|
||||||
|
if (dxw.IsFullScreen()){
|
||||||
|
dxw.MapClient((RECT *)lprc);
|
||||||
|
OutTraceD("CreateRectRgnIndirect: fixed rect=(%d,%d)-(%d,%d)\n", lprc->left, lprc->top, lprc->right, lprc->bottom);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret=(*pCreateRectRgnIndirect)(lprc);
|
||||||
|
if(!ret) OutTraceE("CreateRectRgnIndirect: ERROR ret=%x err=%d\n", ret, GetLastError());
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRGN WINAPI extCreatePolygonRgn(const POINT *lpPoints, int cPoints, int fnPolyFillMode)
|
||||||
|
{
|
||||||
|
HRGN ret;
|
||||||
|
if(IsTraceD){
|
||||||
|
int i;
|
||||||
|
OutTrace("CreatePolygonRgn: PolyFillMode=%x cCount=%d pt=", fnPolyFillMode, cPoints);
|
||||||
|
for(i=0; i<cPoints; i++) OutTrace("(%d,%d) ", lpPoints[i].x, lpPoints[i].y);
|
||||||
|
OutTrace("\n");
|
||||||
|
}
|
||||||
|
if (dxw.IsFullScreen()){
|
||||||
|
int i;
|
||||||
|
OutTrace("CreatePolygonRgn: fixed cCount=%d pt=", cPoints);
|
||||||
|
for(i=0; i<cPoints; i++) {
|
||||||
|
dxw.MapClient((LPPOINT)&lpPoints[i]);
|
||||||
|
OutTrace("(%d,%d) ", lpPoints[i].x, lpPoints[i].y);
|
||||||
|
}
|
||||||
|
OutTrace("\n");
|
||||||
|
}
|
||||||
|
ret=(*pCreatePolygonRgn)(lpPoints, cPoints, fnPolyFillMode);
|
||||||
|
if(!ret)OutTraceE("CreatePolygonRgn: ERROR ret=%x\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int WINAPI extDrawText(HDC hdc, LPCTSTR lpchText, int nCount, LPRECT lpRect, UINT uFormat)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
OutTraceD("DrawText: hdc=%x rect=(%d,%d)-(%d,%d) Format=%x Text=(%d)\"%s\"\n",
|
||||||
|
hdc, lpRect->left, lpRect->top, lpRect->right, lpRect->bottom, uFormat, nCount, lpchText);
|
||||||
|
|
||||||
|
if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdc))){
|
||||||
|
dxw.MapClient((RECT *)lpRect);
|
||||||
|
OutTraceD("DrawText: fixed rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret=(*pDrawText)(hdc, lpchText, nCount, lpRect, uFormat);
|
||||||
|
if(!ret) OutTraceE("DrawText: ERROR ret=%x err=%d\n", ret, GetLastError());
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int WINAPI extDrawTextEx(HDC hdc, LPTSTR lpchText, int nCount, LPRECT lpRect, UINT dwDTFormat, LPDRAWTEXTPARAMS lpDTParams)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
OutTraceD("DrawTextEx: hdc=%x rect=(%d,%d)-(%d,%d) DTFormat=%x Text=(%d)\"%s\"\n",
|
||||||
|
hdc, lpRect->left, lpRect->top, lpRect->right, lpRect->bottom, dwDTFormat, nCount, lpchText);
|
||||||
|
|
||||||
|
if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdc))){
|
||||||
|
dxw.MapClient((RECT *)lpRect);
|
||||||
|
OutTraceD("DrawTextEx: fixed rect=(%d,%d)-(%d,%d)\n", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret=(*pDrawTextEx)(hdc, lpchText, nCount, lpRect, dwDTFormat, lpDTParams);
|
||||||
|
if(!ret) OutTraceE("DrawTextEx: ERROR ret=%x err=%d\n", ret, GetLastError());
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL WINAPI extMaskBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HDC hdcSrc,
|
||||||
|
int nXSrc, int nYSrc, HBITMAP hbmMask, int xMask, int yMask, DWORD dwRop)
|
||||||
|
{
|
||||||
|
BOOL ret;
|
||||||
|
OutTraceD("MaskBlt: hdcDest=%x pos=(%d,%d) size=(%dx%d) hdcSrc=%x pos=(%d,%d) hbmMask=%x Mask=(%d,%d) dwRop=%x\n",
|
||||||
|
hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, hbmMask, xMask, yMask, dwRop);
|
||||||
|
|
||||||
|
if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdcDest))){
|
||||||
|
dxw.MapClient(&nXDest, &nYDest, &nWidth, &nHeight);
|
||||||
|
OutTraceD("MaskBlt: fixed pos=(%d,%d) size=(%dx%d)\n", nXDest, nYDest, nWidth, nHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret=(*pMaskBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, hbmMask, xMask, yMask, dwRop);
|
||||||
|
if(!ret) OutTraceE("MaskBlt: ERROR ret=%x err=%d\n", ret, GetLastError());
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
// to map:
|
||||||
|
// GetCurrentPositionEx
|
||||||
|
// GetViewportExtEx
|
||||||
|
// DPtoLP
|
||||||
|
// GetWindowOrgEx
|
||||||
|
// LPtoDP
|
||||||
|
// OffsetViewportOrgEx
|
||||||
|
// OffsetWindowOrgEx
|
||||||
|
// TransparentBlt
|
||||||
|
// to do: eliminate FIXTEXTOUT handling
|
||||||
|
|
||||||
|
BOOL SetTextJustification(
|
||||||
|
_In_ HDC hdc,
|
||||||
|
_In_ int nBreakExtra, <----
|
||||||
|
_In_ int nBreakCount
|
||||||
|
);
|
||||||
|
#endif
|
@ -602,7 +602,7 @@ HRESULT WINAPI extQueryInterfaceDProxy(void *lpdd, REFIID riid, LPVOID *obp)
|
|||||||
{
|
{
|
||||||
HRESULT res;
|
HRESULT res;
|
||||||
unsigned int dxVersion;
|
unsigned int dxVersion;
|
||||||
OutTraceP("QueryInterface(D): PROXED lpdd=%x REFIID=%x(%s)\n", lpdd, riid.Data1, ExplainGUID((GUID *)&riid.Data1));
|
OutTraceP("QueryInterface(D): PROXED lpdd=%x REFIID=%x(%s) obp=%x\n", lpdd, riid.Data1, ExplainGUID((GUID *)&riid.Data1), *obp);
|
||||||
res = (*pQueryInterfaceD)(lpdd, riid, obp);
|
res = (*pQueryInterfaceD)(lpdd, riid, obp);
|
||||||
if(res) {
|
if(res) {
|
||||||
OutTraceP("QueryInterface(D): ret=%x(%s)\n", res, ExplainDDError(res));
|
OutTraceP("QueryInterface(D): ret=%x(%s)\n", res, ExplainDDError(res));
|
||||||
@ -1748,7 +1748,6 @@ static void HookDDSessionProxy(LPDIRECTDRAW *lplpdd, int dxVersion)
|
|||||||
HRESULT WINAPI extDirectDrawCreateProxy(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplpdd, IUnknown FAR *pu)
|
HRESULT WINAPI extDirectDrawCreateProxy(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplpdd, IUnknown FAR *pu)
|
||||||
{
|
{
|
||||||
HRESULT res;
|
HRESULT res;
|
||||||
int DDVersion;
|
|
||||||
|
|
||||||
OutTraceP("DirectDrawCreate: PROXED guid=%x(%s)\n",
|
OutTraceP("DirectDrawCreate: PROXED guid=%x(%s)\n",
|
||||||
lpguid, ExplainGUID(lpguid));
|
lpguid, ExplainGUID(lpguid));
|
||||||
@ -1759,19 +1758,26 @@ HRESULT WINAPI extDirectDrawCreateProxy(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplp
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
DDVersion=1;
|
dxw.dwDDVersion=1;
|
||||||
if (lpguid) switch (*(DWORD *)lpguid){
|
char *mode;
|
||||||
case 0x6C14DB80: DDVersion=1; break;
|
switch ((DWORD)lpguid){
|
||||||
case 0xB3A6F3E0: DDVersion=2; break;
|
case 0: mode="NULL"; break;
|
||||||
case 0x9c59509a: DDVersion=4; break;
|
case DDCREATE_HARDWAREONLY: mode="DDCREATE_HARDWAREONLY"; break;
|
||||||
case 0x15e65ec0: DDVersion=7; break;
|
case DDCREATE_EMULATIONONLY: mode="DDCREATE_EMULATIONONLY"; break;
|
||||||
|
default:
|
||||||
|
switch (*(DWORD *)lpguid){
|
||||||
|
case 0x6C14DB80: dxw.dwDDVersion=1; mode="IID_IDirectDraw"; break;
|
||||||
|
case 0xB3A6F3E0: dxw.dwDDVersion=2; mode="IID_IDirectDraw2"; break;
|
||||||
|
case 0x9c59509a: dxw.dwDDVersion=4; mode="IID_IDirectDraw4"; break;
|
||||||
|
case 0x15e65ec0: dxw.dwDDVersion=7; mode="IID_IDirectDraw7"; break;
|
||||||
|
default: mode="unknown"; break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
OutTraceP("DirectDrawCreateEx: lpdd=%x guid=%s DDVersion=%d\n", *lplpdd, mode, dxw.dwDDVersion);
|
||||||
OutTraceP("DirectDrawCreate: lpdd=%x guid=%x DDVersion=%d\n",
|
|
||||||
*lplpdd, (lpguid ? *(DWORD *)lpguid:0), DDVersion);
|
|
||||||
|
|
||||||
#ifdef HOOKDDRAW
|
#ifdef HOOKDDRAW
|
||||||
HookDDSessionProxy(lplpdd, DDVersion);
|
HookDDSessionProxy(lplpdd, dxw.dwDDVersion);
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1779,31 +1785,38 @@ HRESULT WINAPI extDirectDrawCreateProxy(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplp
|
|||||||
HRESULT WINAPI extDirectDrawCreateExProxy(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplpdd, REFIID RefIid, IUnknown FAR *pu)
|
HRESULT WINAPI extDirectDrawCreateExProxy(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplpdd, REFIID RefIid, IUnknown FAR *pu)
|
||||||
{
|
{
|
||||||
HRESULT res;
|
HRESULT res;
|
||||||
int DDVersion;
|
|
||||||
|
|
||||||
OutTraceP("DirectDrawCreateEx: PROXED guid=%x(%s) refiid=%x\n",
|
OutTraceP("DirectDrawCreateEx: PROXED guid=%x(%s) refiid=%x\n",
|
||||||
lpguid, ExplainGUID(lpguid), RefIid);
|
lpguid, ExplainGUID(lpguid), RefIid);
|
||||||
|
|
||||||
res = (*pDirectDrawCreate)(lpguid, lplpdd, pu);
|
res = (*pDirectDrawCreateEx)(lpguid, lplpdd, RefIid, pu);
|
||||||
if(res) {
|
if(res) {
|
||||||
OutTraceP("DirectDrawCreateEx: ERROR res=%x(%s)\n", res, ExplainDDError(res));
|
OutTraceP("DirectDrawCreateEx: ERROR res=%x(%s)\n", res, ExplainDDError(res));
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
DDVersion=1;
|
dxw.dwDDVersion=7;
|
||||||
if (lpguid) switch (*(DWORD *)lpguid){
|
char *mode;
|
||||||
case 0x6C14DB80: DDVersion=1; break;
|
switch ((DWORD)lpguid){
|
||||||
case 0xB3A6F3E0: DDVersion=2; break;
|
case 0: mode="NULL"; break;
|
||||||
case 0x9c59509a: DDVersion=4; break;
|
case DDCREATE_HARDWAREONLY: mode="DDCREATE_HARDWAREONLY"; break;
|
||||||
case 0x15e65ec0: DDVersion=7; break;
|
case DDCREATE_EMULATIONONLY: mode="DDCREATE_EMULATIONONLY"; break;
|
||||||
|
default:
|
||||||
|
switch (*(DWORD *)lpguid){
|
||||||
|
case 0x6C14DB80: dxw.dwDDVersion=1; mode="IID_IDirectDraw"; break;
|
||||||
|
case 0xB3A6F3E0: dxw.dwDDVersion=2; mode="IID_IDirectDraw2"; break;
|
||||||
|
case 0x9c59509a: dxw.dwDDVersion=4; mode="IID_IDirectDraw4"; break;
|
||||||
|
case 0x15e65ec0: dxw.dwDDVersion=7; mode="IID_IDirectDraw7"; break;
|
||||||
|
default: mode="unknown"; break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
OutTraceP("DirectDrawCreateEx: lpdd=%x guid=%s DDVersion=%d\n", *lplpdd, mode, dxw.dwDDVersion);
|
||||||
OutTraceP("DirectDrawCreateEx: lpdd=%x guid=%x DDVersion=%d\n",
|
|
||||||
*lplpdd, (lpguid ? *(DWORD *)lpguid:0), DDVersion);
|
|
||||||
|
|
||||||
#ifdef HOOKDDRAW
|
#ifdef HOOKDDRAW
|
||||||
HookDDSessionProxy(lplpdd, DDVersion);
|
HookDDSessionProxy(lplpdd, dxw.dwDDVersion);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -247,15 +247,22 @@ void WINAPI extglClear(GLbitfield mask)
|
|||||||
HGLRC WINAPI extwglCreateContext(HDC hdc)
|
HGLRC WINAPI extwglCreateContext(HDC hdc)
|
||||||
{
|
{
|
||||||
HGLRC ret;
|
HGLRC ret;
|
||||||
|
OutTraceD("wglCreateContext: hdc=%x\n", hdc);
|
||||||
|
// v2.02.31: don't let it use desktop hdc
|
||||||
|
if(dxw.IsDesktop(WindowFromDC(hdc))){
|
||||||
|
HDC oldhdc = hdc;
|
||||||
|
hdc=(*pGDIGetDC)(dxw.GethWnd());
|
||||||
|
OutTraceD("wglCreateContext: remapped desktop hdc=%x->%x\n", oldhdc, hdc);
|
||||||
|
}
|
||||||
ret=(*pwglCreateContext)(hdc);
|
ret=(*pwglCreateContext)(hdc);
|
||||||
if(ret!=NULL){
|
if(ret){
|
||||||
HWND hwnd;
|
HWND hwnd;
|
||||||
hwnd=WindowFromDC(hdc);
|
hwnd=WindowFromDC(hdc);
|
||||||
dxw.SethWnd(hwnd);
|
dxw.SethWnd(hwnd);
|
||||||
OutTraceD("wglCreateContext: hdc=%x hwnd=%x\n", hdc, hwnd);
|
OutTraceD("wglCreateContext: SET hwnd=%x\n", hwnd);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
OutTraceD("wglCreateContext: ERROR hdc=%x err=%x\n", hdc, GetLastError());
|
OutTraceD("wglCreateContext: ERROR err=%x\n", GetLastError());
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -281,6 +288,12 @@ BOOL WINAPI extwglMakeCurrent(HDC hdc, HGLRC hglrc)
|
|||||||
BOOL ret;
|
BOOL ret;
|
||||||
|
|
||||||
OutTraceD("wglMakeCurrent: hdc=%x hglrc=%x\n", hdc, hglrc);
|
OutTraceD("wglMakeCurrent: hdc=%x hglrc=%x\n", hdc, hglrc);
|
||||||
|
// v2.02.31: don't let it use desktop hdc
|
||||||
|
if(dxw.IsDesktop(WindowFromDC(hdc))){
|
||||||
|
HDC oldhdc = hdc;
|
||||||
|
hdc=(*pGDIGetDC)(dxw.GethWnd());
|
||||||
|
OutTraceD("wglMakeCurrent: remapped desktop hdc=%x->%x\n", oldhdc, hdc);
|
||||||
|
}
|
||||||
ret=(*pwglMakeCurrent)(hdc, hglrc);
|
ret=(*pwglMakeCurrent)(hdc, hglrc);
|
||||||
if(ret){
|
if(ret){
|
||||||
HWND hWnd;
|
HWND hWnd;
|
||||||
|
@ -18,6 +18,7 @@ type definitions
|
|||||||
// advapi32.dll
|
// advapi32.dll
|
||||||
|
|
||||||
typedef LONG (WINAPI *RegCloseKey_Type)(HKEY);
|
typedef LONG (WINAPI *RegCloseKey_Type)(HKEY);
|
||||||
|
typedef LONG (WINAPI *RegCreateKey_Type)(HKEY, LPCTSTR, PHKEY);
|
||||||
typedef LONG (WINAPI *RegCreateKeyEx_Type)(HKEY, LPCTSTR, DWORD, LPTSTR, DWORD, REGSAM, LPSECURITY_ATTRIBUTES, PHKEY, LPDWORD);
|
typedef LONG (WINAPI *RegCreateKeyEx_Type)(HKEY, LPCTSTR, DWORD, LPTSTR, DWORD, REGSAM, LPSECURITY_ATTRIBUTES, PHKEY, LPDWORD);
|
||||||
typedef LONG (WINAPI *RegOpenKeyEx_Type)(HKEY, LPCTSTR, DWORD, REGSAM, PHKEY);
|
typedef LONG (WINAPI *RegOpenKeyEx_Type)(HKEY, LPCTSTR, DWORD, REGSAM, PHKEY);
|
||||||
typedef LONG (WINAPI *RegQueryValueEx_Type)(HKEY, LPCTSTR, LPDWORD, LPDWORD, LPBYTE, LPDWORD);
|
typedef LONG (WINAPI *RegQueryValueEx_Type)(HKEY, LPCTSTR, LPDWORD, LPDWORD, LPBYTE, LPDWORD);
|
||||||
@ -43,10 +44,12 @@ typedef HFONT (WINAPI *CreateFontIndirect_Type)(const LOGFONT*);
|
|||||||
typedef HPALETTE(WINAPI *GDICreatePalette_Type)(CONST LOGPALETTE *);
|
typedef HPALETTE(WINAPI *GDICreatePalette_Type)(CONST LOGPALETTE *);
|
||||||
typedef HDWP (WINAPI *DeferWindowPos_Type)(HDWP, HWND, HWND, int, int, int, int, UINT);
|
typedef HDWP (WINAPI *DeferWindowPos_Type)(HDWP, HWND, HWND, int, int, int, int, UINT);
|
||||||
typedef BOOL (WINAPI *DeleteDC_Type)(HDC);
|
typedef BOOL (WINAPI *DeleteDC_Type)(HDC);
|
||||||
|
typedef int (WINAPI *GetClipBox_Type)(HDC, LPRECT);
|
||||||
typedef int (WINAPI *GetDeviceCaps_Type)(HDC, int);
|
typedef int (WINAPI *GetDeviceCaps_Type)(HDC, int);
|
||||||
typedef BOOL (WINAPI *GetDeviceGammaRamp_Type)(HDC, LPVOID);
|
typedef BOOL (WINAPI *GetDeviceGammaRamp_Type)(HDC, LPVOID);
|
||||||
typedef BOOL (WINAPI *GetSystemPaletteEntries_Type)(HDC, UINT, UINT, LPPALETTEENTRY);
|
typedef BOOL (WINAPI *GetSystemPaletteEntries_Type)(HDC, UINT, UINT, LPPALETTEENTRY);
|
||||||
typedef BOOL (WINAPI *PatBlt_Type)(HDC, int, int, int, int, DWORD);
|
typedef BOOL (WINAPI *PatBlt_Type)(HDC, int, int, int, int, DWORD);
|
||||||
|
typedef BOOL (WINAPI *Polyline_Type)(HDC, const POINT *, int);
|
||||||
typedef UINT (WINAPI *RealizePalette_Type)(HDC);
|
typedef UINT (WINAPI *RealizePalette_Type)(HDC);
|
||||||
typedef BOOL (WINAPI *Rectangle_Type)(HDC, int, int, int, int);
|
typedef BOOL (WINAPI *Rectangle_Type)(HDC, int, int, int, int);
|
||||||
typedef BOOL (WINAPI *RestoreDC_Type)(HDC, int);
|
typedef BOOL (WINAPI *RestoreDC_Type)(HDC, int);
|
||||||
@ -57,8 +60,28 @@ typedef COLORREF (WINAPI *SetBkColor_Type)(HDC, COLORREF);
|
|||||||
typedef BOOL (WINAPI *SetDeviceGammaRamp_Type)(HDC, LPVOID);
|
typedef BOOL (WINAPI *SetDeviceGammaRamp_Type)(HDC, LPVOID);
|
||||||
typedef COLORREF(WINAPI *SetTextColor_Type)(HDC, COLORREF);
|
typedef COLORREF(WINAPI *SetTextColor_Type)(HDC, COLORREF);
|
||||||
typedef BOOL (WINAPI *StretchBlt_Type)(HDC, int, int, int, int, HDC, int, int, int, int, DWORD);
|
typedef BOOL (WINAPI *StretchBlt_Type)(HDC, int, int, int, int, HDC, int, int, int, int, DWORD);
|
||||||
typedef LONG (WINAPI *TabbedTextOutA_Type)(HDC, int, int, LPCTSTR, int, int, const LPINT, int);
|
typedef int (WINAPI *StretchDIBits_Type)(HDC, int, int, int, int, int, int, int, int, const VOID *, const BITMAPINFO *, UINT, DWORD);
|
||||||
typedef BOOL (WINAPI *TextOut_Type)(HDC, int, int, LPCTSTR, int);
|
typedef BOOL (WINAPI *TextOut_Type)(HDC, int, int, LPCTSTR, int);
|
||||||
|
typedef BOOL (WINAPI *PolyBezierTo_Type)(HDC, const POINT *, DWORD);
|
||||||
|
typedef BOOL (WINAPI *PolylineTo_Type)(HDC, const POINT *, DWORD);
|
||||||
|
typedef BOOL (WINAPI *PolyDraw_Type)(HDC, const POINT *, const BYTE *, int);
|
||||||
|
typedef BOOL (WINAPI *MoveToEx_Type)(HDC, int, int, LPPOINT);
|
||||||
|
typedef BOOL (WINAPI *ArcTo_Type)(HDC, int, int, int, int, int, int, int, int);
|
||||||
|
typedef BOOL (WINAPI *LineTo_Type)(HDC, int, int);
|
||||||
|
typedef int (WINAPI *SetDIBitsToDevice_Type)(HDC, int, int, DWORD, DWORD, int, int, UINT, UINT, const VOID *, const BITMAPINFO *, UINT);
|
||||||
|
typedef HBITMAP (WINAPI *CreateCompatibleBitmap_Type)(HDC, int, int);
|
||||||
|
typedef COLORREF(WINAPI *SetPixel_Type)(HDC, int, int, COLORREF);
|
||||||
|
typedef BOOL (WINAPI *Ellipse_Type)(HDC, int, int, int, int);
|
||||||
|
typedef BOOL (WINAPI *Polygon_Type)(HDC, const POINT *, int);
|
||||||
|
typedef BOOL (WINAPI *Arc_Type)(HDC, int, int, int, int, int, int, int, int);
|
||||||
|
typedef HRGN (WINAPI *CreateEllipticRgn_Type)(int, int, int, int);
|
||||||
|
typedef HRGN (WINAPI *CreateEllipticRgnIndirect_Type)(const RECT *);
|
||||||
|
typedef HRGN (WINAPI *CreateRectRgn_Type)(int, int, int, int);
|
||||||
|
typedef HRGN (WINAPI *CreateRectRgnIndirect_Type)(const RECT *);
|
||||||
|
typedef HRGN (WINAPI *CreatePolygonRgn_Type)(const POINT *, int, int);
|
||||||
|
typedef int (WINAPI *DrawText_Type)(HDC, LPCTSTR, int, LPRECT, UINT);
|
||||||
|
typedef int (WINAPI *DrawTextEx_Type)(HDC, LPTSTR, int, LPRECT, UINT, LPDRAWTEXTPARAMS);
|
||||||
|
typedef BOOL (WINAPI *MaskBlt_Type)(HDC, int, int, int, int, HDC, int, int, HBITMAP, int, int, DWORD);
|
||||||
|
|
||||||
// Kernel32.dll:
|
// Kernel32.dll:
|
||||||
typedef BOOL (WINAPI *GetDiskFreeSpaceA_Type)(LPCSTR, LPDWORD, LPDWORD, LPDWORD, LPDWORD);
|
typedef BOOL (WINAPI *GetDiskFreeSpaceA_Type)(LPCSTR, LPDWORD, LPDWORD, LPDWORD, LPDWORD);
|
||||||
@ -99,6 +122,7 @@ typedef LRESULT (WINAPI *DefWindowProc_Type)(HWND, UINT, WPARAM, LPARAM);
|
|||||||
typedef BOOL (WINAPI *EndPaint_Type)(HWND, const PAINTSTRUCT *);
|
typedef BOOL (WINAPI *EndPaint_Type)(HWND, const PAINTSTRUCT *);
|
||||||
typedef LONG (WINAPI *EnumDisplaySettings_Type)(LPCTSTR, DWORD, LPDEVMODEA);
|
typedef LONG (WINAPI *EnumDisplaySettings_Type)(LPCTSTR, DWORD, LPDEVMODEA);
|
||||||
typedef int (WINAPI *FillRect_Type)(HDC, const RECT *, HBRUSH);
|
typedef int (WINAPI *FillRect_Type)(HDC, const RECT *, HBRUSH);
|
||||||
|
typedef int (WINAPI *FrameRect_Type)(HDC, const RECT *, HBRUSH);
|
||||||
typedef BOOL (WINAPI *GetClientRect_Type)(HWND, LPRECT);
|
typedef BOOL (WINAPI *GetClientRect_Type)(HWND, LPRECT);
|
||||||
typedef BOOL (WINAPI *GetClipCursor_Type)(LPRECT);
|
typedef BOOL (WINAPI *GetClipCursor_Type)(LPRECT);
|
||||||
typedef BOOL (WINAPI *GetCursorPos_Type)(LPPOINT);
|
typedef BOOL (WINAPI *GetCursorPos_Type)(LPPOINT);
|
||||||
@ -124,6 +148,9 @@ typedef LONG (WINAPI *SetWindowLong_Type)(HWND, int, LONG);
|
|||||||
typedef BOOL (WINAPI *SetWindowPos_Type)(HWND, HWND, int, int, int, int, UINT);
|
typedef BOOL (WINAPI *SetWindowPos_Type)(HWND, HWND, int, int, int, int, UINT);
|
||||||
typedef int (WINAPI *ShowCursor_Type)(BOOL);
|
typedef int (WINAPI *ShowCursor_Type)(BOOL);
|
||||||
typedef BOOL (WINAPI *ShowWindow_Type)(HWND, int);
|
typedef BOOL (WINAPI *ShowWindow_Type)(HWND, int);
|
||||||
|
typedef LONG (WINAPI *TabbedTextOutA_Type)(HDC, int, int, LPCTSTR, int, int, const LPINT, int);
|
||||||
|
typedef BOOL (WINAPI *DestroyWindow_Type)(HWND);
|
||||||
|
typedef BOOL (WINAPI *CloseWindow_Type)(HWND);
|
||||||
|
|
||||||
// Winmm.dll:
|
// Winmm.dll:
|
||||||
typedef MCIERROR(WINAPI *mciSendCommand_Type)(MCIDEVICEID, UINT, DWORD_PTR, DWORD_PTR);
|
typedef MCIERROR(WINAPI *mciSendCommand_Type)(MCIDEVICEID, UINT, DWORD_PTR, DWORD_PTR);
|
||||||
@ -148,6 +175,7 @@ hooked APIs real pointers
|
|||||||
// advapi32.dll
|
// advapi32.dll
|
||||||
|
|
||||||
DXWEXTERN RegCloseKey_Type pRegCloseKey DXWINITIALIZED;
|
DXWEXTERN RegCloseKey_Type pRegCloseKey DXWINITIALIZED;
|
||||||
|
DXWEXTERN RegCreateKey_Type pRegCreateKey DXWINITIALIZED;
|
||||||
DXWEXTERN RegCreateKeyEx_Type pRegCreateKeyEx DXWINITIALIZED;
|
DXWEXTERN RegCreateKeyEx_Type pRegCreateKeyEx DXWINITIALIZED;
|
||||||
DXWEXTERN RegOpenKeyEx_Type pRegOpenKeyEx DXWINITIALIZED;
|
DXWEXTERN RegOpenKeyEx_Type pRegOpenKeyEx DXWINITIALIZED;
|
||||||
DXWEXTERN RegQueryValueEx_Type pRegQueryValueEx DXWINITIALIZED;
|
DXWEXTERN RegQueryValueEx_Type pRegQueryValueEx DXWINITIALIZED;
|
||||||
@ -173,10 +201,12 @@ DXWEXTERN CreateFontIndirect_Type pGDICreateFontIndirect DXWINITIALIZED;
|
|||||||
DXWEXTERN GDICreatePalette_Type pGDICreatePalette DXWINITIALIZED;
|
DXWEXTERN GDICreatePalette_Type pGDICreatePalette DXWINITIALIZED;
|
||||||
DXWEXTERN DeferWindowPos_Type pGDIDeferWindowPos DXWINITIALIZED;
|
DXWEXTERN DeferWindowPos_Type pGDIDeferWindowPos DXWINITIALIZED;
|
||||||
DXWEXTERN DeleteDC_Type pGDIDeleteDC DXWINITIALIZED;
|
DXWEXTERN DeleteDC_Type pGDIDeleteDC DXWINITIALIZED;
|
||||||
|
DXWEXTERN GetClipBox_Type pGDIGetClipBox DXWINITIALIZED;
|
||||||
DXWEXTERN GetDeviceCaps_Type pGDIGetDeviceCaps DXWINITIALIZED;
|
DXWEXTERN GetDeviceCaps_Type pGDIGetDeviceCaps DXWINITIALIZED;
|
||||||
DXWEXTERN GetDeviceGammaRamp_Type pGDIGetDeviceGammaRamp DXWINITIALIZED;
|
DXWEXTERN GetDeviceGammaRamp_Type pGDIGetDeviceGammaRamp DXWINITIALIZED;
|
||||||
DXWEXTERN GetSystemPaletteEntries_Type pGDIGetSystemPaletteEntries DXWINITIALIZED;
|
DXWEXTERN GetSystemPaletteEntries_Type pGDIGetSystemPaletteEntries DXWINITIALIZED;
|
||||||
DXWEXTERN PatBlt_Type pGDIPatBlt DXWINITIALIZED;
|
DXWEXTERN PatBlt_Type pGDIPatBlt DXWINITIALIZED;
|
||||||
|
DXWEXTERN Polyline_Type pPolyline DXWINITIALIZED;
|
||||||
DXWEXTERN RealizePalette_Type pGDIRealizePalette DXWINITIALIZED;
|
DXWEXTERN RealizePalette_Type pGDIRealizePalette DXWINITIALIZED;
|
||||||
DXWEXTERN Rectangle_Type pGDIRectangle DXWINITIALIZED;
|
DXWEXTERN Rectangle_Type pGDIRectangle DXWINITIALIZED;
|
||||||
DXWEXTERN RestoreDC_Type pGDIRestoreDC DXWINITIALIZED;
|
DXWEXTERN RestoreDC_Type pGDIRestoreDC DXWINITIALIZED;
|
||||||
@ -187,8 +217,28 @@ DXWEXTERN SetBkColor_Type pGDISetBkColor DXWINITIALIZED;
|
|||||||
DXWEXTERN SetDeviceGammaRamp_Type pGDISetDeviceGammaRamp DXWINITIALIZED;
|
DXWEXTERN SetDeviceGammaRamp_Type pGDISetDeviceGammaRamp DXWINITIALIZED;
|
||||||
DXWEXTERN SetTextColor_Type pGDISetTextColor DXWINITIALIZED;
|
DXWEXTERN SetTextColor_Type pGDISetTextColor DXWINITIALIZED;
|
||||||
DXWEXTERN StretchBlt_Type pGDIStretchBlt DXWINITIALIZED;
|
DXWEXTERN StretchBlt_Type pGDIStretchBlt DXWINITIALIZED;
|
||||||
DXWEXTERN TabbedTextOutA_Type pTabbedTextOutA DXWINITIALIZED;
|
DXWEXTERN StretchDIBits_Type pStretchDIBits DXWINITIALIZED;
|
||||||
DXWEXTERN TextOut_Type pGDITextOutA DXWINITIALIZED;
|
DXWEXTERN TextOut_Type pGDITextOutA DXWINITIALIZED;
|
||||||
|
DXWEXTERN LineTo_Type pLineTo DXWINITIALIZED;
|
||||||
|
DXWEXTERN ArcTo_Type pArcTo DXWINITIALIZED;
|
||||||
|
DXWEXTERN MoveToEx_Type pMoveToEx DXWINITIALIZED;
|
||||||
|
DXWEXTERN PolyDraw_Type pPolyDraw DXWINITIALIZED;
|
||||||
|
DXWEXTERN PolylineTo_Type pPolylineTo DXWINITIALIZED;
|
||||||
|
DXWEXTERN PolyBezierTo_Type pPolyBezierTo DXWINITIALIZED;
|
||||||
|
DXWEXTERN SetDIBitsToDevice_Type pSetDIBitsToDevice DXWINITIALIZED;
|
||||||
|
DXWEXTERN CreateCompatibleBitmap_Type pCreateCompatibleBitmap DXWINITIALIZED;
|
||||||
|
DXWEXTERN SetPixel_Type pSetPixel DXWINITIALIZED;
|
||||||
|
DXWEXTERN Ellipse_Type pEllipse DXWINITIALIZED;
|
||||||
|
DXWEXTERN Polygon_Type pPolygon DXWINITIALIZED;
|
||||||
|
DXWEXTERN Arc_Type pArc DXWINITIALIZED;
|
||||||
|
DXWEXTERN CreateEllipticRgn_Type pCreateEllipticRgn DXWINITIALIZED;
|
||||||
|
DXWEXTERN CreateEllipticRgnIndirect_Type pCreateEllipticRgnIndirect DXWINITIALIZED;
|
||||||
|
DXWEXTERN CreateRectRgn_Type pCreateRectRgn DXWINITIALIZED;
|
||||||
|
DXWEXTERN CreateRectRgnIndirect_Type pCreateRectRgnIndirect DXWINITIALIZED;
|
||||||
|
DXWEXTERN CreatePolygonRgn_Type pCreatePolygonRgn DXWINITIALIZED;
|
||||||
|
DXWEXTERN DrawText_Type pDrawText DXWINITIALIZED;
|
||||||
|
DXWEXTERN DrawTextEx_Type pDrawTextEx DXWINITIALIZED;
|
||||||
|
DXWEXTERN MaskBlt_Type pMaskBlt DXWINITIALIZED;
|
||||||
|
|
||||||
// Kernel32.dll:
|
// Kernel32.dll:
|
||||||
DXWEXTERN GetDiskFreeSpaceA_Type pGetDiskFreeSpaceA DXWINITIALIZED;
|
DXWEXTERN GetDiskFreeSpaceA_Type pGetDiskFreeSpaceA DXWINITIALIZED;
|
||||||
@ -228,6 +278,7 @@ DXWEXTERN DefWindowProc_Type pDefWindowProc DXWINITIALIZED;
|
|||||||
DXWEXTERN EndPaint_Type pEndPaint DXWINITIALIZED;
|
DXWEXTERN EndPaint_Type pEndPaint DXWINITIALIZED;
|
||||||
DXWEXTERN EnumDisplaySettings_Type pEnumDisplaySettings DXWINITIALIZED;
|
DXWEXTERN EnumDisplaySettings_Type pEnumDisplaySettings DXWINITIALIZED;
|
||||||
DXWEXTERN FillRect_Type pFillRect DXWINITIALIZED;
|
DXWEXTERN FillRect_Type pFillRect DXWINITIALIZED;
|
||||||
|
DXWEXTERN FrameRect_Type pFrameRect DXWINITIALIZED;
|
||||||
DXWEXTERN GetClientRect_Type pGetClientRect DXWINITIALIZED;
|
DXWEXTERN GetClientRect_Type pGetClientRect DXWINITIALIZED;
|
||||||
DXWEXTERN GetClipCursor_Type pGetClipCursor DXWINITIALIZED;
|
DXWEXTERN GetClipCursor_Type pGetClipCursor DXWINITIALIZED;
|
||||||
DXWEXTERN GetCursorPos_Type pGetCursorPos DXWINITIALIZED;
|
DXWEXTERN GetCursorPos_Type pGetCursorPos DXWINITIALIZED;
|
||||||
@ -246,7 +297,8 @@ DXWEXTERN PeekMessage_Type pPeekMessage DXWINITIALIZED;
|
|||||||
DXWEXTERN RegisterClassExA_Type pRegisterClassExA DXWINITIALIZED;
|
DXWEXTERN RegisterClassExA_Type pRegisterClassExA DXWINITIALIZED;
|
||||||
DXWEXTERN GDIReleaseDC_Type pGDIReleaseDC DXWINITIALIZED;
|
DXWEXTERN GDIReleaseDC_Type pGDIReleaseDC DXWINITIALIZED;
|
||||||
DXWEXTERN ScreenToClient_Type pScreenToClient DXWINITIALIZED;
|
DXWEXTERN ScreenToClient_Type pScreenToClient DXWINITIALIZED;
|
||||||
DXWEXTERN SendMessage_Type pSendMessage DXWINITIALIZED;
|
DXWEXTERN SendMessage_Type pSendMessageA DXWINITIALIZED;
|
||||||
|
DXWEXTERN SendMessage_Type pSendMessageW DXWINITIALIZED;
|
||||||
DXWEXTERN SetCursor_Type pSetCursor DXWINITIALIZED;
|
DXWEXTERN SetCursor_Type pSetCursor DXWINITIALIZED;
|
||||||
DXWEXTERN SetCursorPos_Type pSetCursorPos DXWINITIALIZED;
|
DXWEXTERN SetCursorPos_Type pSetCursorPos DXWINITIALIZED;
|
||||||
DXWEXTERN SetTimer_Type pSetTimer DXWINITIALIZED;
|
DXWEXTERN SetTimer_Type pSetTimer DXWINITIALIZED;
|
||||||
@ -254,6 +306,9 @@ DXWEXTERN SetWindowLong_Type pSetWindowLong DXWINITIALIZED;
|
|||||||
DXWEXTERN SetWindowPos_Type pSetWindowPos DXWINITIALIZED;
|
DXWEXTERN SetWindowPos_Type pSetWindowPos DXWINITIALIZED;
|
||||||
DXWEXTERN ShowCursor_Type pShowCursor DXWINITIALIZED;
|
DXWEXTERN ShowCursor_Type pShowCursor DXWINITIALIZED;
|
||||||
DXWEXTERN ShowWindow_Type pShowWindow DXWINITIALIZED;
|
DXWEXTERN ShowWindow_Type pShowWindow DXWINITIALIZED;
|
||||||
|
DXWEXTERN TabbedTextOutA_Type pTabbedTextOutA DXWINITIALIZED;
|
||||||
|
DXWEXTERN DestroyWindow_Type pDestroyWindow DXWINITIALIZED;
|
||||||
|
DXWEXTERN CloseWindow_Type pCloseWindow DXWINITIALIZED;
|
||||||
|
|
||||||
// Winmm.dll:
|
// Winmm.dll:
|
||||||
DXWEXTERN mciSendCommand_Type pmciSendCommand DXWINITIALIZED;
|
DXWEXTERN mciSendCommand_Type pmciSendCommand DXWINITIALIZED;
|
||||||
@ -266,6 +321,7 @@ hook procedures (possibly more tnan one per each API...)
|
|||||||
// advapi32.dll
|
// advapi32.dll
|
||||||
|
|
||||||
extern LONG WINAPI extRegCloseKey(HKEY);
|
extern LONG WINAPI extRegCloseKey(HKEY);
|
||||||
|
extern LONG WINAPI extRegCreateKey(HKEY, LPCTSTR, PHKEY);
|
||||||
extern LONG WINAPI extRegCreateKeyEx(HKEY, LPCTSTR, DWORD, LPTSTR, DWORD, REGSAM, LPSECURITY_ATTRIBUTES, PHKEY, LPDWORD);
|
extern LONG WINAPI extRegCreateKeyEx(HKEY, LPCTSTR, DWORD, LPTSTR, DWORD, REGSAM, LPSECURITY_ATTRIBUTES, PHKEY, LPDWORD);
|
||||||
extern LONG WINAPI extRegOpenKeyEx(HKEY, LPCTSTR, DWORD, REGSAM, PHKEY);
|
extern LONG WINAPI extRegOpenKeyEx(HKEY, LPCTSTR, DWORD, REGSAM, PHKEY);
|
||||||
extern LONG WINAPI extRegQueryValueEx(HKEY, LPCTSTR, LPDWORD, LPDWORD, LPBYTE, LPDWORD);
|
extern LONG WINAPI extRegQueryValueEx(HKEY, LPCTSTR, LPDWORD, LPDWORD, LPBYTE, LPDWORD);
|
||||||
@ -294,10 +350,12 @@ extern HPALETTE WINAPI extGDICreatePalette(CONST LOGPALETTE *);
|
|||||||
extern HDWP WINAPI extDeferWindowPos(HDWP, HWND, HWND, int, int, int, int, UINT);
|
extern HDWP WINAPI extDeferWindowPos(HDWP, HWND, HWND, int, int, int, int, UINT);
|
||||||
extern BOOL WINAPI extGDIDeleteDC(HDC);
|
extern BOOL WINAPI extGDIDeleteDC(HDC);
|
||||||
extern BOOL WINAPI extDDDeleteDC(HDC);
|
extern BOOL WINAPI extDDDeleteDC(HDC);
|
||||||
|
extern int WINAPI extGetClipBox(HDC, LPRECT);
|
||||||
extern int WINAPI extGetDeviceCaps(HDC, int);
|
extern int WINAPI extGetDeviceCaps(HDC, int);
|
||||||
extern BOOL WINAPI extGetDeviceGammaRamp(HDC, LPVOID);
|
extern BOOL WINAPI extGetDeviceGammaRamp(HDC, LPVOID);
|
||||||
extern UINT WINAPI extGetSystemPaletteEntries(HDC, UINT, UINT, LPPALETTEENTRY);
|
extern UINT WINAPI extGetSystemPaletteEntries(HDC, UINT, UINT, LPPALETTEENTRY);
|
||||||
extern BOOL WINAPI extGDIPatBlt(HDC, int, int, int, int, DWORD);
|
extern BOOL WINAPI extGDIPatBlt(HDC, int, int, int, int, DWORD);
|
||||||
|
extern BOOL WINAPI extPolyline(HDC, const POINT *, int);
|
||||||
extern BOOL WINAPI extDDBitBlt(HDC, int, int, int, int, HDC, int, int, DWORD);
|
extern BOOL WINAPI extDDBitBlt(HDC, int, int, int, int, HDC, int, int, DWORD);
|
||||||
extern UINT WINAPI extRealizePalette(HDC);
|
extern UINT WINAPI extRealizePalette(HDC);
|
||||||
extern BOOL WINAPI extRectangle(HDC, int, int, int, int);
|
extern BOOL WINAPI extRectangle(HDC, int, int, int, int);
|
||||||
@ -309,9 +367,29 @@ extern COLORREF WINAPI extSetBkColor(HDC, COLORREF);
|
|||||||
extern BOOL WINAPI extSetDeviceGammaRamp(HDC, LPVOID);
|
extern BOOL WINAPI extSetDeviceGammaRamp(HDC, LPVOID);
|
||||||
extern COLORREF WINAPI extSetTextColor(HDC, COLORREF);
|
extern COLORREF WINAPI extSetTextColor(HDC, COLORREF);
|
||||||
extern BOOL WINAPI extGDIStretchBlt(HDC, int, int, int, int, HDC, int, int, int, int, DWORD);
|
extern BOOL WINAPI extGDIStretchBlt(HDC, int, int, int, int, HDC, int, int, int, int, DWORD);
|
||||||
|
extern int WINAPI extStretchDIBits(HDC, int, int, int, int, int, int, int, int, const VOID *, const BITMAPINFO *, UINT, DWORD);
|
||||||
extern BOOL WINAPI extDDStretchBlt(HDC, int, int, int, int, HDC, int, int, int, int, DWORD);
|
extern BOOL WINAPI extDDStretchBlt(HDC, int, int, int, int, HDC, int, int, int, int, DWORD);
|
||||||
extern LONG WINAPI extTabbedTextOutA(HDC, int, int, LPCTSTR, int, int, const LPINT, int);
|
|
||||||
extern BOOL WINAPI extTextOutA(HDC, int, int, LPCTSTR, int);
|
extern BOOL WINAPI extTextOutA(HDC, int, int, LPCTSTR, int);
|
||||||
|
extern BOOL WINAPI extPolyBezierTo(HDC, const POINT *, DWORD);
|
||||||
|
extern BOOL WINAPI extPolylineTo(HDC, const POINT *, DWORD);
|
||||||
|
extern BOOL WINAPI extPolyDraw(HDC, const POINT *, const BYTE *, int);
|
||||||
|
extern BOOL WINAPI extMoveToEx(HDC, int, int, LPPOINT);
|
||||||
|
extern BOOL WINAPI extArcTo(HDC, int, int, int, int, int, int, int, int);
|
||||||
|
extern BOOL WINAPI extLineTo(HDC, int, int);
|
||||||
|
extern int WINAPI extSetDIBitsToDevice(HDC, int, int, DWORD, DWORD, int, int, UINT, UINT, const VOID *, const BITMAPINFO *, UINT);
|
||||||
|
extern HBITMAP WINAPI extCreateCompatibleBitmap(HDC, int, int);
|
||||||
|
extern COLORREF WINAPI extSetPixel(HDC, int, int, COLORREF);
|
||||||
|
extern BOOL WINAPI extEllipse(HDC, int, int, int, int);
|
||||||
|
extern BOOL WINAPI extPolygon(HDC, const POINT *, int);
|
||||||
|
extern BOOL WINAPI extArc(HDC, int, int, int, int, int, int, int, int);
|
||||||
|
extern HRGN WINAPI extCreateEllipticRgn(int, int, int, int);
|
||||||
|
extern HRGN WINAPI extCreateEllipticRgnIndirect(const RECT *);
|
||||||
|
extern HRGN WINAPI extCreateRectRgn(int, int, int, int);
|
||||||
|
extern HRGN WINAPI extCreateRectRgnIndirect(const RECT *);
|
||||||
|
extern HRGN WINAPI extCreatePolygonRgn(const POINT *, int, int);
|
||||||
|
extern int WINAPI extDrawText(HDC, LPCTSTR, int, LPRECT, UINT);
|
||||||
|
extern int WINAPI extDrawTextEx(HDC, LPTSTR, int, LPRECT, UINT, LPDRAWTEXTPARAMS);
|
||||||
|
extern BOOL WINAPI extMaskBlt(HDC, int, int, int, int, HDC, int, int, HBITMAP, int, int, DWORD);
|
||||||
|
|
||||||
// Kernel32.dll:
|
// Kernel32.dll:
|
||||||
extern BOOL WINAPI extGetDiskFreeSpaceA(LPCSTR, LPDWORD, LPDWORD, LPDWORD, LPDWORD);
|
extern BOOL WINAPI extGetDiskFreeSpaceA(LPCSTR, LPDWORD, LPDWORD, LPDWORD, LPDWORD);
|
||||||
@ -352,6 +430,7 @@ extern LRESULT WINAPI extDefWindowProc(HWND, UINT, WPARAM, LPARAM);
|
|||||||
extern BOOL WINAPI extEndPaint(HWND, const PAINTSTRUCT *);
|
extern BOOL WINAPI extEndPaint(HWND, const PAINTSTRUCT *);
|
||||||
extern LONG WINAPI extEnumDisplaySettings(LPCTSTR, DWORD, DEVMODE *);
|
extern LONG WINAPI extEnumDisplaySettings(LPCTSTR, DWORD, DEVMODE *);
|
||||||
extern int WINAPI extFillRect(HDC, const RECT *, HBRUSH);
|
extern int WINAPI extFillRect(HDC, const RECT *, HBRUSH);
|
||||||
|
extern int WINAPI extFrameRect(HDC, const RECT *, HBRUSH);
|
||||||
extern BOOL WINAPI extGetClientRect(HWND, LPRECT);
|
extern BOOL WINAPI extGetClientRect(HWND, LPRECT);
|
||||||
extern BOOL WINAPI extGetClipCursor(LPRECT);
|
extern BOOL WINAPI extGetClipCursor(LPRECT);
|
||||||
extern BOOL WINAPI extGetCursorPos(LPPOINT);
|
extern BOOL WINAPI extGetCursorPos(LPPOINT);
|
||||||
@ -382,6 +461,10 @@ extern LONG WINAPI extSetWindowLong(HWND, int, LONG);
|
|||||||
extern BOOL WINAPI extSetWindowPos(HWND, HWND, int, int, int, int, UINT);
|
extern BOOL WINAPI extSetWindowPos(HWND, HWND, int, int, int, int, UINT);
|
||||||
extern int WINAPI extShowCursor(BOOL);
|
extern int WINAPI extShowCursor(BOOL);
|
||||||
extern BOOL WINAPI extShowWindow(HWND, int);
|
extern BOOL WINAPI extShowWindow(HWND, int);
|
||||||
|
extern LONG WINAPI extTabbedTextOutA(HDC, int, int, LPCTSTR, int, int, const LPINT, int);
|
||||||
|
extern BOOL WINAPI extDestroyWindow(HWND);
|
||||||
|
extern BOOL WINAPI extCloseWindow(HWND);
|
||||||
|
|
||||||
|
|
||||||
// Winmm.dll:
|
// Winmm.dll:
|
||||||
extern MCIERROR WINAPI extmciSendCommand(MCIDEVICEID, UINT, DWORD_PTR, DWORD_PTR);
|
extern MCIERROR WINAPI extmciSendCommand(MCIDEVICEID, UINT, DWORD_PTR, DWORD_PTR);
|
||||||
|
333
dll/user32.cpp
333
dll/user32.cpp
@ -1,5 +1,8 @@
|
|||||||
#define _WIN32_WINNT 0x0600
|
#define _WIN32_WINNT 0x0600
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#define _CRT_SECURE_NO_WARNINGS
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
#include "dxwnd.h"
|
#include "dxwnd.h"
|
||||||
#include "dxwcore.hpp"
|
#include "dxwcore.hpp"
|
||||||
#include "syslibs.h"
|
#include "syslibs.h"
|
||||||
@ -19,13 +22,17 @@ static HookEntry_Type Hooks[]={
|
|||||||
{"EnumDisplaySettingsA", (FARPROC)EnumDisplaySettingsA, (FARPROC *)&pEnumDisplaySettings, (FARPROC)extEnumDisplaySettings},
|
{"EnumDisplaySettingsA", (FARPROC)EnumDisplaySettingsA, (FARPROC *)&pEnumDisplaySettings, (FARPROC)extEnumDisplaySettings},
|
||||||
{"GetClipCursor", (FARPROC)GetClipCursor, (FARPROC*)&pGetClipCursor, (FARPROC)extGetClipCursor},
|
{"GetClipCursor", (FARPROC)GetClipCursor, (FARPROC*)&pGetClipCursor, (FARPROC)extGetClipCursor},
|
||||||
{"ClipCursor", (FARPROC)ClipCursor, (FARPROC *)&pClipCursor, (FARPROC)extClipCursor},
|
{"ClipCursor", (FARPROC)ClipCursor, (FARPROC *)&pClipCursor, (FARPROC)extClipCursor},
|
||||||
{"FillRect", (FARPROC)FillRect, (FARPROC *)&pFillRect, (FARPROC)extFillRect},
|
{"FillRect", (FARPROC)NULL, (FARPROC *)&pFillRect, (FARPROC)extFillRect},
|
||||||
|
{"FrameRect", (FARPROC)NULL, (FARPROC *)&pFrameRect, (FARPROC)extFrameRect},
|
||||||
{"DefWindowProcA", (FARPROC)DefWindowProcA, (FARPROC *)&pDefWindowProc, (FARPROC)extDefWindowProc},
|
{"DefWindowProcA", (FARPROC)DefWindowProcA, (FARPROC *)&pDefWindowProc, (FARPROC)extDefWindowProc},
|
||||||
{"CreateWindowExA", (FARPROC)CreateWindowExA, (FARPROC *)&pCreateWindowExA, (FARPROC)extCreateWindowExA},
|
{"CreateWindowExA", (FARPROC)CreateWindowExA, (FARPROC *)&pCreateWindowExA, (FARPROC)extCreateWindowExA},
|
||||||
{"CreateWindowExW", (FARPROC)CreateWindowExW, (FARPROC *)&pCreateWindowExW, (FARPROC)extCreateWindowExW},
|
{"CreateWindowExW", (FARPROC)CreateWindowExW, (FARPROC *)&pCreateWindowExW, (FARPROC)extCreateWindowExW},
|
||||||
{"RegisterClassExA", (FARPROC)RegisterClassExA, (FARPROC *)&pRegisterClassExA, (FARPROC)extRegisterClassExA},
|
{"RegisterClassExA", (FARPROC)RegisterClassExA, (FARPROC *)&pRegisterClassExA, (FARPROC)extRegisterClassExA},
|
||||||
{"GetSystemMetrics", (FARPROC)GetSystemMetrics, (FARPROC *)&pGetSystemMetrics, (FARPROC)extGetSystemMetrics},
|
{"GetSystemMetrics", (FARPROC)GetSystemMetrics, (FARPROC *)&pGetSystemMetrics, (FARPROC)extGetSystemMetrics},
|
||||||
{"GetDesktopWindow", (FARPROC)GetDesktopWindow, (FARPROC *)&pGetDesktopWindow, (FARPROC)extGetDesktopWindow},
|
{"GetDesktopWindow", (FARPROC)GetDesktopWindow, (FARPROC *)&pGetDesktopWindow, (FARPROC)extGetDesktopWindow},
|
||||||
|
{"TabbedTextOutA", (FARPROC)TabbedTextOutA, (FARPROC *)&pTabbedTextOutA, (FARPROC)extTabbedTextOutA},
|
||||||
|
{"CloseWindow", (FARPROC)NULL, (FARPROC *)&pCloseWindow, (FARPROC)extCloseWindow},
|
||||||
|
{"DestroyWindow", (FARPROC)NULL, (FARPROC *)&pDestroyWindow, (FARPROC)extDestroyWindow},
|
||||||
{0, NULL, 0, 0} // terminator
|
{0, NULL, 0, 0} // terminator
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -63,7 +70,8 @@ static HookEntry_Type MessageHooks[]={
|
|||||||
static HookEntry_Type MouseHooks[]={
|
static HookEntry_Type MouseHooks[]={
|
||||||
{"GetCursorPos", (FARPROC)GetCursorPos, (FARPROC *)&pGetCursorPos, (FARPROC)extGetCursorPos},
|
{"GetCursorPos", (FARPROC)GetCursorPos, (FARPROC *)&pGetCursorPos, (FARPROC)extGetCursorPos},
|
||||||
{"SetCursor", (FARPROC)SetCursor, (FARPROC *)&pSetCursor, (FARPROC)extSetCursor},
|
{"SetCursor", (FARPROC)SetCursor, (FARPROC *)&pSetCursor, (FARPROC)extSetCursor},
|
||||||
{"SendMessageA", (FARPROC)SendMessageA, (FARPROC *)&pSendMessage, (FARPROC)extSendMessage}, // ???
|
{"SendMessageA", (FARPROC)SendMessageA, (FARPROC *)&pSendMessageA, (FARPROC)extSendMessage}, // ???
|
||||||
|
{"SendMessageW", (FARPROC)SendMessageW, (FARPROC *)&pSendMessageW, (FARPROC)extSendMessage}, // ???
|
||||||
//{"SetPhysicalCursorPos", NULL, (FARPROC *)&pSetCursor, (FARPROC)extSetCursor}, // ???
|
//{"SetPhysicalCursorPos", NULL, (FARPROC *)&pSetCursor, (FARPROC)extSetCursor}, // ???
|
||||||
{0, NULL, 0, 0} // terminator
|
{0, NULL, 0, 0} // terminator
|
||||||
};
|
};
|
||||||
@ -157,8 +165,18 @@ LONG WINAPI MyChangeDisplaySettings(char *fname, DEVMODE *lpDevMode, DWORD dwfla
|
|||||||
// save desired settings first v.2.1.89
|
// save desired settings first v.2.1.89
|
||||||
// v2.1.95 protect when lpDevMode is null (closing game... Jedi Outcast)
|
// v2.1.95 protect when lpDevMode is null (closing game... Jedi Outcast)
|
||||||
// v2.2.23 consider new width/height only when dmFields flags are set.
|
// v2.2.23 consider new width/height only when dmFields flags are set.
|
||||||
if(lpDevMode && (lpDevMode->dmFields & (DM_PELSWIDTH | DM_PELSHEIGHT)))
|
if(lpDevMode && (lpDevMode->dmFields & (DM_PELSWIDTH | DM_PELSHEIGHT))){
|
||||||
|
RECT client;
|
||||||
dxw.SetScreenSize(lpDevMode->dmPelsWidth, lpDevMode->dmPelsHeight);
|
dxw.SetScreenSize(lpDevMode->dmPelsWidth, lpDevMode->dmPelsHeight);
|
||||||
|
// v2.02.31: when main win is bigger that expected resolution, you're in windowed fullscreen mode
|
||||||
|
//(*pGetClientRect)((dxw.dwFlags1 & FIXPARENTWIN) ? dxw.hParentWnd : dxw.GethWnd(), &client);
|
||||||
|
(*pGetClientRect)(dxw.GethWnd(), &client);
|
||||||
|
OutTraceD("%s: current hWnd=%x size=(%d,%d)\n", fname, dxw.GethWnd(), client.right, client.bottom);
|
||||||
|
if((client.right>=(LONG)lpDevMode->dmPelsWidth) && (client.bottom>=(LONG)lpDevMode->dmPelsHeight)) {
|
||||||
|
OutTraceD("%s: entering FULLSCREEN mode\n", fname);
|
||||||
|
dxw.SetFullScreen(TRUE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ((dwflags==0 || dwflags==CDS_FULLSCREEN) && lpDevMode){
|
if ((dwflags==0 || dwflags==CDS_FULLSCREEN) && lpDevMode){
|
||||||
if (dxw.dwFlags1 & EMULATESURFACE || !(lpDevMode->dmFields & DM_BITSPERPEL)){
|
if (dxw.dwFlags1 & EMULATESURFACE || !(lpDevMode->dmFields & DM_BITSPERPEL)){
|
||||||
@ -497,7 +515,7 @@ LONG WINAPI extSetWindowLong(HWND hwnd, int nIndex, LONG dwNewLong)
|
|||||||
WNDPROC lres;
|
WNDPROC lres;
|
||||||
WNDPROC OldProc;
|
WNDPROC OldProc;
|
||||||
// GPL fix
|
// GPL fix
|
||||||
if(dxw.IsDesktop(hwnd)) {
|
if(dxw.IsRealDesktop(hwnd)) {
|
||||||
hwnd=dxw.GethWnd();
|
hwnd=dxw.GethWnd();
|
||||||
OutTraceD("SetWindowLong: DESKTOP hwnd, FIXING hwnd=%x\n",hwnd);
|
OutTraceD("SetWindowLong: DESKTOP hwnd, FIXING hwnd=%x\n",hwnd);
|
||||||
}
|
}
|
||||||
@ -571,47 +589,17 @@ BOOL WINAPI extSetWindowPos(HWND hwnd, HWND hWndInsertAfter, int X, int Y, int c
|
|||||||
|
|
||||||
HDWP WINAPI extDeferWindowPos(HDWP hWinPosInfo, HWND hwnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags)
|
HDWP WINAPI extDeferWindowPos(HDWP hWinPosInfo, HWND hwnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags)
|
||||||
{
|
{
|
||||||
|
// v2.02.31: heavily used by "Imperialism II" !!!
|
||||||
HDWP res;
|
HDWP res;
|
||||||
|
|
||||||
OutTraceD("DeferWindowPos: hwnd=%x%s pos=(%d,%d) dim=(%d,%d) Flags=%x\n",
|
OutTraceD("DeferWindowPos: hwnd=%x%s pos=(%d,%d) dim=(%d,%d) Flags=%x\n",
|
||||||
hwnd, dxw.IsFullScreen()?"(FULLSCREEN)":"", X, Y, cx, cy, uFlags);
|
hwnd, dxw.IsFullScreen()?"(FULLSCREEN)":"", X, Y, cx, cy, uFlags);
|
||||||
|
|
||||||
//if ((hwnd != dxw.GethWnd()) || !dxw.IsFullScreen()){
|
if(dxw.IsFullScreen()){
|
||||||
{
|
dxw.MapClient(&X, &Y, &cx, &cy);
|
||||||
// just proxy
|
OutTraceD("DeferWindowPos: remapped pos=(%d,%d) dim=(%d,%d)\n", X, Y, cx, cy);
|
||||||
res=(*pGDIDeferWindowPos)(hWinPosInfo, hwnd, hWndInsertAfter, X, Y, cx, cy, uFlags);
|
|
||||||
if(!res)OutTraceE("SetWindowPos: ERROR err=%d at %d\n", GetLastError(), __LINE__);
|
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dxw.dwFlags1 & LOCKWINPOS){
|
|
||||||
return hWinPosInfo;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dxw.dwFlags1 & PREVENTMAXIMIZE){
|
|
||||||
int UpdFlag =0;
|
|
||||||
int MaxX, MaxY;
|
|
||||||
MaxX = dxw.iSizX;
|
|
||||||
MaxY = dxw.iSizY;
|
|
||||||
if (!MaxX) MaxX = dxw.GetScreenWidth();
|
|
||||||
if (!MaxY) MaxY = dxw.GetScreenHeight();
|
|
||||||
if(cx>MaxX) { cx=MaxX; UpdFlag=1; }
|
|
||||||
if(cy>MaxY) { cy=MaxY; UpdFlag=1; }
|
|
||||||
if (UpdFlag)
|
|
||||||
OutTraceD("SetWindowPos: using max dim=(%d,%d)\n", cx, cy);
|
|
||||||
}
|
|
||||||
|
|
||||||
// useful??? to be demonstrated....
|
|
||||||
// when altering main window in fullscreen mode, fix the coordinates for borders
|
|
||||||
DWORD dwCurStyle;
|
|
||||||
RECT rect;
|
|
||||||
rect.top=rect.left=0;
|
|
||||||
rect.right=cx; rect.bottom=cy;
|
|
||||||
dwCurStyle=(*pGetWindowLong)(hwnd, GWL_STYLE);
|
|
||||||
AdjustWindowRect(&rect, dwCurStyle, FALSE);
|
|
||||||
cx=rect.right; cy=rect.bottom;
|
|
||||||
OutTraceD("SetWindowPos: main form hwnd=%x fixed size=(%d,%d)\n", hwnd, cx, cy);
|
|
||||||
|
|
||||||
res=(*pGDIDeferWindowPos)(hWinPosInfo, hwnd, hWndInsertAfter, X, Y, cx, cy, uFlags);
|
res=(*pGDIDeferWindowPos)(hWinPosInfo, hwnd, hWndInsertAfter, X, Y, cx, cy, uFlags);
|
||||||
if(!res)OutTraceE("DeferWindowPos: ERROR err=%d at %d\n", GetLastError(), __LINE__);
|
if(!res)OutTraceE("DeferWindowPos: ERROR err=%d at %d\n", GetLastError(), __LINE__);
|
||||||
return res;
|
return res;
|
||||||
@ -653,7 +641,7 @@ LRESULT WINAPI extSendMessage(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ret=(*pSendMessage)(hwnd, Msg, wParam, lParam);
|
ret=(*pSendMessageA)(hwnd, Msg, wParam, lParam);
|
||||||
OutTraceW("SendMessage: lresult=%x\n", ret);
|
OutTraceW("SendMessage: lresult=%x\n", ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -808,7 +796,7 @@ BOOL WINAPI extGetMessage(LPMSG lpMsg, HWND hwnd, UINT wMsgFilterMin, UINT wMsgF
|
|||||||
Message=lpMsg->message & 0xFFFF;
|
Message=lpMsg->message & 0xFFFF;
|
||||||
if((Message <= WM_MOUSELAST) && (Message >= WM_MOUSEFIRST)){
|
if((Message <= WM_MOUSELAST) && (Message >= WM_MOUSEFIRST)){
|
||||||
FixedHwnd=(hwnd)?hwnd:dxw.GethWnd();
|
FixedHwnd=(hwnd)?hwnd:dxw.GethWnd();
|
||||||
if(dxw.IsDesktop(FixedHwnd)) FixedHwnd=dxw.GethWnd(); // GPL fix...
|
if(dxw.IsRealDesktop(FixedHwnd)) FixedHwnd=dxw.GethWnd(); // GPL fix...
|
||||||
lpMsg->pt=FixMessagePt(FixedHwnd, lpMsg->pt);
|
lpMsg->pt=FixMessagePt(FixedHwnd, lpMsg->pt);
|
||||||
lpMsg->lParam = MAKELPARAM(lpMsg->pt.x, lpMsg->pt.y);
|
lpMsg->lParam = MAKELPARAM(lpMsg->pt.x, lpMsg->pt.y);
|
||||||
OutTraceC("PeekMessage: fixed lparam/pt=(%d,%d)\n", lpMsg->pt.x, lpMsg->pt.y);
|
OutTraceC("PeekMessage: fixed lparam/pt=(%d,%d)\n", lpMsg->pt.x, lpMsg->pt.y);
|
||||||
@ -935,8 +923,8 @@ int WINAPI extMapWindowPoints(HWND hWndFrom, HWND hWndTo, LPPOINT lpPoints, UINT
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(dxw.IsFullScreen()){
|
if(dxw.IsFullScreen()){
|
||||||
if(dxw.IsDesktop(hWndTo)) hWndTo=dxw.GethWnd();
|
if(dxw.IsRealDesktop(hWndTo)) hWndTo=dxw.GethWnd();
|
||||||
if(dxw.IsDesktop(hWndFrom)) hWndFrom=dxw.GethWnd();
|
if(dxw.IsRealDesktop(hWndFrom)) hWndFrom=dxw.GethWnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
// should scale the retcode ???
|
// should scale the retcode ???
|
||||||
@ -951,7 +939,7 @@ HWND WINAPI extGetDesktopWindow(void)
|
|||||||
HWND res;
|
HWND res;
|
||||||
|
|
||||||
OutTraceD("GetDesktopWindow: FullScreen=%x\n", dxw.IsFullScreen());
|
OutTraceD("GetDesktopWindow: FullScreen=%x\n", dxw.IsFullScreen());
|
||||||
if (dxw.IsFullScreen()){
|
if (dxw.IsFullScreen()){
|
||||||
OutTraceD("GetDesktopWindow: returning main window hwnd=%x\n", dxw.GethWnd());
|
OutTraceD("GetDesktopWindow: returning main window hwnd=%x\n", dxw.GethWnd());
|
||||||
return dxw.GethWnd();
|
return dxw.GethWnd();
|
||||||
}
|
}
|
||||||
@ -974,11 +962,13 @@ int WINAPI extGetSystemMetrics(int nindex)
|
|||||||
switch(nindex){
|
switch(nindex){
|
||||||
case SM_CXFULLSCREEN:
|
case SM_CXFULLSCREEN:
|
||||||
case SM_CXSCREEN:
|
case SM_CXSCREEN:
|
||||||
|
case SM_CXVIRTUALSCREEN: // v2.02.31
|
||||||
res = pSetDevMode->dmPelsWidth;
|
res = pSetDevMode->dmPelsWidth;
|
||||||
OutTraceD("GetDeviceCaps: fix HORZRES cap=%d\n", res);
|
OutTraceD("GetDeviceCaps: fix HORZRES cap=%d\n", res);
|
||||||
return res;
|
return res;
|
||||||
case SM_CYFULLSCREEN:
|
case SM_CYFULLSCREEN:
|
||||||
case SM_CYSCREEN:
|
case SM_CYSCREEN:
|
||||||
|
case SM_CYVIRTUALSCREEN: // v2.02.31
|
||||||
res = pSetDevMode->dmPelsHeight;
|
res = pSetDevMode->dmPelsHeight;
|
||||||
OutTraceD("GetDeviceCaps: fix VERTRES cap=%d\n", res);
|
OutTraceD("GetDeviceCaps: fix VERTRES cap=%d\n", res);
|
||||||
return res;
|
return res;
|
||||||
@ -988,11 +978,13 @@ int WINAPI extGetSystemMetrics(int nindex)
|
|||||||
switch(nindex){
|
switch(nindex){
|
||||||
case SM_CXFULLSCREEN:
|
case SM_CXFULLSCREEN:
|
||||||
case SM_CXSCREEN:
|
case SM_CXSCREEN:
|
||||||
|
case SM_CXVIRTUALSCREEN: // v2.02.31
|
||||||
res= dxw.GetScreenWidth();
|
res= dxw.GetScreenWidth();
|
||||||
OutTraceD("GetSystemMetrics: fix SM_CXSCREEN=%d\n", res);
|
OutTraceD("GetSystemMetrics: fix SM_CXSCREEN=%d\n", res);
|
||||||
break;
|
break;
|
||||||
case SM_CYFULLSCREEN:
|
case SM_CYFULLSCREEN:
|
||||||
case SM_CYSCREEN:
|
case SM_CYSCREEN:
|
||||||
|
case SM_CYVIRTUALSCREEN: // v2.02.31
|
||||||
res= dxw.GetScreenHeight();
|
res= dxw.GetScreenHeight();
|
||||||
OutTraceD("GetSystemMetrics: fix SM_CYSCREEN=%d\n", res);
|
OutTraceD("GetSystemMetrics: fix SM_CYSCREEN=%d\n", res);
|
||||||
break;
|
break;
|
||||||
@ -1014,35 +1006,8 @@ ATOM WINAPI extRegisterClassExA(WNDCLASSEX *lpwcx)
|
|||||||
return (*pRegisterClassExA)(lpwcx);
|
return (*pRegisterClassExA)(lpwcx);
|
||||||
}
|
}
|
||||||
|
|
||||||
HWND WINAPI extCreateWindowExW(
|
static HWND WINAPI extCreateWindowCommon(
|
||||||
DWORD dwExStyle,
|
LPCTSTR ApiName,
|
||||||
LPCWSTR lpClassName,
|
|
||||||
LPCWSTR lpWindowName,
|
|
||||||
DWORD dwStyle,
|
|
||||||
int x,
|
|
||||||
int y,
|
|
||||||
int nWidth,
|
|
||||||
int nHeight,
|
|
||||||
HWND hWndParent,
|
|
||||||
HMENU hMenu,
|
|
||||||
HINSTANCE hInstance,
|
|
||||||
LPVOID lpParam)
|
|
||||||
{
|
|
||||||
char sClassName[256+1];
|
|
||||||
char sWindowName[256+1];
|
|
||||||
wcstombs_s(NULL, sClassName, lpClassName, 80);
|
|
||||||
wcstombs_s(NULL, sWindowName, lpWindowName, 80);
|
|
||||||
|
|
||||||
OutTraceD("CreateWindowExW: class=\"%ls\" wname=\"%ls\" pos=(%d,%d) size=(%d,%d) Style=%x(%s) ExStyle=%x(%s)\n",
|
|
||||||
lpClassName, lpWindowName, x, y, nWidth, nHeight,
|
|
||||||
dwStyle, ExplainStyle(dwStyle), dwExStyle, ExplainExStyle(dwExStyle));
|
|
||||||
if(IsDebug) OutTrace("CreateWindowExW: DEBUG screen=(%d,%d)\n", dxw.GetScreenWidth(), dxw.GetScreenHeight());
|
|
||||||
|
|
||||||
return extCreateWindowExA(dwExStyle, sClassName, sWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam);
|
|
||||||
}
|
|
||||||
|
|
||||||
// GHO: pro Diablo
|
|
||||||
HWND WINAPI extCreateWindowExA(
|
|
||||||
DWORD dwExStyle,
|
DWORD dwExStyle,
|
||||||
LPCTSTR lpClassName,
|
LPCTSTR lpClassName,
|
||||||
LPCTSTR lpWindowName,
|
LPCTSTR lpWindowName,
|
||||||
@ -1060,14 +1025,9 @@ HWND WINAPI extCreateWindowExA(
|
|||||||
WNDPROC pWindowProc;
|
WNDPROC pWindowProc;
|
||||||
BOOL isValidHandle=TRUE;
|
BOOL isValidHandle=TRUE;
|
||||||
|
|
||||||
OutTraceD("CreateWindowExA: class=\"%s\" wname=\"%s\" pos=(%d,%d) size=(%d,%d) Style=%x(%s) ExStyle=%x(%s)\n",
|
|
||||||
lpClassName, lpWindowName, x, y, nWidth, nHeight,
|
|
||||||
dwStyle, ExplainStyle(dwStyle), dwExStyle, ExplainExStyle(dwExStyle));
|
|
||||||
if(IsDebug) OutTrace("CreateWindowExA: DEBUG screen=(%d,%d)\n", dxw.GetScreenWidth(), dxw.GetScreenHeight());
|
|
||||||
|
|
||||||
// no maximized windows in any case
|
// no maximized windows in any case
|
||||||
if (dxw.dwFlags1 & PREVENTMAXIMIZE){
|
if (dxw.dwFlags1 & PREVENTMAXIMIZE){
|
||||||
OutTraceD("CreateWindowExA: handling PREVENTMAXIMIZE mode\n");
|
OutTraceD("%s: handling PREVENTMAXIMIZE mode\n", ApiName);
|
||||||
dwStyle &= ~(WS_MAXIMIZE | WS_POPUP);
|
dwStyle &= ~(WS_MAXIMIZE | WS_POPUP);
|
||||||
dwExStyle &= ~WS_EX_TOPMOST;
|
dwExStyle &= ~WS_EX_TOPMOST;
|
||||||
}
|
}
|
||||||
@ -1117,7 +1077,7 @@ HWND WINAPI extCreateWindowExA(
|
|||||||
}
|
}
|
||||||
nWidth=screen.right;
|
nWidth=screen.right;
|
||||||
nHeight=screen.bottom;
|
nHeight=screen.bottom;
|
||||||
OutTraceD("CreateWindowExA: fixed BIG win pos=(%d,%d) size=(%d,%d)\n", x, y, nWidth, nHeight);
|
OutTraceD("%s: fixed BIG win pos=(%d,%d) size=(%d,%d)\n", ApiName, x, y, nWidth, nHeight);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// invalid parent coordinates: use initial placement, but leave the size.
|
// invalid parent coordinates: use initial placement, but leave the size.
|
||||||
@ -1128,7 +1088,7 @@ HWND WINAPI extCreateWindowExA(
|
|||||||
//}
|
//}
|
||||||
nWidth=dxw.iSizX;
|
nWidth=dxw.iSizX;
|
||||||
nHeight=dxw.iSizY;
|
nHeight=dxw.iSizY;
|
||||||
OutTraceD("CreateWindowExA: renewed BIG win pos=(%d,%d) size=(%d,%d)\n", x, y, nWidth, nHeight);
|
OutTraceD("%s: renewed BIG win pos=(%d,%d) size=(%d,%d)\n", ApiName, x, y, nWidth, nHeight);
|
||||||
}
|
}
|
||||||
dxw.SetFullScreen(TRUE);
|
dxw.SetFullScreen(TRUE);
|
||||||
if(dxw.Coordinates==DXW_DESKTOP_WORKAREA){
|
if(dxw.Coordinates==DXW_DESKTOP_WORKAREA){
|
||||||
@ -1139,14 +1099,14 @@ HWND WINAPI extCreateWindowExA(
|
|||||||
nWidth=workarea.right;
|
nWidth=workarea.right;
|
||||||
nHeight=workarea.bottom;
|
nHeight=workarea.bottom;
|
||||||
dwStyle=(dxw.dwFlags2 & MODALSTYLE) ? 0 : WS_OVERLAPPEDWINDOW;
|
dwStyle=(dxw.dwFlags2 & MODALSTYLE) ? 0 : WS_OVERLAPPEDWINDOW;
|
||||||
OutTraceD("CreateWindowExA: WORKAREA win pos=(%d,%d) size=(%d,%d)\n", x, y, nWidth, nHeight);
|
OutTraceD("%s: WORKAREA win pos=(%d,%d) size=(%d,%d)\n", ApiName, x, y, nWidth, nHeight);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!dxw.IsFullScreen()){ // v2.1.63: needed for "Monster Truck Madness"
|
if(!dxw.IsFullScreen()){ // v2.1.63: needed for "Monster Truck Madness"
|
||||||
wndh= (*pCreateWindowExA)(dwExStyle, lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight,
|
wndh= (*pCreateWindowExA)(dwExStyle, lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight,
|
||||||
hWndParent, hMenu, hInstance, lpParam);
|
hWndParent, hMenu, hInstance, lpParam);
|
||||||
OutTraceD("CreateWindowExA: windowed mode ret=%x\n", wndh);
|
OutTraceD("%s: windowed mode ret=%x\n", ApiName, wndh);
|
||||||
return wndh;
|
return wndh;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1154,25 +1114,25 @@ HWND WINAPI extCreateWindowExA(
|
|||||||
// Age of Empires....
|
// Age of Empires....
|
||||||
if (dwStyle & WS_CHILD){
|
if (dwStyle & WS_CHILD){
|
||||||
dxw.MapClient(&x, &y, &nWidth, &nHeight);
|
dxw.MapClient(&x, &y, &nWidth, &nHeight);
|
||||||
OutTraceD("CreateWindowExA: fixed WS_CHILD pos=(%d,%d) size=(%d,%d)\n",
|
OutTraceD("%s: fixed WS_CHILD pos=(%d,%d) size=(%d,%d)\n",
|
||||||
x, y, nWidth, nHeight);
|
ApiName, x, y, nWidth, nHeight);
|
||||||
}
|
}
|
||||||
// needed for Diablo, that creates a new control parent window that must be
|
// needed for Diablo, that creates a new control parent window that must be
|
||||||
// overlapped to the directdraw surface.
|
// overlapped to the directdraw surface.
|
||||||
else if (dwExStyle & WS_EX_CONTROLPARENT){
|
else if (dwExStyle & WS_EX_CONTROLPARENT){
|
||||||
dxw.MapWindow(&x, &y, &nWidth, &nHeight);
|
dxw.MapWindow(&x, &y, &nWidth, &nHeight);
|
||||||
OutTraceD("CreateWindowExA: fixed WS_EX_CONTROLPARENT pos=(%d,%d) size=(%d,%d)\n",
|
OutTraceD("%s: fixed WS_EX_CONTROLPARENT pos=(%d,%d) size=(%d,%d)\n",
|
||||||
x, y, nWidth, nHeight);
|
ApiName, x, y, nWidth, nHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
OutTraceB("CreateWindowExA: fixed pos=(%d,%d) size=(%d,%d) Style=%x(%s) ExStyle=%x(%s)\n",
|
OutTraceB("%s: fixed pos=(%d,%d) size=(%d,%d) Style=%x(%s) ExStyle=%x(%s)\n",
|
||||||
x, y, nWidth, nHeight, dwStyle, ExplainStyle(dwStyle), dwExStyle, ExplainExStyle(dwExStyle));
|
ApiName, x, y, nWidth, nHeight, dwStyle, ExplainStyle(dwStyle), dwExStyle, ExplainExStyle(dwExStyle));
|
||||||
|
|
||||||
wndh= (*pCreateWindowExA)(dwExStyle, lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight,
|
wndh= (*pCreateWindowExA)(dwExStyle, lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight,
|
||||||
hWndParent, hMenu, hInstance, lpParam);
|
hWndParent, hMenu, hInstance, lpParam);
|
||||||
if (wndh==(HWND)NULL){
|
if (wndh==(HWND)NULL){
|
||||||
OutTraceE("CreateWindowExA: ERROR err=%d Style=%x(%s) ExStyle=%x\n",
|
OutTraceE("%s: ERROR err=%d Style=%x(%s) ExStyle=%x\n",
|
||||||
GetLastError(), dwStyle, ExplainStyle(dwStyle), dwExStyle);
|
ApiName, GetLastError(), dwStyle, ExplainStyle(dwStyle), dwExStyle);
|
||||||
return wndh;
|
return wndh;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1181,7 +1141,7 @@ HWND WINAPI extCreateWindowExA(
|
|||||||
extern void AdjustWindowPos(HWND, DWORD, DWORD);
|
extern void AdjustWindowPos(HWND, DWORD, DWORD);
|
||||||
(*pSetWindowLong)(wndh, GWL_STYLE, (dxw.dwFlags2 & MODALSTYLE) ? 0 : WS_OVERLAPPEDWINDOW);
|
(*pSetWindowLong)(wndh, GWL_STYLE, (dxw.dwFlags2 & MODALSTYLE) ? 0 : WS_OVERLAPPEDWINDOW);
|
||||||
(*pSetWindowLong)(wndh, GWL_EXSTYLE, 0);
|
(*pSetWindowLong)(wndh, GWL_EXSTYLE, 0);
|
||||||
OutTraceD("CreateWindowExA: hwnd=%x, set style=WS_OVERLAPPEDWINDOW extstyle=0\n", wndh);
|
OutTraceD("%s: hwnd=%x, set style=WS_OVERLAPPEDWINDOW extstyle=0\n", ApiName, wndh);
|
||||||
AdjustWindowPos(wndh, nWidth, nHeight);
|
AdjustWindowPos(wndh, nWidth, nHeight);
|
||||||
(*pShowWindow)(wndh, SW_SHOWNORMAL);
|
(*pShowWindow)(wndh, SW_SHOWNORMAL);
|
||||||
}
|
}
|
||||||
@ -1196,13 +1156,75 @@ HWND WINAPI extCreateWindowExA(
|
|||||||
OutTraceD("Hooking CHILD wndh=%x WindowProc %x->%x\n", wndh, pWindowProc, extChildWindowProc);
|
OutTraceD("Hooking CHILD wndh=%x WindowProc %x->%x\n", wndh, pWindowProc, extChildWindowProc);
|
||||||
res=(*pSetWindowLong)(wndh, GWL_WNDPROC, (LONG)extChildWindowProc);
|
res=(*pSetWindowLong)(wndh, GWL_WNDPROC, (LONG)extChildWindowProc);
|
||||||
WhndStackPush(wndh, pWindowProc);
|
WhndStackPush(wndh, pWindowProc);
|
||||||
if(!res) OutTraceE("CreateWindowExA: SetWindowLong ERROR %x\n", GetLastError());
|
if(!res) OutTraceE("%s: SetWindowLong ERROR %x\n", ApiName, GetLastError());
|
||||||
}
|
}
|
||||||
|
|
||||||
OutTraceD("CreateWindowExA: ret=%x\n", wndh);
|
OutTraceD("%s: ret=%x\n", ApiName, wndh);
|
||||||
return wndh;
|
return wndh;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static LPCSTR ClassToStr(LPCSTR Class)
|
||||||
|
{
|
||||||
|
static char AtomBuf[20+1];
|
||||||
|
if(((DWORD)Class & 0xFFFF0000) == 0){
|
||||||
|
sprintf(AtomBuf, "ATOM(%X)", Class);
|
||||||
|
return AtomBuf;
|
||||||
|
}
|
||||||
|
return Class;
|
||||||
|
}
|
||||||
|
|
||||||
|
// to do: implement and use ClassToWStr() for widechar call
|
||||||
|
|
||||||
|
HWND WINAPI extCreateWindowExW(
|
||||||
|
DWORD dwExStyle,
|
||||||
|
LPCWSTR lpClassName,
|
||||||
|
LPCWSTR lpWindowName,
|
||||||
|
DWORD dwStyle,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
int nWidth,
|
||||||
|
int nHeight,
|
||||||
|
HWND hWndParent,
|
||||||
|
HMENU hMenu,
|
||||||
|
HINSTANCE hInstance,
|
||||||
|
LPVOID lpParam)
|
||||||
|
{
|
||||||
|
char sClassName[256+1];
|
||||||
|
char sWindowName[256+1];
|
||||||
|
wcstombs_s(NULL, sClassName, lpClassName, 80);
|
||||||
|
wcstombs_s(NULL, sWindowName, lpWindowName, 80);
|
||||||
|
|
||||||
|
OutTraceD("CreateWindowExW: class=\"%ls\" wname=\"%ls\" pos=(%d,%d) size=(%d,%d) Style=%x(%s) ExStyle=%x(%s)\n",
|
||||||
|
lpClassName, lpWindowName, x, y, nWidth, nHeight,
|
||||||
|
dwStyle, ExplainStyle(dwStyle), dwExStyle, ExplainExStyle(dwExStyle));
|
||||||
|
if(IsDebug) OutTrace("CreateWindowExW: DEBUG screen=(%d,%d)\n", dxw.GetScreenWidth(), dxw.GetScreenHeight());
|
||||||
|
|
||||||
|
return extCreateWindowCommon("CreateWindowExW", dwExStyle, sClassName, sWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
// GHO: pro Diablo
|
||||||
|
HWND WINAPI extCreateWindowExA(
|
||||||
|
DWORD dwExStyle,
|
||||||
|
LPCTSTR lpClassName,
|
||||||
|
LPCTSTR lpWindowName,
|
||||||
|
DWORD dwStyle,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
int nWidth,
|
||||||
|
int nHeight,
|
||||||
|
HWND hWndParent,
|
||||||
|
HMENU hMenu,
|
||||||
|
HINSTANCE hInstance,
|
||||||
|
LPVOID lpParam)
|
||||||
|
{
|
||||||
|
OutTraceD("CreateWindowExA: class=\"%s\" wname=\"%s\" pos=(%d,%d) size=(%d,%d) Style=%x(%s) ExStyle=%x(%s)\n",
|
||||||
|
ClassToStr(lpClassName), lpWindowName, x, y, nWidth, nHeight,
|
||||||
|
dwStyle, ExplainStyle(dwStyle), dwExStyle, ExplainExStyle(dwExStyle));
|
||||||
|
if(IsDebug) OutTrace("CreateWindowExA: DEBUG screen=(%d,%d)\n", dxw.GetScreenWidth(), dxw.GetScreenHeight());
|
||||||
|
|
||||||
|
return extCreateWindowCommon("CreateWindowExA", dwExStyle, lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam);
|
||||||
|
}
|
||||||
|
|
||||||
LRESULT WINAPI extCallWindowProc(WNDPROC lpPrevWndFunc, HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
LRESULT WINAPI extCallWindowProc(WNDPROC lpPrevWndFunc, HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
// v2.02.30: fix (Imperialism II): apply to main window only !!!
|
// v2.02.30: fix (Imperialism II): apply to main window only !!!
|
||||||
@ -1233,39 +1255,48 @@ LRESULT WINAPI extDefWindowProc(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lPara
|
|||||||
|
|
||||||
int WINAPI extFillRect(HDC hdc, const RECT *lprc, HBRUSH hbr)
|
int WINAPI extFillRect(HDC hdc, const RECT *lprc, HBRUSH hbr)
|
||||||
{
|
{
|
||||||
RECT rc, trim;
|
int res;
|
||||||
HWND hWnd;
|
RECT rc;
|
||||||
OutTraceD("FillRect: hdc=%x xy=(%d,%d)-(%d,%d)\n", hdc, lprc->left, lprc->top, lprc->right, lprc->bottom);
|
OutTraceD("FillRect: hdc=%x hbrush=%x rect=(%d,%d)-(%d,%d)\n", hdc, hbr, lprc->left, lprc->top, lprc->right, lprc->bottom);
|
||||||
|
|
||||||
|
// when not in fullscreen mode, just proxy the call
|
||||||
|
if(!dxw.IsFullScreen()) return (*pFillRect)(hdc, lprc, hbr);
|
||||||
|
|
||||||
memcpy(&rc, lprc, sizeof(rc));
|
memcpy(&rc, lprc, sizeof(rc));
|
||||||
hWnd = WindowFromDC(hdc);
|
if(OBJ_DC == GetObjectType(hdc)){
|
||||||
if((hWnd == dxw.GethWnd()) ||
|
if(rc.left < 0) rc.left = 0;
|
||||||
(hWnd == 0) ||
|
if(rc.top < 0) rc.top = 0;
|
||||||
(hWnd == GetDesktopWindow())){
|
if((DWORD)rc.right > dxw.GetScreenWidth()) rc.right = dxw.GetScreenWidth();
|
||||||
// trim: some games (Player Manager 98) clear the screen by filling an exagerated rect
|
if((DWORD)rc.bottom > dxw.GetScreenHeight()) rc.bottom = dxw.GetScreenHeight();
|
||||||
(*pGetClientRect)(dxw.GethWnd(), &trim);
|
dxw.MapClient(&rc);
|
||||||
hdc=GetDC(dxw.GethWnd());
|
OutTraceD("FillRect: fixed rect=(%d,%d)-(%d,%d)\n", rc.left, rc.top, rc.right, rc.bottom);
|
||||||
dxw.MapWindowRect(&rc);
|
|
||||||
if(rc.left < trim.left) rc.left = trim.left;
|
|
||||||
if(rc.top < trim.top) rc.top = trim.top;
|
|
||||||
if(rc.right > trim.right) rc.right = trim.right;
|
|
||||||
if(rc.bottom > trim.bottom) rc.bottom = trim.bottom;
|
|
||||||
OutTraceD("FillRect: hwnd=%x hdc=%x fixed xy=(%d,%d)-(%d,%d)\n", hWnd, hdc, rc.left, rc.top, rc.right, rc.bottom);
|
|
||||||
}
|
}
|
||||||
if (dxw.dwFlags1 & FIXTEXTOUT) {
|
|
||||||
// to be verified: why shifting and not scaling?
|
res=(*pFillRect)(hdc, &rc, hbr);
|
||||||
POINT anchor;
|
return res;
|
||||||
anchor.x=rc.left;
|
}
|
||||||
anchor.y=rc.top;
|
|
||||||
(*pClientToScreen)(dxw.GethWnd(), &anchor);
|
int WINAPI extFrameRect(HDC hdc, const RECT *lprc, HBRUSH hbr)
|
||||||
rc.left=anchor.x;
|
{
|
||||||
rc.top=anchor.y;
|
int res;
|
||||||
anchor.x=rc.right;
|
RECT rc;
|
||||||
anchor.y=rc.bottom;
|
OutTraceD("FrameRect: hdc=%x hbrush=%x rect=(%d,%d)-(%d,%d)\n", hdc, hbr, lprc->left, lprc->top, lprc->right, lprc->bottom);
|
||||||
(*pClientToScreen)(dxw.GethWnd(), &anchor);
|
|
||||||
rc.right=anchor.x;
|
// when not in fullscreen mode, just proxy the call
|
||||||
rc.bottom=anchor.y;
|
if(!dxw.IsFullScreen()) return (*pFrameRect)(hdc, lprc, hbr);
|
||||||
|
|
||||||
|
memcpy(&rc, lprc, sizeof(rc));
|
||||||
|
if(OBJ_DC == GetObjectType(hdc)){
|
||||||
|
if(rc.left < 0) rc.left = 0;
|
||||||
|
if(rc.top < 0) rc.top = 0;
|
||||||
|
if((DWORD)rc.right > dxw.GetScreenWidth()) rc.right = dxw.GetScreenWidth();
|
||||||
|
if((DWORD)rc.bottom > dxw.GetScreenHeight()) rc.bottom = dxw.GetScreenHeight();
|
||||||
|
dxw.MapClient(&rc);
|
||||||
|
OutTraceD("FrameRect: fixed rect=(%d,%d)-(%d,%d)\n", rc.left, rc.top, rc.right, rc.bottom);
|
||||||
}
|
}
|
||||||
return (*pFillRect)(hdc, &rc, hbr);
|
|
||||||
|
res=(*pFrameRect)(hdc, &rc, hbr);
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL WINAPI extClipCursor(RECT *lpRectArg)
|
BOOL WINAPI extClipCursor(RECT *lpRectArg)
|
||||||
@ -1363,7 +1394,7 @@ LONG WINAPI extChangeDisplaySettings(DEVMODE *lpDevMode, DWORD dwflags)
|
|||||||
{
|
{
|
||||||
if(IsTraceD){
|
if(IsTraceD){
|
||||||
OutTrace("ChangeDisplaySettings: lpDevMode=%x flags=%x", lpDevMode, dwflags);
|
OutTrace("ChangeDisplaySettings: lpDevMode=%x flags=%x", lpDevMode, dwflags);
|
||||||
if (lpDevMode) OutTrace(" fields=%x(%s) size=(%d x %d) bpp=%x",
|
if (lpDevMode) OutTrace(" fields=%x(%s) size=(%d x %d) bpp=%d",
|
||||||
lpDevMode->dmFields, ExplainDevModeFields(lpDevMode->dmFields),
|
lpDevMode->dmFields, ExplainDevModeFields(lpDevMode->dmFields),
|
||||||
lpDevMode->dmPelsWidth, lpDevMode->dmPelsHeight, lpDevMode->dmBitsPerPel);
|
lpDevMode->dmPelsWidth, lpDevMode->dmPelsHeight, lpDevMode->dmBitsPerPel);
|
||||||
OutTrace("\n");
|
OutTrace("\n");
|
||||||
@ -1376,7 +1407,7 @@ LONG WINAPI extChangeDisplaySettingsEx(LPCTSTR lpszDeviceName, DEVMODE *lpDevMod
|
|||||||
{
|
{
|
||||||
if(IsTraceD){
|
if(IsTraceD){
|
||||||
OutTrace("ChangeDisplaySettingsEx: DeviceName=%s lpDevMode=%x flags=%x", lpszDeviceName, lpDevMode, dwflags);
|
OutTrace("ChangeDisplaySettingsEx: DeviceName=%s lpDevMode=%x flags=%x", lpszDeviceName, lpDevMode, dwflags);
|
||||||
if (lpDevMode) OutTrace(" size=(%d x %d) bpp=%x",
|
if (lpDevMode) OutTrace(" size=(%d x %d) bpp=%d",
|
||||||
lpDevMode->dmPelsWidth, lpDevMode->dmPelsHeight, lpDevMode->dmBitsPerPel);
|
lpDevMode->dmPelsWidth, lpDevMode->dmPelsHeight, lpDevMode->dmBitsPerPel);
|
||||||
OutTrace("\n");
|
OutTrace("\n");
|
||||||
}
|
}
|
||||||
@ -1391,8 +1422,7 @@ HDC WINAPI extGDIGetDC(HWND hwnd)
|
|||||||
|
|
||||||
OutTraceD("GDI.GetDC: hwnd=%x\n", hwnd);
|
OutTraceD("GDI.GetDC: hwnd=%x\n", hwnd);
|
||||||
lochwnd=hwnd;
|
lochwnd=hwnd;
|
||||||
//if (dxw.IsFullScreen() && dxw.IsDesktop()) {
|
if (dxw.IsRealDesktop(hwnd)) {
|
||||||
if (dxw.IsDesktop(hwnd)) {
|
|
||||||
OutTraceD("GDI.GetDC: desktop remapping hwnd=%x->%x\n", hwnd, dxw.GethWnd());
|
OutTraceD("GDI.GetDC: desktop remapping hwnd=%x->%x\n", hwnd, dxw.GethWnd());
|
||||||
lochwnd=dxw.GethWnd();
|
lochwnd=dxw.GethWnd();
|
||||||
}
|
}
|
||||||
@ -1437,7 +1467,7 @@ HDC WINAPI extGDIGetWindowDC(HWND hwnd)
|
|||||||
HWND lochwnd;
|
HWND lochwnd;
|
||||||
OutTraceD("GDI.GetWindowDC: hwnd=%x\n", hwnd);
|
OutTraceD("GDI.GetWindowDC: hwnd=%x\n", hwnd);
|
||||||
lochwnd=hwnd;
|
lochwnd=hwnd;
|
||||||
if (dxw.IsDesktop(hwnd)) {
|
if (dxw.IsRealDesktop(hwnd)) {
|
||||||
OutTraceD("GDI.GetWindowDC: desktop remapping hwnd=%x->%x\n", hwnd, dxw.GethWnd());
|
OutTraceD("GDI.GetWindowDC: desktop remapping hwnd=%x->%x\n", hwnd, dxw.GethWnd());
|
||||||
lochwnd=dxw.GethWnd();
|
lochwnd=dxw.GethWnd();
|
||||||
}
|
}
|
||||||
@ -1465,7 +1495,7 @@ int WINAPI extGDIReleaseDC(HWND hwnd, HDC hDC)
|
|||||||
int res;
|
int res;
|
||||||
|
|
||||||
OutTraceD("GDI.ReleaseDC: hwnd=%x hdc=%x\n", hwnd, hDC);
|
OutTraceD("GDI.ReleaseDC: hwnd=%x hdc=%x\n", hwnd, hDC);
|
||||||
if (dxw.IsDesktop(hwnd)) hwnd=dxw.GethWnd();
|
if (dxw.IsRealDesktop(hwnd)) hwnd=dxw.GethWnd();
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
if(dxw.lpDDSPrimHDC){
|
if(dxw.lpDDSPrimHDC){
|
||||||
@ -1700,6 +1730,7 @@ BOOL WINAPI extScrollDC(HDC hDC, int dx, int dy, const RECT *lprcScroll, const R
|
|||||||
{
|
{
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
HWND WINAPI extGetTopWindow(HWND hwnd)
|
HWND WINAPI extGetTopWindow(HWND hwnd)
|
||||||
{
|
{
|
||||||
HWND ret;
|
HWND ret;
|
||||||
@ -1708,4 +1739,46 @@ HWND WINAPI extGetTopWindow(HWND hwnd)
|
|||||||
ret = (dxw.IsFullScreen() && dxw.IsDesktop(hwnd)) ? dxw.GethWnd() : (*pGetTopWindow)(hwnd);
|
ret = (dxw.IsFullScreen() && dxw.IsDesktop(hwnd)) ? dxw.GethWnd() : (*pGetTopWindow)(hwnd);
|
||||||
OutTraceD("GetTopWindow: ret=%x\n", ret);
|
OutTraceD("GetTopWindow: ret=%x\n", ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LONG WINAPI extTabbedTextOutA(HDC hdc, int X, int Y, LPCTSTR lpString, int nCount, int nTabPositions, const LPINT lpnTabStopPositions, int nTabOrigin)
|
||||||
|
{
|
||||||
|
BOOL res;
|
||||||
|
OutTraceD("TabbedTextOut: hdc=%x xy=(%d,%d) nCount=%d nTP=%d nTOS=%d str=(%d)\"%s\"\n",
|
||||||
|
hdc, X, Y, nCount, nTabPositions, nTabOrigin, lpString);
|
||||||
|
|
||||||
|
if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdc))){
|
||||||
|
dxw.MapClient(&X, &Y);
|
||||||
|
OutTraceD("TextOut: fixed dest=(%d,%d)\n", X, Y);
|
||||||
|
}
|
||||||
|
|
||||||
|
res=(*pTabbedTextOutA)(hdc, X, Y, lpString, nCount, nTabPositions, lpnTabStopPositions, nTabOrigin);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL WINAPI extDestroyWindow(HWND hWnd)
|
||||||
|
{
|
||||||
|
BOOL res;
|
||||||
|
OutTraceB("DestroyWindow: hwnd=%x\n", hWnd);
|
||||||
|
if (hWnd == dxw.GethWnd()) {
|
||||||
|
OutTraceD("DestroyWindow: destroy main hwnd=%x\n", hWnd);
|
||||||
|
if(1) return 0;
|
||||||
|
dxw.SethWnd(NULL);
|
||||||
|
}
|
||||||
|
res=(*pDestroyWindow)(hWnd);
|
||||||
|
if(!res)OutTraceE("DestroyWindow: ERROR err=%d\n", GetLastError());
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL WINAPI extCloseWindow(HWND hWnd)
|
||||||
|
{
|
||||||
|
BOOL res;
|
||||||
|
OutTraceB("CloseWindow: hwnd=%x\n", hWnd);
|
||||||
|
if (hWnd == dxw.GethWnd()) {
|
||||||
|
OutTraceD("CloseWindow: close main hwnd=%x\n", hWnd);
|
||||||
|
dxw.SethWnd(NULL);
|
||||||
|
}
|
||||||
|
res=(*pCloseWindow)(hWnd);
|
||||||
|
if(!res)OutTraceE("CloseWindow: ERROR err=%d\n", GetLastError());
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#define _WIN32_WINNT 0x0600
|
#define _WIN32_WINNT 0x0600
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#define _CRT_SECURE_NO_WARNINGS
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
|
@ -20,8 +20,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
// MainFrm.cpp : CMainFrame defines the class behavior.
|
// MainFrm.cpp : CMainFrame defines the class behavior.
|
||||||
//
|
//
|
||||||
|
|
||||||
#define _CRT_SECURE_NO_DEPRECATE 1
|
|
||||||
|
|
||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "dxwndhost.h"
|
#include "dxwndhost.h"
|
||||||
|
|
||||||
|
@ -159,6 +159,7 @@
|
|||||||
#define IDC_CDROMDRIVETYPE 1114
|
#define IDC_CDROMDRIVETYPE 1114
|
||||||
#define IDC_OUTREGISTRY 1115
|
#define IDC_OUTREGISTRY 1115
|
||||||
#define IDC_NOWINDOWMOVE 1116
|
#define IDC_NOWINDOWMOVE 1116
|
||||||
|
#define IDC_DISABLEHAL 1117
|
||||||
#define ID_MODIFY 32771
|
#define ID_MODIFY 32771
|
||||||
#define ID_DELETE 32772
|
#define ID_DELETE 32772
|
||||||
#define ID_ADD 32773
|
#define ID_ADD 32773
|
||||||
|
@ -3,6 +3,8 @@
|
|||||||
// Write the project specific include files.
|
// Write the project specific include files.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#define _CRT_SECURE_NO_DEPRECATE
|
||||||
|
|
||||||
#if !defined(AFX_STDAFX_H__9139BF92_2E61_4CBC_AB58_646DE772409F__INCLUDED_)
|
#if !defined(AFX_STDAFX_H__9139BF92_2E61_4CBC_AB58_646DE772409F__INCLUDED_)
|
||||||
#define AFX_STDAFX_H__9139BF92_2E61_4CBC_AB58_646DE772409F__INCLUDED_
|
#define AFX_STDAFX_H__9139BF92_2E61_4CBC_AB58_646DE772409F__INCLUDED_
|
||||||
|
|
||||||
|
@ -39,6 +39,7 @@ void CTabDirectX::DoDataExchange(CDataExchange* pDX)
|
|||||||
DDX_Check(pDX, IDC_FULLRECTBLT, cTarget->m_FullRectBlt);
|
DDX_Check(pDX, IDC_FULLRECTBLT, cTarget->m_FullRectBlt);
|
||||||
DDX_Check(pDX, IDC_NOPALETTEUPDATE, cTarget->m_NoPaletteUpdate);
|
DDX_Check(pDX, IDC_NOPALETTEUPDATE, cTarget->m_NoPaletteUpdate);
|
||||||
DDX_Check(pDX, IDC_SETCOMPATIBILITY, cTarget->m_SetCompatibility);
|
DDX_Check(pDX, IDC_SETCOMPATIBILITY, cTarget->m_SetCompatibility);
|
||||||
|
DDX_Check(pDX, IDC_DISABLEHAL, cTarget->m_DisableHAL);
|
||||||
DDX_Check(pDX, IDC_SAVECAPS, cTarget->m_SaveCaps);
|
DDX_Check(pDX, IDC_SAVECAPS, cTarget->m_SaveCaps);
|
||||||
// DirectInput
|
// DirectInput
|
||||||
DDX_Check(pDX, IDC_HOOKDI, cTarget->m_HookDI);
|
DDX_Check(pDX, IDC_HOOKDI, cTarget->m_HookDI);
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
// TargetDlg.cpp : Implementation
|
// TargetDlg.cpp : Implementation
|
||||||
//
|
//
|
||||||
|
|
||||||
#define _CRT_SECURE_NO_DEPRECATE 1
|
|
||||||
|
|
||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "dxwndhost.h"
|
#include "dxwndhost.h"
|
||||||
#include "TargetDlg.h"
|
#include "TargetDlg.h"
|
||||||
@ -36,6 +34,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
|
|||||||
m_SuppressIME = FALSE;
|
m_SuppressIME = FALSE;
|
||||||
m_SuppressD3DExt = FALSE;
|
m_SuppressD3DExt = FALSE;
|
||||||
m_SetCompatibility = FALSE;
|
m_SetCompatibility = FALSE;
|
||||||
|
m_DisableHAL = FALSE;
|
||||||
m_SaveCaps = FALSE;
|
m_SaveCaps = FALSE;
|
||||||
m_SingleProcAffinity = FALSE;
|
m_SingleProcAffinity = FALSE;
|
||||||
m_LimitResources = FALSE;
|
m_LimitResources = FALSE;
|
||||||
|
@ -106,6 +106,7 @@ public:
|
|||||||
BOOL m_CDROMDriveType;
|
BOOL m_CDROMDriveType;
|
||||||
BOOL m_SuppressIME;
|
BOOL m_SuppressIME;
|
||||||
BOOL m_SetCompatibility;
|
BOOL m_SetCompatibility;
|
||||||
|
BOOL m_DisableHAL;
|
||||||
BOOL m_SaveCaps;
|
BOOL m_SaveCaps;
|
||||||
BOOL m_SingleProcAffinity;
|
BOOL m_SingleProcAffinity;
|
||||||
BOOL m_WireFrame;
|
BOOL m_WireFrame;
|
||||||
|
Binary file not shown.
@ -1,8 +1,6 @@
|
|||||||
// dxwndhost.cpp : Application and class definitions
|
// dxwndhost.cpp : Application and class definitions
|
||||||
//
|
//
|
||||||
|
|
||||||
#define _CRT_SECURE_NO_DEPRECATE 1
|
|
||||||
|
|
||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "dxwndhost.h"
|
#include "dxwndhost.h"
|
||||||
|
|
||||||
|
@ -316,13 +316,13 @@ BEGIN
|
|||||||
CONTROL "Auto Primary Surface Refresh",IDC_AUTOREFRESH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,38,126,9
|
CONTROL "Auto Primary Surface Refresh",IDC_AUTOREFRESH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,38,126,9
|
||||||
GROUPBOX "DirectDraw Surface handling",IDC_STATIC,112,3,181,167
|
GROUPBOX "DirectDraw Surface handling",IDC_STATIC,112,3,181,167
|
||||||
CONTROL "VIDEO->SYSTEM surf. on fail",IDC_VIDEOTOSYSTEMMEM,
|
CONTROL "VIDEO->SYSTEM surf. on fail",IDC_VIDEOTOSYSTEMMEM,
|
||||||
"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,118,49,126,9
|
"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,118,50,126,9
|
||||||
CONTROL "Suppress DX common errors",IDC_SUPPRESSDXERRORS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,61,127,10
|
CONTROL "Suppress DX common errors",IDC_SUPPRESSDXERRORS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,62,127,10
|
||||||
CONTROL "Make Backbuf attachable",IDC_BACKBUFATTACH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,84,119,10
|
CONTROL "Make Backbuf attachable",IDC_BACKBUFATTACH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,86,119,10
|
||||||
CONTROL "Blit from BackBuffer",IDC_BLITFROMBACKBUFFER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,95,119,10
|
CONTROL "Blit from BackBuffer",IDC_BLITFROMBACKBUFFER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,98,119,10
|
||||||
CONTROL "Suppress clipping",IDC_SUPPRESSCLIPPING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,107,119,10
|
CONTROL "Suppress clipping",IDC_SUPPRESSCLIPPING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,110,119,10
|
||||||
CONTROL "Full RECT Blit",IDC_FULLRECTBLT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,119,119,10
|
CONTROL "Full RECT Blit",IDC_FULLRECTBLT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,122,119,10
|
||||||
CONTROL "Palette update don't Blit",IDC_NOPALETTEUPDATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,130,119,10
|
CONTROL "Palette update don't Blit",IDC_NOPALETTEUPDATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,134,119,10
|
||||||
LTEXT "DirectInput initial coord. and X,Y range",IDC_STATIC,19,197,146,9
|
LTEXT "DirectInput initial coord. and X,Y range",IDC_STATIC,19,197,146,9
|
||||||
LTEXT "X",IDC_STATIC,13,212,9,9
|
LTEXT "X",IDC_STATIC,13,212,9,9
|
||||||
LTEXT "Y",IDC_STATIC,40,212,9,9
|
LTEXT "Y",IDC_STATIC,40,212,9,9
|
||||||
@ -339,9 +339,10 @@ BEGIN
|
|||||||
EDITTEXT IDC_MAXY,148,209,17,14,ES_AUTOHSCROLL,WS_EX_RIGHT
|
EDITTEXT IDC_MAXY,148,209,17,14,ES_AUTOHSCROLL,WS_EX_RIGHT
|
||||||
CONTROL "DirectInput Hooking",IDC_HOOKDI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,182,97,12
|
CONTROL "DirectInput Hooking",IDC_HOOKDI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,182,97,12
|
||||||
GROUPBOX "DirectInput",IDC_STATIC,7,172,286,61
|
GROUPBOX "DirectInput",IDC_STATIC,7,172,286,61
|
||||||
CONTROL "Set AERO compatible mode",IDC_SETCOMPATIBILITY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,141,109,12
|
CONTROL "Set AERO compatible mode",IDC_SETCOMPATIBILITY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,146,109,12
|
||||||
CONTROL "Highlight blit to primary",IDC_MARKBLIT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,72,127,10
|
CONTROL "Highlight blit to primary",IDC_MARKBLIT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,74,127,10
|
||||||
CONTROL "Preserve surface capabilities",IDC_SAVECAPS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,14,109,12
|
CONTROL "Preserve surface capabilities",IDC_SAVECAPS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,14,109,12
|
||||||
|
CONTROL "Disable HAL support",IDC_DISABLEHAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,158,109,12
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_TAB_MOUSE DIALOGEX 0, 0, 300, 240
|
IDD_TAB_MOUSE DIALOGEX 0, 0, 300, 240
|
||||||
@ -437,7 +438,7 @@ IDD_TAB_GDI DIALOGEX 0, 0, 300, 240
|
|||||||
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
|
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
CONTROL "Fix TextOutA placement",IDC_FIXTEXTOUT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,28,125,10
|
CONTROL "Scale font parameters",IDC_FIXTEXTOUT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,28,125,10
|
||||||
GROUPBOX "GDI Handling",IDC_STATIC,6,3,140,51
|
GROUPBOX "GDI Handling",IDC_STATIC,6,3,140,51
|
||||||
CONTROL "Hook GDI",IDC_HOOKGDI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,16,119,10
|
CONTROL "Hook GDI",IDC_HOOKGDI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,16,119,10
|
||||||
CONTROL "Map GDI HDC to Primary DC",IDC_MAPGDITOPRIMARY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,40,119,10
|
CONTROL "Map GDI HDC to Primary DC",IDC_MAPGDITOPRIMARY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,40,119,10
|
||||||
|
Binary file not shown.
@ -1,8 +1,6 @@
|
|||||||
// dxwndhostDoc.cpp : CDxwndhostDoc Define the behavior of the class.
|
// dxwndhostDoc.cpp : CDxwndhostDoc Define the behavior of the class.
|
||||||
//
|
//
|
||||||
|
|
||||||
#define _CRT_SECURE_NO_DEPRECATE 1
|
|
||||||
|
|
||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "dxwndhost.h"
|
#include "dxwndhost.h"
|
||||||
|
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
#define _CRT_SECURE_NO_DEPRECATE 1
|
|
||||||
|
|
||||||
// dxwndhostView.cpp : CDxwndhostView Define the behavior of the class.
|
// dxwndhostView.cpp : CDxwndhostView Define the behavior of the class.
|
||||||
//
|
//
|
||||||
|
|
||||||
@ -142,6 +140,7 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg)
|
|||||||
if(dlg->m_SuppressIME) t->flags2 |= SUPPRESSIME;
|
if(dlg->m_SuppressIME) t->flags2 |= SUPPRESSIME;
|
||||||
if(dlg->m_SuppressD3DExt) t->flags3 |= SUPPRESSD3DEXT;
|
if(dlg->m_SuppressD3DExt) t->flags3 |= SUPPRESSD3DEXT;
|
||||||
if(dlg->m_SetCompatibility) t->flags2 |= SETCOMPATIBILITY;
|
if(dlg->m_SetCompatibility) t->flags2 |= SETCOMPATIBILITY;
|
||||||
|
if(dlg->m_DisableHAL) t->flags3 |= DISABLEHAL;
|
||||||
if(dlg->m_SaveCaps) t->flags3 |= SAVECAPS;
|
if(dlg->m_SaveCaps) t->flags3 |= SAVECAPS;
|
||||||
if(dlg->m_SingleProcAffinity) t->flags3 |= SINGLEPROCAFFINITY;
|
if(dlg->m_SingleProcAffinity) t->flags3 |= SINGLEPROCAFFINITY;
|
||||||
if(dlg->m_SaveLoad) t->flags |= SAVELOAD;
|
if(dlg->m_SaveLoad) t->flags |= SAVELOAD;
|
||||||
@ -253,6 +252,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg)
|
|||||||
dlg->m_SuppressIME = t->flags2 & SUPPRESSIME ? 1 : 0;
|
dlg->m_SuppressIME = t->flags2 & SUPPRESSIME ? 1 : 0;
|
||||||
dlg->m_SuppressD3DExt = t->flags3 & SUPPRESSD3DEXT ? 1 : 0;
|
dlg->m_SuppressD3DExt = t->flags3 & SUPPRESSD3DEXT ? 1 : 0;
|
||||||
dlg->m_SetCompatibility = t->flags2 & SETCOMPATIBILITY ? 1 : 0;
|
dlg->m_SetCompatibility = t->flags2 & SETCOMPATIBILITY ? 1 : 0;
|
||||||
|
dlg->m_DisableHAL = t->flags3 & DISABLEHAL ? 1 : 0;
|
||||||
dlg->m_SaveCaps = t->flags3 & SAVECAPS ? 1 : 0;
|
dlg->m_SaveCaps = t->flags3 & SAVECAPS ? 1 : 0;
|
||||||
dlg->m_SingleProcAffinity = t->flags3 & SINGLEPROCAFFINITY ? 1 : 0;
|
dlg->m_SingleProcAffinity = t->flags3 & SINGLEPROCAFFINITY ? 1 : 0;
|
||||||
dlg->m_LimitResources = t->flags2 & LIMITRESOURCES ? 1 : 0;
|
dlg->m_LimitResources = t->flags2 & LIMITRESOURCES ? 1 : 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user