mirror of
https://github.com/DxWnd/DxWnd.reloaded
synced 2024-12-30 09:25:35 +01:00
v2_03_57_src
Former-commit-id: 56291ae33fff04971e7e7e7e3ec3de827f0f4284
This commit is contained in:
parent
2bde039a5b
commit
9aca112da3
@ -218,6 +218,8 @@
|
||||
#define LIMITDDRAW 0x00000001 // Limit the maximum available ddraw object version
|
||||
#define DISABLEDISABLEALTTAB 0x00000002 // Disables the compatibility patch that disables the Alt-Tab key and other special combinations
|
||||
#define FIXCLIPPERAREA 0x00000004 // fix clipper area in ddraw & GDI shared DC mode
|
||||
#define HOOKDIRECTSOUND 0x00000008
|
||||
#define HOOKSMACKW32 0x00000010
|
||||
|
||||
// eighth flags DWORD dxw.dwFlags8:
|
||||
|
||||
|
@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:cf21cb7f4efa14ec9c887287c8761ec1bc41387407bb79ad1e0a828389390503
|
||||
size 625664
|
||||
oid sha256:f5024ec55f3917b2908e231698222147516bb21efda0938c969100fc43f7fd9f
|
||||
size 626688
|
||||
|
@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:4853f064ace470ed224072af04f8ad1f48d985299be7f51b3adf36a279b4222f
|
||||
size 549376
|
||||
oid sha256:b2afb528861c05b34730d201b567c3e47f969732676f7d9fd998ffe8cf16674d
|
||||
size 553472
|
||||
|
120
build/dxwnd.ini
Normal file
120
build/dxwnd.ini
Normal file
@ -0,0 +1,120 @@
|
||||
[window]
|
||||
exportpath=D:\DxWnd\exports\
|
||||
exepath=D:\Games\msgolf\Golf '98 Trial\
|
||||
posx=981
|
||||
posy=464
|
||||
sizx=320
|
||||
sizy=200
|
||||
[target]
|
||||
title0=Miscrosoft Golf '98 Trial
|
||||
path0=D:\Games\msgolf\Golf '98 Trial\game.exe
|
||||
launchpath0=
|
||||
module0=
|
||||
opengllib0=
|
||||
notes0=
|
||||
registry0=[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Golf '98]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Golf '98\Version 1.0 Demo]\n"AppPath"="D:\\Games\\msgolf\\Golf '98 Trial"\n"InstallType"="1"\n"InstalledPath"="D:\\Games\\msgolf\\Golf '98 Trial"\n"CDPath"="D:\\Games\\msgolf\\Golf '98 Trial\\"\n"ITF File Path"="D:\\Games\\msgolf\\Golf '98 Trial\\golf.itf"\n"Launched"="1"\n"PID"=""\n"Path"="D:\\Games\\msgolf\\Golf '98 Trial"\n"VersionType"="TrialVersion"\n"InstalledGroup"="1"\n"LangID"=dword:00000009\n\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games]\n[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games\Golf '98]\n[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games\Golf '98\Version 1.0 Demo]\n"AppPath"="D:\\Games\\msgolf\\Golf '98 Trial"\n"InstallType"="1"\n"InstalledPath"="D:\\Games\\msgolf\\Golf '98 Trial"\n"CDPath"="D:\\Games\\msgolf\\Golf '98 Trial\\"\n"ITF File Path"="D:\\Games\\msgolf\\Golf '98 Trial\\golf.itf"\n"Launched"="1"\n"PID"=""\n"Path"="D:\\Games\\msgolf\\Golf '98 Trial"\n"VersionType"="TrialVersion"\n"InstalledGroup"="1"\n"LangID"=dword:00000009
|
||||
ver0=0
|
||||
coord0=0
|
||||
flag0=2101474
|
||||
flagg0=1476395016
|
||||
flagh0=1044
|
||||
flagi0=1210187780
|
||||
flagj0=128
|
||||
flagk0=327680
|
||||
flagl0=4
|
||||
flagm0=0
|
||||
tflag0=0
|
||||
posx0=50
|
||||
posy0=50
|
||||
sizx0=880
|
||||
sizy0=660
|
||||
maxfps0=0
|
||||
initts0=0
|
||||
winver0=0
|
||||
maxres0=-1
|
||||
swapeffect0=0
|
||||
maxddinterface0=0
|
||||
title1=M1 Tank Platoon 2
|
||||
path1=D:\Games\M1 Tank Platoon 2\M1TP2.exe
|
||||
launchpath1=
|
||||
module1=
|
||||
opengllib1=
|
||||
notes1=
|
||||
registry1=
|
||||
ver1=0
|
||||
coord1=0
|
||||
flag1=134238242
|
||||
flagg1=1207959552
|
||||
flagh1=20
|
||||
flagi1=138412036
|
||||
flagj1=268439680
|
||||
flagk1=0
|
||||
flagl1=0
|
||||
flagm1=0
|
||||
tflag1=0
|
||||
posx1=50
|
||||
posy1=50
|
||||
sizx1=800
|
||||
sizy1=600
|
||||
maxfps1=0
|
||||
initts1=8
|
||||
winver1=0
|
||||
maxres1=-1
|
||||
swapeffect1=0
|
||||
maxddinterface1=7
|
||||
title2=Imperialism II
|
||||
path2=D:\Games\Imperialism 2\imperialism II.exe
|
||||
launchpath2=
|
||||
module2=
|
||||
opengllib2=
|
||||
notes2=
|
||||
registry2=
|
||||
ver2=0
|
||||
coord2=0
|
||||
flag2=679485474
|
||||
flagg2=1207959552
|
||||
flagh2=20
|
||||
flagi2=4194308
|
||||
flagj2=0
|
||||
flagk2=262144
|
||||
flagl2=4
|
||||
flagm2=0
|
||||
tflag2=0
|
||||
posx2=50
|
||||
posy2=50
|
||||
sizx2=800
|
||||
sizy2=600
|
||||
maxfps2=0
|
||||
initts2=0
|
||||
winver2=0
|
||||
maxres2=0
|
||||
swapeffect2=0
|
||||
maxddinterface2=7
|
||||
title3=Imperialism
|
||||
path3=D:\Games\Imperialism\Imperialism.exe
|
||||
launchpath3=
|
||||
module3=
|
||||
opengllib3=
|
||||
notes3=Note:\nMap zooming is currently not workind. Do not click on the magnifying glass, \nor the game will crash.
|
||||
registry3=
|
||||
ver3=0
|
||||
coord3=0
|
||||
flag3=1746935843
|
||||
flagg3=1744830464
|
||||
flagh3=20
|
||||
flagi3=71303172
|
||||
flagj3=128
|
||||
flagk3=262144
|
||||
flagl3=4
|
||||
flagm3=0
|
||||
tflag3=0
|
||||
posx3=50
|
||||
posy3=50
|
||||
sizx3=800
|
||||
sizy3=600
|
||||
maxfps3=0
|
||||
initts3=0
|
||||
winver3=0
|
||||
maxres3=-1
|
||||
swapeffect3=0
|
||||
maxddinterface3=7
|
31
build/dxwnd.reg
Normal file
31
build/dxwnd.reg
Normal file
@ -0,0 +1,31 @@
|
||||
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\]
|
||||
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games]
|
||||
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Golf '98]
|
||||
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Golf '98\Version 1.0 Demo]
|
||||
"AppPath"="D:\\Games\\msgolf\\Golf '98 Trial"
|
||||
"InstallType"="1"
|
||||
"InstalledPath"="D:\\Games\\msgolf\\Golf '98 Trial"
|
||||
"CDPath"="D:\\Games\\msgolf\\Golf '98 Trial\\"
|
||||
"ITF File Path"="D:\\Games\\msgolf\\Golf '98 Trial\\golf.itf"
|
||||
"Launched"="1"
|
||||
"PID"=""
|
||||
"Path"="D:\\Games\\msgolf\\Golf '98 Trial"
|
||||
"VersionType"="TrialVersion"
|
||||
"InstalledGroup"="1"
|
||||
"LangID"=dword:00000009
|
||||
|
||||
|
||||
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games]
|
||||
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games\Golf '98]
|
||||
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games\Golf '98\Version 1.0 Demo]
|
||||
"AppPath"="D:\\Games\\msgolf\\Golf '98 Trial"
|
||||
"InstallType"="1"
|
||||
"InstalledPath"="D:\\Games\\msgolf\\Golf '98 Trial"
|
||||
"CDPath"="D:\\Games\\msgolf\\Golf '98 Trial\\"
|
||||
"ITF File Path"="D:\\Games\\msgolf\\Golf '98 Trial\\golf.itf"
|
||||
"Launched"="1"
|
||||
"PID"=""
|
||||
"Path"="D:\\Games\\msgolf\\Golf '98 Trial"
|
||||
"VersionType"="TrialVersion"
|
||||
"InstalledGroup"="1"
|
||||
"LangID"=dword:00000009
|
@ -7,8 +7,8 @@ opengllib0=
|
||||
notes0=
|
||||
registry0=
|
||||
ver0=0
|
||||
coord0=1
|
||||
flag0=136314915
|
||||
coord0=0
|
||||
flag0=137363491
|
||||
flagg0=1207959552
|
||||
flagh0=20
|
||||
flagi0=138412036
|
||||
@ -21,12 +21,15 @@ minx0=0
|
||||
miny0=0
|
||||
maxx0=0
|
||||
maxy0=0
|
||||
posx0=0
|
||||
posy0=0
|
||||
sizx0=1280
|
||||
sizy0=960
|
||||
posx0=50
|
||||
posy0=50
|
||||
sizx0=800
|
||||
sizy0=600
|
||||
maxfps0=0
|
||||
initts0=0
|
||||
winver0=0
|
||||
maxres0=-1
|
||||
swapeffect0=0
|
||||
flagl0=0
|
||||
flagm0=0
|
||||
maxddinterface0=7
|
||||
|
29
build/exports/Duke Nukem Forever.dxw
Normal file
29
build/exports/Duke Nukem Forever.dxw
Normal file
@ -0,0 +1,29 @@
|
||||
[target]
|
||||
title0=Duke Nukem Forever
|
||||
path0=D:\Games\Duke Nukem Forever\System\DukeForever.exe
|
||||
launchpath0=
|
||||
module0=
|
||||
opengllib0=
|
||||
notes0=
|
||||
registry0=
|
||||
ver0=0
|
||||
coord0=0
|
||||
flag0=136314914
|
||||
flagg0=1207959552
|
||||
flagh0=20
|
||||
flagi0=138412036
|
||||
flagj0=4224
|
||||
flagk0=65536
|
||||
flagl0=0
|
||||
flagm0=0
|
||||
tflag0=0
|
||||
posx0=50
|
||||
posy0=50
|
||||
sizx0=800
|
||||
sizy0=600
|
||||
maxfps0=0
|
||||
initts0=0
|
||||
winver0=0
|
||||
maxres0=-1
|
||||
swapeffect0=0
|
||||
maxddinterface0=7
|
@ -10,7 +10,7 @@ flag0=134238242
|
||||
flagg0=1207959552
|
||||
flagh0=20
|
||||
flagi0=138412036
|
||||
flagj0=4224
|
||||
flagj0=268439680
|
||||
tflag0=0
|
||||
initx0=0
|
||||
inity0=0
|
||||
@ -26,3 +26,10 @@ maxfps0=0
|
||||
initts0=8
|
||||
winver0=0
|
||||
maxres0=-1
|
||||
notes0=
|
||||
registry0=
|
||||
flagk0=0
|
||||
flagl0=0
|
||||
flagm0=0
|
||||
swapeffect0=0
|
||||
maxddinterface0=7
|
||||
|
29
build/exports/Miscrosoft Golf '98 Trial.dxw
Normal file
29
build/exports/Miscrosoft Golf '98 Trial.dxw
Normal file
@ -0,0 +1,29 @@
|
||||
[target]
|
||||
title0=Miscrosoft Golf '98 Trial
|
||||
path0=D:\Games\msgolf\Golf '98 Trial\game.exe
|
||||
launchpath0=
|
||||
module0=
|
||||
opengllib0=
|
||||
notes0=
|
||||
registry0=[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Golf '98]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Golf '98\Version 1.0 Demo]\n"AppPath"="D:\\Games\\msgolf\\Golf '98 Trial"\n"InstallType"="1"\n"InstalledPath"="D:\\Games\\msgolf\\Golf '98 Trial"\n"CDPath"="D:\\Games\\msgolf\\Golf '98 Trial\\"\n"ITF File Path"="D:\\Games\\msgolf\\Golf '98 Trial\\golf.itf"\n"Launched"="1"\n"PID"=""\n"Path"="D:\\Games\\msgolf\\Golf '98 Trial"\n"VersionType"="TrialVersion"\n"InstalledGroup"="1"\n"LangID"=dword:00000009\n\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games]\n[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games\Golf '98]\n[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games\Golf '98\Version 1.0 Demo]\n"AppPath"="D:\\Games\\msgolf\\Golf '98 Trial"\n"InstallType"="1"\n"InstalledPath"="D:\\Games\\msgolf\\Golf '98 Trial"\n"CDPath"="D:\\Games\\msgolf\\Golf '98 Trial\\"\n"ITF File Path"="D:\\Games\\msgolf\\Golf '98 Trial\\golf.itf"\n"Launched"="1"\n"PID"=""\n"Path"="D:\\Games\\msgolf\\Golf '98 Trial"\n"VersionType"="TrialVersion"\n"InstalledGroup"="1"\n"LangID"=dword:00000009
|
||||
ver0=0
|
||||
coord0=0
|
||||
flag0=2101474
|
||||
flagg0=1476395016
|
||||
flagh0=1044
|
||||
flagi0=1210187780
|
||||
flagj0=128
|
||||
flagk0=327680
|
||||
flagl0=4
|
||||
flagm0=0
|
||||
tflag0=0
|
||||
posx0=50
|
||||
posy0=50
|
||||
sizx0=880
|
||||
sizy0=660
|
||||
maxfps0=0
|
||||
initts0=0
|
||||
winver0=0
|
||||
maxres0=-1
|
||||
swapeffect0=0
|
||||
maxddinterface0=0
|
@ -1,5 +0,0 @@
|
||||
[window]
|
||||
posx=1182
|
||||
posy=638
|
||||
sizx=320
|
||||
sizy=200
|
@ -1042,4 +1042,11 @@ add: "Acquire admin caps" flag to self elevate DxWnd if configured as necessary
|
||||
add: added third mode to handle potentially offending messages, that is process them by the Window default process routine WinDefaultProc. Good for "Red Alert 2".
|
||||
add: "fix clipper area in shared DC", temporary solution to adapt the shared DC mode to the different situations (yet to finish).
|
||||
fix: fully integrated the patch for "Silver" game: returning backbuffer as a doublebuffer also when requested with DDSCAPS_VIDEOMEMORY caps.
|
||||
add: FunkyFr3sh addition to process WM_SYSCOMMAND SC_CLOSE and force program termination when requested by "Terminate on window close" option.
|
||||
add: FunkyFr3sh addition to process WM_SYSCOMMAND SC_CLOSE and force program termination when requested by "Terminate on window close" option.
|
||||
|
||||
v2.03.57
|
||||
fix: improved handling of clipping regions in shared dc mode
|
||||
add: added DWM status to log file
|
||||
add: flags for preliminary hook of DirectSound and Smack libraries
|
||||
fix: changed icon colors (yellow for red, doesn't suggest the idea of error or danger)
|
||||
add: menu commands for entry movement (top, bottom, up, down) or duplication
|
3
build/redist/vbruntimes.exe
Normal file
3
build/redist/vbruntimes.exe
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:b34beff662415ef318ea0bba7f0f01faf8a5593e3903e4645e290077cd74d6e3
|
||||
size 2765965
|
146
dll/ddraw.cpp
146
dll/ddraw.cpp
@ -44,10 +44,12 @@ ULONG WINAPI extReleaseD4(LPDIRECTDRAW);
|
||||
ULONG WINAPI extReleaseD7(LPDIRECTDRAW);
|
||||
/*** IDirectDraw methods ***/
|
||||
HRESULT WINAPI extCreateClipper(LPDIRECTDRAW, DWORD, LPDIRECTDRAWCLIPPER FAR* , IUnknown FAR*);
|
||||
HRESULT WINAPI extCreatePalette(LPDIRECTDRAW, DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE *, IUnknown *);
|
||||
HRESULT WINAPI extCreatePalette1(LPDIRECTDRAW, DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE *, IUnknown *);
|
||||
HRESULT WINAPI extCreatePalette2(LPDIRECTDRAW, DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE *, IUnknown *);
|
||||
HRESULT WINAPI extCreatePalette4(LPDIRECTDRAW, DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE *, IUnknown *);
|
||||
HRESULT WINAPI extCreatePalette7(LPDIRECTDRAW, DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE *, IUnknown *);
|
||||
HRESULT WINAPI extCreateSurface1(LPDIRECTDRAW, DDSURFACEDESC *, LPDIRECTDRAWSURFACE *, void *);
|
||||
HRESULT WINAPI extCreateSurface2(LPDIRECTDRAW, DDSURFACEDESC *, LPDIRECTDRAWSURFACE *, void *);
|
||||
HRESULT WINAPI extCreateSurface3(LPDIRECTDRAW, DDSURFACEDESC *, LPDIRECTDRAWSURFACE *, void *);
|
||||
HRESULT WINAPI extCreateSurface4(LPDIRECTDRAW, DDSURFACEDESC2 *, LPDIRECTDRAWSURFACE *, void *);
|
||||
HRESULT WINAPI extCreateSurface7(LPDIRECTDRAW, DDSURFACEDESC2 *, LPDIRECTDRAWSURFACE *, void *);
|
||||
HRESULT WINAPI extDuplicateSurface(LPDIRECTDRAW, LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE *);
|
||||
@ -56,7 +58,10 @@ HRESULT WINAPI extGetDisplayMode1(LPDIRECTDRAW, LPDDSURFACEDESC);
|
||||
HRESULT WINAPI extGetDisplayMode2(LPDIRECTDRAW, LPDDSURFACEDESC);
|
||||
HRESULT WINAPI extGetDisplayMode4(LPDIRECTDRAW, LPDDSURFACEDESC2);
|
||||
HRESULT WINAPI extGetDisplayMode7(LPDIRECTDRAW, LPDDSURFACEDESC2);
|
||||
HRESULT WINAPI extGetGDISurface(LPDIRECTDRAW, LPDIRECTDRAWSURFACE *);
|
||||
HRESULT WINAPI extGetGDISurface1(LPDIRECTDRAW, LPDIRECTDRAWSURFACE *);
|
||||
HRESULT WINAPI extGetGDISurface2(LPDIRECTDRAW, LPDIRECTDRAWSURFACE *);
|
||||
HRESULT WINAPI extGetGDISurface4(LPDIRECTDRAW, LPDIRECTDRAWSURFACE *);
|
||||
HRESULT WINAPI extGetGDISurface7(LPDIRECTDRAW, LPDIRECTDRAWSURFACE *);
|
||||
HRESULT WINAPI extEnumDisplayModes1(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK);
|
||||
HRESULT WINAPI extEnumDisplayModes4(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMMODESCALLBACK2);
|
||||
HRESULT WINAPI extInitialize(LPDIRECTDRAW, FAR GUID *);
|
||||
@ -163,7 +168,10 @@ ReleaseD_Type pReleaseD4 = NULL;
|
||||
ReleaseD_Type pReleaseD7 = NULL;
|
||||
Compact_Type pCompact;
|
||||
CreateClipper_Type pCreateClipper=NULL;
|
||||
CreatePalette_Type pCreatePalette;
|
||||
CreatePalette_Type pCreatePalette1;
|
||||
CreatePalette_Type pCreatePalette2;
|
||||
CreatePalette_Type pCreatePalette4;
|
||||
CreatePalette_Type pCreatePalette7;
|
||||
CreateSurface1_Type pCreateSurface1;
|
||||
CreateSurface1_Type pCreateSurface2;
|
||||
CreateSurface1_Type pCreateSurface3;
|
||||
@ -184,7 +192,10 @@ GetDisplayMode_Type pGetDisplayMode2;
|
||||
GetDisplayMode4_Type pGetDisplayMode4;
|
||||
GetDisplayMode4_Type pGetDisplayMode7;
|
||||
GetFourCCCodes_Type pGetFourCCCodes;
|
||||
GetGDISurface_Type pGetGDISurface;
|
||||
GetGDISurface_Type pGetGDISurface1;
|
||||
GetGDISurface_Type pGetGDISurface2;
|
||||
GetGDISurface_Type pGetGDISurface4;
|
||||
GetGDISurface_Type pGetGDISurface7;
|
||||
GetMonitorFrequency_Type pGetMonitorFrequency;
|
||||
GetScanLine_Type pGetScanLine;
|
||||
GetVerticalBlankStatus_Type pGetVerticalBlankStatus;
|
||||
@ -1028,8 +1039,6 @@ void HookDDSession(LPDIRECTDRAW *lplpdd, int dxversion)
|
||||
|
||||
// IDIrectDraw::CreateClipper
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 16), extCreateClipper, (void **)&pCreateClipper, "CreateClipper(D)");
|
||||
// IDIrectDraw::CreatePalette
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 20), extCreatePalette, (void **)&pCreatePalette, "CreatePalette(D)");
|
||||
// IDIrectDraw::QueryInterface
|
||||
// IDIrectDraw::CreateSurface
|
||||
// IDIrectDraw::Release
|
||||
@ -1038,22 +1047,26 @@ void HookDDSession(LPDIRECTDRAW *lplpdd, int dxversion)
|
||||
case 1:
|
||||
SetHook((void *)(**(DWORD **)lplpdd), extQueryInterfaceD1, (void **)&pQueryInterfaceD1, "QueryInterface(D1)");
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 8), extReleaseD1, (void **)&pReleaseD1, "Release(D1)");
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface1, (void **)&pCreateSurface1, "CreateSurface(S1)");
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 20), extCreatePalette1, (void **)&pCreatePalette1, "CreatePalette(D1)");
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface1, (void **)&pCreateSurface1, "CreateSurface(D1)");
|
||||
break;
|
||||
case 2:
|
||||
SetHook((void *)(**(DWORD **)lplpdd), extQueryInterfaceD2, (void **)&pQueryInterfaceD2, "QueryInterface(D2)");
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 8), extReleaseD2, (void **)&pReleaseD2, "Release(D2)");
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface2, (void **)&pCreateSurface2, "CreateSurface(S2)");
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 20), extCreatePalette2, (void **)&pCreatePalette2, "CreatePalette(D2)");
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface2, (void **)&pCreateSurface2, "CreateSurface(D2)");
|
||||
break;
|
||||
case 4:
|
||||
SetHook((void *)(**(DWORD **)lplpdd), extQueryInterfaceD4, (void **)&pQueryInterfaceD4, "QueryInterface(D4)");
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 8), extReleaseD4, (void **)&pReleaseD4, "Release(D4)");
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface4, (void **)&pCreateSurface4, "CreateSurface(S4)");
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 20), extCreatePalette4, (void **)&pCreatePalette4, "CreatePalette(D4)");
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface4, (void **)&pCreateSurface4, "CreateSurface(D4)");
|
||||
break;
|
||||
case 7:
|
||||
SetHook((void *)(**(DWORD **)lplpdd), extQueryInterfaceD7, (void **)&pQueryInterfaceD7, "QueryInterface(D7)");
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 8), extReleaseD7, (void **)&pReleaseD7, "Release(D7)");
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface7, (void **)&pCreateSurface7, "CreateSurface(S7)");
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 20), extCreatePalette7, (void **)&pCreatePalette7, "CreatePalette(D7)");
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface7, (void **)&pCreateSurface7, "CreateSurface(D7)");
|
||||
break;
|
||||
}
|
||||
// IDIrectDraw::DuplicateSurface
|
||||
@ -1079,30 +1092,32 @@ void HookDDSession(LPDIRECTDRAW *lplpdd, int dxversion)
|
||||
case 1:
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 44), extGetCaps1D, (void **)&pGetCaps1D, "GetCaps(D1)");
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode1, (void **)&pGetDisplayMode1, "GetDisplayMode(D1)");
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 56), extGetGDISurface1, (void **)&pGetGDISurface1, "GetGDISurface(D1)");
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevel1, (void **)&pSetCooperativeLevel1, "SetCooperativeLevel(D1)");
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 84), extSetDisplayMode1, (void **)&pSetDisplayMode1, "SetDisplayMode(D1)");
|
||||
break;
|
||||
case 2:
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 44), extGetCaps2D, (void **)&pGetCaps2D, "GetCaps(D2)");
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode2, (void **)&pGetDisplayMode2, "GetDisplayMode(D2)");
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 56), extGetGDISurface2, (void **)&pGetGDISurface2, "GetGDISurface(D2)");
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevel2, (void **)&pSetCooperativeLevel2, "SetCooperativeLevel(D2)");
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 84), extSetDisplayMode2, (void **)&pSetDisplayMode2, "SetDisplayMode(D2)");
|
||||
break;
|
||||
case 4:
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 44), extGetCaps4D, (void **)&pGetCaps4D, "GetCaps(D4)");
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode4, (void **)&pGetDisplayMode4, "GetDisplayMode(D4)");
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 56), extGetGDISurface4, (void **)&pGetGDISurface4, "GetGDISurface(D4)");
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevel4, (void **)&pSetCooperativeLevel4, "SetCooperativeLevel(D4)");
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 84), extSetDisplayMode4, (void **)&pSetDisplayMode4, "SetDisplayMode(D4)");
|
||||
break;
|
||||
case 7:
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 44), extGetCaps7D, (void **)&pGetCaps7D, "GetCaps(D7)");
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode7, (void **)&pGetDisplayMode7, "GetDisplayMode(D7)");
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 56), extGetGDISurface7, (void **)&pGetGDISurface7, "GetGDISurface(D7)");
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevel7, (void **)&pSetCooperativeLevel7, "SetCooperativeLevel(D7)");
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 84), extSetDisplayMode7, (void **)&pSetDisplayMode7, "SetDisplayMode(D7)");
|
||||
break;
|
||||
}
|
||||
// IDIrectDraw::GetGDISurface
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 56), extGetGDISurface, (void **)&pGetGDISurface, "GetGDISurface(D)");
|
||||
// IDIrectDraw::Initialize
|
||||
SetHook((void *)(**(DWORD **)lplpdd + 72), extInitialize, (void **)&pInitialize, "Initialize(D)");
|
||||
// IDIrectDraw::WaitForVerticalBlank
|
||||
@ -2277,6 +2292,14 @@ static void BuildRealSurfaces(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurfa
|
||||
OutTraceDW("CreateSurface: %s\n", LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[EmuPrim]", __LINE__));
|
||||
res=(*pCreateSurface)(lpdd, &ddsd, &lpDDSEmu_Prim, 0);
|
||||
if(res==DDERR_PRIMARYSURFACEALREADYEXISTS){
|
||||
GetGDISurface_Type pGetGDISurface;
|
||||
switch(dxversion){
|
||||
default:
|
||||
case 1: pGetGDISurface = pGetGDISurface1; break;
|
||||
case 2: pGetGDISurface = pGetGDISurface2; break;
|
||||
case 4: pGetGDISurface = pGetGDISurface4; break;
|
||||
case 7: pGetGDISurface = pGetGDISurface7; break;
|
||||
}
|
||||
OutTraceDW("CreateSurface: ASSERT DDSEmu_Prim already exists\n");
|
||||
if(dxw.Windowize){
|
||||
// in Windowize mode, the desktop properties are untouched, then the current primary surface can be recycled
|
||||
@ -2380,6 +2403,14 @@ static HRESULT BuildPrimaryEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurf
|
||||
if((ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) &&
|
||||
(dxw.dwFlags6 & SYNCPALETTE)){
|
||||
if(lpDDP == NULL){
|
||||
CreatePalette_Type pCreatePalette;
|
||||
switch(dxversion){
|
||||
default:
|
||||
case 1: pCreatePalette = pCreatePalette1; break;
|
||||
case 2: pCreatePalette = pCreatePalette2; break;
|
||||
case 4: pCreatePalette = pCreatePalette4; break;
|
||||
case 7: pCreatePalette = pCreatePalette7; break;
|
||||
}
|
||||
res=(*pCreatePalette)(lpdd, DDPCAPS_8BIT|DDPCAPS_ALLOW256, DefaultSystemPalette, &lpDDP, NULL);
|
||||
if(res) OutTrace("CreateSurface: CreatePalette ERROR err=%x at %d\n", res, __LINE__);
|
||||
}
|
||||
@ -2460,6 +2491,14 @@ static HRESULT BuildPrimaryFlippable(LPDIRECTDRAW lpdd, CreateSurface_Type pCrea
|
||||
if((ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) &&
|
||||
(dxw.dwFlags6 & SYNCPALETTE)){
|
||||
if(lpDDP == NULL){
|
||||
CreatePalette_Type pCreatePalette;
|
||||
switch(dxversion){
|
||||
default:
|
||||
case 1: pCreatePalette = pCreatePalette1; break;
|
||||
case 2: pCreatePalette = pCreatePalette2; break;
|
||||
case 4: pCreatePalette = pCreatePalette4; break;
|
||||
case 7: pCreatePalette = pCreatePalette7; break;
|
||||
}
|
||||
res=(*pCreatePalette)(lpdd, DDPCAPS_8BIT|DDPCAPS_ALLOW256, DefaultSystemPalette, &lpDDP, NULL);
|
||||
if(res) OutTrace("CreateSurface: CreatePalette ERROR err=%x at %d\n", res, __LINE__);
|
||||
}
|
||||
@ -2505,6 +2544,14 @@ static HRESULT BuildPrimaryDir(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurf
|
||||
if(res){
|
||||
if (res==DDERR_PRIMARYSURFACEALREADYEXISTS){
|
||||
LPDIRECTDRAWSURFACE lpPrim;
|
||||
GetGDISurface_Type pGetGDISurface;
|
||||
switch(dxversion){
|
||||
default:
|
||||
case 1: pGetGDISurface = pGetGDISurface1; break;
|
||||
case 2: pGetGDISurface = pGetGDISurface2; break;
|
||||
case 4: pGetGDISurface = pGetGDISurface4; break;
|
||||
case 7: pGetGDISurface = pGetGDISurface7; break;
|
||||
}
|
||||
OutTraceE("CreateSurface: CreateSurface DDERR_PRIMARYSURFACEALREADYEXISTS workaround\n");
|
||||
(*pGetGDISurface)(lpPrimaryDD, &lpPrim);
|
||||
while ((*pReleaseS)(lpPrim));
|
||||
@ -2584,6 +2631,14 @@ static HRESULT BuildBackBufferEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateS
|
||||
if((ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) &&
|
||||
(dxw.dwFlags6 & SYNCPALETTE)){
|
||||
if(lpDDP == NULL){
|
||||
CreatePalette_Type pCreatePalette;
|
||||
switch(dxversion){
|
||||
default:
|
||||
case 1: pCreatePalette = pCreatePalette1; break;
|
||||
case 2: pCreatePalette = pCreatePalette2; break;
|
||||
case 4: pCreatePalette = pCreatePalette4; break;
|
||||
case 7: pCreatePalette = pCreatePalette7; break;
|
||||
}
|
||||
res=(*pCreatePalette)(lpdd, DDPCAPS_8BIT|DDPCAPS_ALLOW256, DefaultSystemPalette, &lpDDP, NULL);
|
||||
if(res) OutTrace("CreateSurface: CreatePalette ERROR err=%x at %d\n", res, __LINE__);
|
||||
}
|
||||
@ -2643,6 +2698,14 @@ static HRESULT BuildBackBufferFlippable(LPDIRECTDRAW lpdd, CreateSurface_Type pC
|
||||
if((ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) &&
|
||||
(dxw.dwFlags6 & SYNCPALETTE)){
|
||||
if(lpDDP == NULL){
|
||||
CreatePalette_Type pCreatePalette;
|
||||
switch(dxversion){
|
||||
default:
|
||||
case 1: pCreatePalette = pCreatePalette1; break;
|
||||
case 2: pCreatePalette = pCreatePalette2; break;
|
||||
case 4: pCreatePalette = pCreatePalette4; break;
|
||||
case 7: pCreatePalette = pCreatePalette7; break;
|
||||
}
|
||||
res=(*pCreatePalette)(lpdd, DDPCAPS_8BIT|DDPCAPS_ALLOW256, DefaultSystemPalette, &lpDDP, NULL);
|
||||
if(res) OutTrace("CreateSurface: CreatePalette ERROR err=%x at %d\n", res, __LINE__);
|
||||
}
|
||||
@ -2726,6 +2789,14 @@ static HRESULT BuildBackBufferDir(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateS
|
||||
if (dxw.dwFlags2 & BACKBUFATTACH) {
|
||||
LPDIRECTDRAWSURFACE lpPrim;
|
||||
DDSURFACEDESC2 prim;
|
||||
GetGDISurface_Type pGetGDISurface;
|
||||
switch(dxversion){
|
||||
default:
|
||||
case 1: pGetGDISurface = pGetGDISurface1; break;
|
||||
case 2: pGetGDISurface = pGetGDISurface2; break;
|
||||
case 4: pGetGDISurface = pGetGDISurface4; break;
|
||||
case 7: pGetGDISurface = pGetGDISurface7; break;
|
||||
}
|
||||
(*pGetGDISurface)(lpPrimaryDD, &lpPrim);
|
||||
memset(&prim, 0, sizeof(DDSURFACEDESC2));
|
||||
prim.dwSize = (dxversion >= 4) ? sizeof(DDSURFACEDESC2) : sizeof(DDSURFACEDESC);
|
||||
@ -3088,9 +3159,6 @@ HRESULT WINAPI extCreateSurface1(LPDIRECTDRAW lpdd, DDSURFACEDESC *lpddsd, LPDIR
|
||||
HRESULT WINAPI extCreateSurface2(LPDIRECTDRAW lpdd, DDSURFACEDESC *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu)
|
||||
{ return extCreateSurface(2, (CreateSurface_Type)pCreateSurface2, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); }
|
||||
|
||||
HRESULT WINAPI extCreateSurface3(LPDIRECTDRAW lpdd, DDSURFACEDESC *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu)
|
||||
{ return extCreateSurface(3, (CreateSurface_Type)pCreateSurface3, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); }
|
||||
|
||||
HRESULT WINAPI extCreateSurface4(LPDIRECTDRAW lpdd, DDSURFACEDESC2 *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu)
|
||||
{ return extCreateSurface(4, (CreateSurface_Type)pCreateSurface4, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); }
|
||||
|
||||
@ -3789,12 +3857,12 @@ HRESULT WINAPI extWaitForVerticalBlank(LPDIRECTDRAW lpdd, DWORD dwflags, HANDLE
|
||||
|
||||
#define DDPCAPS_INITIALIZE_LEGACY 0x00000008l
|
||||
|
||||
HRESULT WINAPI extCreatePalette(LPDIRECTDRAW lpdd, DWORD dwflags, LPPALETTEENTRY lpddpa,
|
||||
LPDIRECTDRAWPALETTE *lplpddp, IUnknown *pu)
|
||||
HRESULT WINAPI extCreatePalette(int version, CreatePalette_Type pCreatePalette,
|
||||
LPDIRECTDRAW lpdd, DWORD dwflags, LPPALETTEENTRY lpddpa, LPDIRECTDRAWPALETTE *lplpddp, IUnknown *pu)
|
||||
{
|
||||
HRESULT res;
|
||||
|
||||
OutTraceDDRAW("CreatePalette: dwFlags=%x(%s)\n", dwflags, ExplainCreatePaletteFlags(dwflags));
|
||||
OutTraceDDRAW("CreatePalette: lpdd=%x dwFlags=%x(%s)\n", lpdd, dwflags, ExplainCreatePaletteFlags(dwflags));
|
||||
if(IsDebug && (dwflags & DDPCAPS_8BIT)) dxw.DumpPalette(256, lpddpa);
|
||||
|
||||
if(dxw.dwFlags1 & EMULATESURFACE) dwflags &= ~DDPCAPS_PRIMARYSURFACE;
|
||||
@ -3806,9 +3874,21 @@ HRESULT WINAPI extCreatePalette(LPDIRECTDRAW lpdd, DWORD dwflags, LPPALETTEENTRY
|
||||
|
||||
OutTraceDDRAW("CreatePalette: OK lpddp=%x\n", *lplpddp);
|
||||
HookDDPalette(lplpddp);
|
||||
return 0;
|
||||
return DD_OK;
|
||||
}
|
||||
|
||||
HRESULT WINAPI extCreatePalette1(LPDIRECTDRAW lpdd, DWORD dwflags, LPPALETTEENTRY lpddpa, LPDIRECTDRAWPALETTE *lplpddp, IUnknown *pu)
|
||||
{ return extCreatePalette(1, (CreatePalette_Type)pCreatePalette1, lpdd, dwflags, lpddpa, lplpddp, pu); }
|
||||
|
||||
HRESULT WINAPI extCreatePalette2(LPDIRECTDRAW lpdd, DWORD dwflags, LPPALETTEENTRY lpddpa, LPDIRECTDRAWPALETTE *lplpddp, IUnknown *pu)
|
||||
{ return extCreatePalette(2, (CreatePalette_Type)pCreatePalette2, lpdd, dwflags, lpddpa, lplpddp, pu); }
|
||||
|
||||
HRESULT WINAPI extCreatePalette4(LPDIRECTDRAW lpdd, DWORD dwflags, LPPALETTEENTRY lpddpa, LPDIRECTDRAWPALETTE *lplpddp, IUnknown *pu)
|
||||
{ return extCreatePalette(4, (CreatePalette_Type)pCreatePalette4, lpdd, dwflags, lpddpa, lplpddp, pu); }
|
||||
|
||||
HRESULT WINAPI extCreatePalette7(LPDIRECTDRAW lpdd, DWORD dwflags, LPPALETTEENTRY lpddpa, LPDIRECTDRAWPALETTE *lplpddp, IUnknown *pu)
|
||||
{ return extCreatePalette(7, (CreatePalette_Type)pCreatePalette7, lpdd, dwflags, lpddpa, lplpddp, pu); }
|
||||
|
||||
HRESULT WINAPI extGetPalette(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE *lplpddp)
|
||||
{
|
||||
HRESULT res;
|
||||
@ -4019,7 +4099,7 @@ HRESULT WINAPI extLockDir(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACED
|
||||
// V2.02.43: Empire Earth does some test Lock operations apparently before the primary surface is created
|
||||
if(lpPrimaryDD){
|
||||
lpDDSPrim=0;
|
||||
res2=(*pGetGDISurface)(lpPrimaryDD, &lpDDSPrim);
|
||||
res2=(*pGetGDISurface1)(lpPrimaryDD, &lpDDSPrim);
|
||||
if(res2)
|
||||
OutTraceE("Lock: GetGDISurface ERROR res=%x(%s) at %d\n", res2, ExplainDDError(res2), __LINE__);
|
||||
else
|
||||
@ -4185,6 +4265,7 @@ HRESULT WINAPI extUnlockDir(int dxversion, Unlock4_Type pUnlock, LPDIRECTDRAWSUR
|
||||
//RECT screen, rect;
|
||||
BOOL IsPrim;
|
||||
LPDIRECTDRAWSURFACE lpDDSPrim;
|
||||
GetGDISurface_Type pGetGDISurface;
|
||||
|
||||
IsPrim=dxwss.IsAPrimarySurface(lpdds);
|
||||
|
||||
@ -4202,6 +4283,13 @@ HRESULT WINAPI extUnlockDir(int dxversion, Unlock4_Type pUnlock, LPDIRECTDRAWSUR
|
||||
}
|
||||
|
||||
if(dxw.dwFlags1 & LOCKEDSURFACE){
|
||||
switch(dxversion){
|
||||
default:
|
||||
case 1: pGetGDISurface = pGetGDISurface1; break;
|
||||
case 2: pGetGDISurface = pGetGDISurface2; break;
|
||||
case 4: pGetGDISurface = pGetGDISurface4; break;
|
||||
case 7: pGetGDISurface = pGetGDISurface7; break;
|
||||
}
|
||||
(*pGetGDISurface)(lpPrimaryDD, &lpDDSPrim);
|
||||
if(lpdds==lpDDSPrim && lpDDSBuffer){
|
||||
RECT client;
|
||||
@ -4268,7 +4356,7 @@ HRESULT WINAPI extGetDC(LPDIRECTDRAWSURFACE lpdds, HDC FAR *pHDC)
|
||||
if(lpDDP==NULL){
|
||||
// should link here to the GDI palette? See Hyperblade....
|
||||
dxw.palNumEntries=256;
|
||||
res=(*pCreatePalette)(lpPrimaryDD, DDPCAPS_ALLOW256|DDPCAPS_8BIT|DDPCAPS_INITIALIZE, dxw.palPalEntry, &lpDDP, NULL);
|
||||
res=(*pCreatePalette1)(lpPrimaryDD, DDPCAPS_ALLOW256|DDPCAPS_8BIT|DDPCAPS_INITIALIZE, dxw.palPalEntry, &lpDDP, NULL);
|
||||
if (res) {
|
||||
OutTraceE("GetDC: CreatePalette ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||
return res;
|
||||
@ -4318,7 +4406,7 @@ HRESULT WINAPI extFlipToGDISurface(LPDIRECTDRAW lpdd)
|
||||
return DD_OK;
|
||||
}
|
||||
|
||||
HRESULT WINAPI extGetGDISurface(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w)
|
||||
HRESULT WINAPI extGetGDISurface(GetGDISurface_Type pGetGDISurface, LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w)
|
||||
{
|
||||
int res;
|
||||
|
||||
@ -4341,6 +4429,18 @@ HRESULT WINAPI extGetGDISurface(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w)
|
||||
return res;
|
||||
}
|
||||
|
||||
HRESULT WINAPI extGetGDISurface1(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w)
|
||||
{ return extGetGDISurface(pGetGDISurface1, lpdd, w); }
|
||||
|
||||
HRESULT WINAPI extGetGDISurface2(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w)
|
||||
{ return extGetGDISurface(pGetGDISurface2, lpdd, w); }
|
||||
|
||||
HRESULT WINAPI extGetGDISurface4(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w)
|
||||
{ return extGetGDISurface(pGetGDISurface4, lpdd, w); }
|
||||
|
||||
HRESULT WINAPI extGetGDISurface7(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w)
|
||||
{ return extGetGDISurface(pGetGDISurface7, lpdd, w); }
|
||||
|
||||
// debug function to dump all video modes queried by the DirectDrav::EnumDisplayModes method
|
||||
|
||||
HRESULT WINAPI EnumModesCallbackDumper(LPDDSURFACEDESC lpDDSurfaceDesc, LPVOID lpContext)
|
||||
|
@ -24,7 +24,6 @@
|
||||
#include "MinHook.h"
|
||||
|
||||
#define SKIPIMEWINDOW TRUE
|
||||
#define HOOKDIRECTSOUND TRUE
|
||||
|
||||
dxwCore dxw;
|
||||
dxwSStack dxwss;
|
||||
@ -903,8 +902,8 @@ void HookModule(HMODULE base, int dxversion)
|
||||
(dxw.dwTFlags & OUTREGISTRY)) HookAdvApi32(base);
|
||||
HookMSV4WLibs(base); // -- used by Aliens & Amazons demo: what for?
|
||||
HookAVIFil32(base);
|
||||
//HookSmackW32(base);
|
||||
if (HOOKDIRECTSOUND) HookDirectSound(base);
|
||||
if(dxw.dwFlags7 & HOOKSMACKW32) HookSmackW32(base);
|
||||
if(dxw.dwFlags7 & HOOKDIRECTSOUND) HookDirectSound(base);
|
||||
//HookComDlg32(base);
|
||||
}
|
||||
|
||||
@ -1292,6 +1291,21 @@ void HookInit(TARGETMAP *target, HWND hwnd)
|
||||
dxw.hParentWnd, ClassName, WinText, dwStyle, ExplainStyle(dwStyle), dwExStyle, ExplainExStyle(dwExStyle));
|
||||
OutTrace("HookInit: target window pos=(%d,%d) size=(%d,%d)\n", dxw.iPosX, dxw.iPosY, dxw.iSizX, dxw.iSizY);
|
||||
dxw.DumpDesktopStatus();
|
||||
typedef HRESULT (WINAPI *DwmIsCompositionEnabled_Type)(BOOL *);
|
||||
DwmIsCompositionEnabled_Type pDwmIsCompositionEnabled = NULL;
|
||||
HMODULE DwnApiHdl;
|
||||
DwnApiHdl = LoadLibrary("Dwmapi.dll");
|
||||
if (DwnApiHdl) pDwmIsCompositionEnabled = (DwmIsCompositionEnabled_Type)GetProcAddress(DwnApiHdl, "DwmIsCompositionEnabled");
|
||||
char *sRes;
|
||||
if(pDwmIsCompositionEnabled){
|
||||
HRESULT res;
|
||||
BOOL val;
|
||||
res = (*pDwmIsCompositionEnabled)(&val);
|
||||
if(res==S_OK) sRes = val ? "ENABLED" : "DISABLED";
|
||||
else sRes = "ERROR";
|
||||
}
|
||||
else sRes = "Unknown";
|
||||
OutTrace("HookInit: DWMComposition %s\n", sRes);
|
||||
}
|
||||
|
||||
if (SKIPIMEWINDOW) {
|
||||
|
@ -27,7 +27,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include "TlHelp32.h"
|
||||
|
||||
#define VERSION "2.03.56"
|
||||
#define VERSION "2.03.57"
|
||||
|
||||
#define DDTHREADLOCK 1
|
||||
//#define LOCKTHREADS
|
||||
|
Binary file not shown.
@ -904,7 +904,6 @@ BOOL WINAPI extCreateProcessA(
|
||||
if(dxw.dwFlags5 & INJECTSON) {
|
||||
DEBUG_EVENT debug_event ={0};
|
||||
char path[MAX_PATH];
|
||||
extern char *GetFileNameFromHandle(HANDLE);
|
||||
DWORD dwContinueStatus = DBG_CONTINUE;
|
||||
extern BOOL Inject(DWORD, const char *);
|
||||
LPVOID LastExceptionPtr = 0;
|
||||
|
@ -330,7 +330,7 @@ void dxwSDC::copyDcAttributes(HDC destDC, HDC origDc, POINT origin)
|
||||
SetTextCharacterExtra(destDC, GetTextCharacterExtra(origDc));
|
||||
SetTextColor(destDC, GetTextColor(origDc));
|
||||
|
||||
OutTrace("copyDcAttributes: orig=(%d,%d)\n", origin.x, origin.y);
|
||||
OutTraceB("copyDcAttributes: orig=(%d,%d)\n", origin.x, origin.y);
|
||||
if(!(*pSetWindowOrgEx)(destDC, -origin.x, -origin.y, NULL))
|
||||
OutTraceE("copyDcAttributes: SetWindowOrgEx ERROR orig=(%d,%d) err=%d\n", origin.x, origin.y, GetLastError());
|
||||
|
||||
@ -355,35 +355,36 @@ typedef struct
|
||||
static BOOL CALLBACK excludeClipRectsForOverlappingWindows(HWND hwnd, LPARAM lParam)
|
||||
{
|
||||
ExcludeClipRectsData_Type *excludeClipRectsData = (ExcludeClipRectsData_Type *)lParam;
|
||||
if (hwnd == dxw.GethWnd()) return FALSE; // stop
|
||||
if (!IsWindowVisible(hwnd)) return TRUE; // go ahead
|
||||
if (hwnd == excludeClipRectsData->rootWnd) return FALSE; // stop
|
||||
if(dxw.IsDesktop(hwnd)) return FALSE;
|
||||
|
||||
RECT rect = {};
|
||||
(*pGetWindowRect)(hwnd, &rect);
|
||||
(*pGetClientRect)(hwnd, &rect);
|
||||
OffsetRect(&rect, -excludeClipRectsData->origin.x, -excludeClipRectsData->origin.y);
|
||||
ExcludeClipRect(excludeClipRectsData->compatDc, rect.left, rect.top, rect.right, rect.bottom);
|
||||
OutTrace("dxwSDC::excludeClipRects: hwnd=%x rect=(%d,%d)-(%d,%d)\n", hwnd, rect.left, rect.top, rect.right, rect.bottom);
|
||||
OutTraceB("dxwSDC::excludeClipRects: hwnd=%x rect=(%d,%d)-(%d,%d)\n", hwnd, rect.left, rect.top, rect.right, rect.bottom);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void dxwSDC::setClippingRegion(HDC compatDc, HDC origDc, POINT& origin)
|
||||
{
|
||||
OutTrace("dxwSDC::setClippingRegion: compdc=%x origdc=%x origin=(%d,%d)\n", compatDc, origDc, origin.x, origin.y);
|
||||
OutTraceB("dxwSDC::setClippingRegion: compdc=%x origdc=%x origin=(%d,%d)\n", compatDc, origDc, origin.x, origin.y);
|
||||
HRGN clipRgn = CreateRectRgn(0, 0, 0, 0);
|
||||
const bool isEmptyClipRgn = (1 != GetRandomRgn(origDc, clipRgn, SYSRGN));
|
||||
OutTrace("dxwSDC::setClippingRegion: isEmptyClipRgn=%x\n", isEmptyClipRgn);
|
||||
OutTraceB("dxwSDC::setClippingRegion: isEmptyClipRgn=%x\n", isEmptyClipRgn);
|
||||
// scale clip region
|
||||
POINT upleft={0, 0};
|
||||
//(*pClientToScreen)(dxw.GethWnd(), &upleft);
|
||||
(*pClientToScreen)(CurrenthWnd, &upleft);
|
||||
if(IsDebug){
|
||||
OutTrace("dxwSDC::setClippingRegion: upleft=(%d,%d)\n", upleft.x, upleft.y);
|
||||
OutTraceB("dxwSDC::setClippingRegion: upleft=(%d,%d)\n", upleft.x, upleft.y);
|
||||
}
|
||||
OffsetRgn(clipRgn, -upleft.x, -upleft.y);
|
||||
if(IsDebug){
|
||||
RECT RgnBox;
|
||||
GetRgnBox(clipRgn, &RgnBox);
|
||||
OutTrace("dxwSDC::setClippingRegion: RgnBox=(%d,%d)-(%d,%d) size=(%dx%d)\n",
|
||||
OutTraceB("dxwSDC::setClippingRegion: RgnBox=(%d,%d)-(%d,%d) size=(%dx%d)\n",
|
||||
RgnBox.left, RgnBox.top, RgnBox.right, RgnBox.bottom, RgnBox.right-RgnBox.left, RgnBox.bottom-RgnBox.top);
|
||||
}
|
||||
// end of scaling
|
||||
@ -393,13 +394,13 @@ void dxwSDC::setClippingRegion(HDC compatDc, HDC origDc, POINT& origin)
|
||||
HRGN origClipRgn = (*pCreateRectRgn)(0, 0, 0, 0);
|
||||
if (1 == GetClipRgn(origDc, origClipRgn))
|
||||
{
|
||||
OutTrace("dxwSDC::setClippingRegion: GetClipRgn==1\n");
|
||||
OutTraceB("dxwSDC::setClippingRegion: GetClipRgn==1\n");
|
||||
OffsetRgn(origClipRgn, origin.x, origin.y);
|
||||
ExtSelectClipRgn(compatDc, origClipRgn, RGN_AND);
|
||||
if(IsDebug){
|
||||
RECT RgnBox;
|
||||
GetRgnBox(origClipRgn, &RgnBox); // for logging only
|
||||
OutTrace("dxwSDC::setClippingRegion: OrigRgnBox=(%d,%d)-(%d,%d)\n", RgnBox.left, RgnBox.top, RgnBox.right, RgnBox.bottom);
|
||||
OutTraceB("dxwSDC::setClippingRegion: OrigRgnBox=(%d,%d)-(%d,%d)\n", RgnBox.left, RgnBox.top, RgnBox.right, RgnBox.bottom);
|
||||
}
|
||||
}
|
||||
DeleteObject(origClipRgn);
|
||||
@ -408,10 +409,13 @@ void dxwSDC::setClippingRegion(HDC compatDc, HDC origDc, POINT& origin)
|
||||
// to finish .....
|
||||
// on Win10 this part seems unnecessary and giving troubles .....
|
||||
if (!isEmptyClipRgn){
|
||||
OutTraceB("dxwSDC::setClippingRegion: isEmptyClipRgn FALSE\n");
|
||||
HWND hwnd = WindowFromDC(origDc);
|
||||
if (hwnd)
|
||||
{
|
||||
ExcludeClipRectsData_Type excludeClipRectsData = { compatDc, origin, GetAncestor(hwnd, GA_ROOT) };
|
||||
if (hwnd && (!dxw.IsDesktop(hwnd))){
|
||||
ExcludeClipRectsData_Type excludeClipRectsData = { compatDc, origin, dxw.GethWnd() };
|
||||
//ExcludeClipRectsData_Type excludeClipRectsData = { compatDc, origin, GetAncestor(hwnd, GA_ROOT) };
|
||||
OutTraceB("dxwSDC::setClippingRegion: compatdc=%x origin=(%d,%d) ancestor=%x\n",
|
||||
compatDc, origin.x, origin.y, dxw.GethWnd());
|
||||
EnumWindows(&excludeClipRectsForOverlappingWindows,(LPARAM)(&excludeClipRectsData));
|
||||
}
|
||||
}
|
||||
|
@ -23,7 +23,7 @@ SmackOpen_Type pSmackOpen = NULL;
|
||||
SmackStruct * WINAPI extSmackOpen(HANDLE, UINT32, INT32);
|
||||
|
||||
static HookEntryEx_Type Hooks[]={
|
||||
{HOOK_IAT_CANDIDATE, 0, "_SmackOpen@12", (FARPROC)NULL, (FARPROC *)&pSmackOpen, (FARPROC)extSmackOpen},
|
||||
{HOOK_IAT_CANDIDATE, 0x000E, "_SmackOpen@12", (FARPROC)NULL, (FARPROC *)&pSmackOpen, (FARPROC)extSmackOpen},
|
||||
{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator
|
||||
};
|
||||
|
||||
@ -67,4 +67,16 @@ SmackStruct * WINAPI extSmackOpen(HANDLE SmackFile, UINT32 flags, INT32 unknown)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------
|
||||
Used by M2 Tank Platoon II:
|
||||
Ordinal 0x0015 name _SmackNextFrame@4
|
||||
Ordinal 0x000E name _SmackOpen@12
|
||||
Ordinal 0x0026 name _SmackSoundUseDirectSound@4
|
||||
Ordinal 0x0012 name _SmackClose@4
|
||||
Ordinal 0x0013 name _SmackDoFrame@4
|
||||
Ordinal 0x0017 name _SmackToBuffer@28
|
||||
Ordinal 0x0020 name _SmackWait@4
|
||||
/* ------------------------------------------------------------ */
|
||||
|
||||
|
||||
|
||||
|
@ -207,7 +207,7 @@ static HookEntryEx_Type SyscallHooks[]={
|
||||
{HOOK_HOT_CANDIDATE, 0, "FillRect", (FARPROC)NULL, (FARPROC *)&pFillRect, (FARPROC)extFillRect},
|
||||
{HOOK_HOT_CANDIDATE, 0, "InvertRect", (FARPROC)NULL, (FARPROC *)&pInvertRect, (FARPROC)extInvertRect},
|
||||
{HOOK_HOT_CANDIDATE, 0, "DrawIcon", (FARPROC)NULL, (FARPROC *)&pDrawIcon, (FARPROC)extDrawIcon},
|
||||
{HOOK_HOT_CANDIDATE, 0, "DrawIconEx", (FARPROC)NULL, (FARPROC *)&pDrawIconEx, (FARPROC)extDrawIconEx},
|
||||
{HOOK_IAT_CANDIDATE, 0, "DrawIconEx", (FARPROC)NULL, (FARPROC *)&pDrawIconEx, (FARPROC)extDrawIconEx},
|
||||
{HOOK_HOT_CANDIDATE, 0, "DrawCaption", (FARPROC)NULL, (FARPROC *)&pDrawCaption, (FARPROC)extDrawCaption},
|
||||
//TODO {HOOK_HOT_CANDIDATE, 0, "DrawEdge", (FARPROC)NULL, (FARPROC *)&pDrawEdge, (FARPROC)extDrawEdge},
|
||||
//TODO {HOOK_HOT_CANDIDATE, 0, "DrawFocusRect", (FARPROC)NULL, (FARPROC *)&pDrawFocusRect, (FARPROC)extDrawFocusRect},
|
||||
@ -3559,7 +3559,7 @@ BOOL WINAPI extDrawIcon(HDC hdc, int X, int Y, HICON hIcon)
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
// not working in HOT PATCH mode
|
||||
BOOL WINAPI extDrawIconEx( HDC hdc, int xLeft, int yTop, HICON hIcon, int cxWidth, int cyWidth, UINT istepIfAniCur, HBRUSH hbrFlickerFreeDraw, UINT diFlags)
|
||||
{
|
||||
BOOL ret;
|
||||
|
@ -45,6 +45,8 @@ void CTabCompat::DoDataExchange(CDataExchange* pDX)
|
||||
DDX_Check(pDX, IDC_DISABLEDISABLEALTTAB, cTarget->m_DisableDisableAltTab);
|
||||
DDX_Check(pDX, IDC_NOIMAGEHLP, cTarget->m_NoImagehlp);
|
||||
DDX_Check(pDX, IDC_REPLACEPRIVOPS, cTarget->m_ReplacePrivOps);
|
||||
DDX_Check(pDX, IDC_HOOKDIRECTSOUND, cTarget->m_HookDirectSound);
|
||||
DDX_Check(pDX, IDC_HOOKSMACKW32, cTarget->m_HookSmackW32);
|
||||
|
||||
// Registry management
|
||||
DDX_Check(pDX, IDC_EMULATEREGISTRY, cTarget->m_EmulateRegistry);
|
||||
|
@ -58,6 +58,8 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
|
||||
m_SetCompatibility = TRUE; // default true !!
|
||||
m_AEROBoost = TRUE; // default true !!
|
||||
m_DiabloTweak = FALSE;
|
||||
m_HookDirectSound = FALSE;
|
||||
m_HookSmackW32 = FALSE;
|
||||
m_EASportsHack = FALSE;
|
||||
m_LegacyAlloc = FALSE;
|
||||
m_DisableMaxWinMode = FALSE;
|
||||
|
@ -198,6 +198,8 @@ public:
|
||||
BOOL m_SetCompatibility;
|
||||
BOOL m_AEROBoost;
|
||||
BOOL m_DiabloTweak;
|
||||
BOOL m_HookDirectSound;
|
||||
BOOL m_HookSmackW32;
|
||||
BOOL m_EASportsHack;
|
||||
BOOL m_LegacyAlloc;
|
||||
BOOL m_DisableMaxWinMode;
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -117,6 +117,7 @@ BEGIN_MESSAGE_MAP(CDxwndhostView, CListView)
|
||||
ON_COMMAND(ID_TASKBAR_SHOW, OnTaskbarShow)
|
||||
ON_COMMAND(ID_MODIFY, OnModify)
|
||||
ON_COMMAND(ID_ADD, OnAdd)
|
||||
ON_COMMAND(ID_PDUPLICATE, OnDuplicate)
|
||||
ON_COMMAND(ID_PEXPORT, OnExport)
|
||||
ON_COMMAND(ID_PKILL, OnProcessKill)
|
||||
ON_COMMAND(ID_FILE_IMPORT, OnImport)
|
||||
@ -139,6 +140,10 @@ BEGIN_MESSAGE_MAP(CDxwndhostView, CListView)
|
||||
ON_COMMAND(ID_DESKTOPCOLORDEPTH_16BPP, OnDesktopcolordepth16bpp)
|
||||
ON_COMMAND(ID_DESKTOPCOLORDEPTH_24BPP, OnDesktopcolordepth24bpp)
|
||||
ON_COMMAND(ID_DESKTOPCOLORDEPTH_32BPP, OnDesktopcolordepth32bpp)
|
||||
ON_COMMAND(ID_MOVE_TOP, OnMoveTop)
|
||||
ON_COMMAND(ID_MOVE_UP, OnMoveUp)
|
||||
ON_COMMAND(ID_MOVE_DOWN, OnMoveDown)
|
||||
ON_COMMAND(ID_MOVE_BOTTOM, OnMoveBottom)
|
||||
//}}AFX_MSG_MAP
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
@ -307,6 +312,8 @@ void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg)
|
||||
if(dlg->m_SetCompatibility) t->flags2 |= SETCOMPATIBILITY;
|
||||
if(dlg->m_AEROBoost) t->flags5 |= AEROBOOST;
|
||||
if(dlg->m_DiabloTweak) t->flags5 |= DIABLOTWEAK;
|
||||
if(dlg->m_HookDirectSound) t->flags7 |= HOOKDIRECTSOUND;
|
||||
if(dlg->m_HookSmackW32) t->flags7 |= HOOKSMACKW32;
|
||||
if(dlg->m_EASportsHack) t->flags5 |= EASPORTSHACK;
|
||||
if(dlg->m_LegacyAlloc) t->flags6 |= LEGACYALLOC;
|
||||
if(dlg->m_DisableMaxWinMode) t->flags6 |= DISABLEMAXWINMODE;
|
||||
@ -539,6 +546,8 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg)
|
||||
dlg->m_SetCompatibility = t->flags2 & SETCOMPATIBILITY ? 1 : 0;
|
||||
dlg->m_AEROBoost = t->flags5 & AEROBOOST ? 1 : 0;
|
||||
dlg->m_DiabloTweak = t->flags5 & DIABLOTWEAK ? 1 : 0;
|
||||
dlg->m_HookDirectSound = t->flags7 & HOOKDIRECTSOUND ? 1 : 0;
|
||||
dlg->m_HookSmackW32 = t->flags7 & HOOKSMACKW32 ? 1 : 0;
|
||||
dlg->m_EASportsHack = t->flags5 & EASPORTSHACK ? 1 : 0;
|
||||
dlg->m_LegacyAlloc = t->flags6 & LEGACYALLOC ? 1 : 0;
|
||||
dlg->m_DisableMaxWinMode = t->flags6 & DISABLEMAXWINMODE ? 1 : 0;
|
||||
@ -1676,6 +1685,179 @@ void CDxwndhostView::OnAdd()
|
||||
}
|
||||
}
|
||||
|
||||
void CDxwndhostView::OnDuplicate()
|
||||
{
|
||||
POSITION pos;
|
||||
int i;
|
||||
CListCtrl& listctrl = GetListCtrl();
|
||||
|
||||
if(!(pos = listctrl.GetFirstSelectedItemPosition())) return;
|
||||
i = listctrl.GetNextSelectedItem(pos);
|
||||
if (listctrl.GetItemCount()>=MAXTARGETS-1) return; // too many entries to duplicate one!
|
||||
|
||||
for(int j=listctrl.GetItemCount(); j>i; j--){
|
||||
TargetMaps[j+1]=TargetMaps[j];
|
||||
PrivateMaps[j+1]=PrivateMaps[j];
|
||||
}
|
||||
TargetMaps[i+1] = TargetMaps[i];
|
||||
PrivateMaps[i+1] = PrivateMaps[i];
|
||||
|
||||
listctrl.DeleteAllItems();
|
||||
for(i=0; TargetMaps[i].path[0]; i++) {
|
||||
LV_ITEM listitem;
|
||||
listitem.mask = LVIF_TEXT | LVIF_IMAGE;
|
||||
listitem.iItem = i;
|
||||
listitem.iSubItem = 0;
|
||||
listitem.iImage = SetTargetIcon(TargetMaps[i]);
|
||||
listitem.pszText = PrivateMaps[i].title;
|
||||
listctrl.SetItem(&listitem);
|
||||
listctrl.InsertItem(&listitem);
|
||||
}
|
||||
SetTarget(TargetMaps);
|
||||
this->isUpdated=TRUE;
|
||||
}
|
||||
|
||||
void CDxwndhostView::OnMoveTop()
|
||||
{
|
||||
TARGETMAP MapEntry;
|
||||
PRIVATEMAP TitEntry;
|
||||
POSITION pos;
|
||||
int i;
|
||||
CListCtrl& listctrl = GetListCtrl();
|
||||
|
||||
if(!(pos = listctrl.GetFirstSelectedItemPosition())) return;
|
||||
i = listctrl.GetNextSelectedItem(pos);
|
||||
if (i==0)return;
|
||||
|
||||
MapEntry=TargetMaps[i];
|
||||
TitEntry=PrivateMaps[i];
|
||||
for(int j=i; j; j--){
|
||||
TargetMaps[j]=TargetMaps[j-1];
|
||||
PrivateMaps[j]=PrivateMaps[j-1];
|
||||
}
|
||||
TargetMaps[0]=MapEntry;
|
||||
PrivateMaps[0]=TitEntry;
|
||||
|
||||
listctrl.DeleteAllItems();
|
||||
for(i=0; TargetMaps[i].path[0]; i++) {
|
||||
LV_ITEM listitem;
|
||||
listitem.mask = LVIF_TEXT | LVIF_IMAGE;
|
||||
listitem.iItem = i;
|
||||
listitem.iSubItem = 0;
|
||||
listitem.iImage = SetTargetIcon(TargetMaps[i]);
|
||||
listitem.pszText = PrivateMaps[i].title;
|
||||
listctrl.SetItem(&listitem);
|
||||
listctrl.InsertItem(&listitem);
|
||||
}
|
||||
SetTarget(TargetMaps);
|
||||
this->isUpdated=TRUE;
|
||||
}
|
||||
|
||||
void CDxwndhostView::OnMoveUp()
|
||||
{
|
||||
TARGETMAP MapEntry;
|
||||
PRIVATEMAP TitEntry;
|
||||
POSITION pos;
|
||||
int i;
|
||||
CListCtrl& listctrl = GetListCtrl();
|
||||
|
||||
if(!(pos = listctrl.GetFirstSelectedItemPosition())) return;
|
||||
i = listctrl.GetNextSelectedItem(pos);
|
||||
if (i==0)return;
|
||||
|
||||
MapEntry=TargetMaps[i-1];
|
||||
TargetMaps[i-1]=TargetMaps[i];
|
||||
TargetMaps[i]=MapEntry;
|
||||
TitEntry=PrivateMaps[i-1];
|
||||
PrivateMaps[i-1]=PrivateMaps[i];
|
||||
PrivateMaps[i]=TitEntry;
|
||||
|
||||
listctrl.DeleteAllItems();
|
||||
for(i=0; TargetMaps[i].path[0]; i++) {
|
||||
LV_ITEM listitem;
|
||||
listitem.mask = LVIF_TEXT | LVIF_IMAGE;
|
||||
listitem.iItem = i;
|
||||
listitem.iSubItem = 0;
|
||||
listitem.iImage = SetTargetIcon(TargetMaps[i]);
|
||||
listitem.pszText = PrivateMaps[i].title;
|
||||
listctrl.SetItem(&listitem);
|
||||
listctrl.InsertItem(&listitem);
|
||||
}
|
||||
SetTarget(TargetMaps);
|
||||
this->isUpdated=TRUE;
|
||||
}
|
||||
|
||||
void CDxwndhostView::OnMoveDown()
|
||||
{
|
||||
TARGETMAP MapEntry;
|
||||
PRIVATEMAP TitEntry;
|
||||
POSITION pos;
|
||||
int i;
|
||||
CListCtrl& listctrl = GetListCtrl();
|
||||
|
||||
if(!(pos = listctrl.GetFirstSelectedItemPosition())) return;
|
||||
i = listctrl.GetNextSelectedItem(pos);
|
||||
if (i==listctrl.GetItemCount()-1)return;
|
||||
|
||||
MapEntry=TargetMaps[i+1];
|
||||
TargetMaps[i+1]=TargetMaps[i];
|
||||
TargetMaps[i]=MapEntry;
|
||||
TitEntry=PrivateMaps[i+1];
|
||||
PrivateMaps[i+1]=PrivateMaps[i];
|
||||
PrivateMaps[i]=TitEntry;
|
||||
|
||||
listctrl.DeleteAllItems();
|
||||
for(i=0; TargetMaps[i].path[0]; i++) {
|
||||
LV_ITEM listitem;
|
||||
listitem.mask = LVIF_TEXT | LVIF_IMAGE;
|
||||
listitem.iItem = i;
|
||||
listitem.iSubItem = 0;
|
||||
listitem.iImage = SetTargetIcon(TargetMaps[i]);
|
||||
listitem.pszText = PrivateMaps[i].title;
|
||||
listctrl.SetItem(&listitem);
|
||||
listctrl.InsertItem(&listitem);
|
||||
}
|
||||
SetTarget(TargetMaps);
|
||||
this->isUpdated=TRUE;
|
||||
}
|
||||
|
||||
void CDxwndhostView::OnMoveBottom()
|
||||
{
|
||||
TARGETMAP MapEntry;
|
||||
PRIVATEMAP TitEntry;
|
||||
POSITION pos;
|
||||
int i, last;
|
||||
CListCtrl& listctrl = GetListCtrl();
|
||||
|
||||
if(!(pos = listctrl.GetFirstSelectedItemPosition())) return;
|
||||
i = listctrl.GetNextSelectedItem(pos);
|
||||
last = listctrl.GetItemCount()-1;
|
||||
if (i==last)return;
|
||||
|
||||
MapEntry=TargetMaps[i];
|
||||
TitEntry=PrivateMaps[i];
|
||||
for(int j=i; j<last; j++){
|
||||
TargetMaps[j]=TargetMaps[j+1];
|
||||
PrivateMaps[j]=PrivateMaps[j+1];
|
||||
}
|
||||
TargetMaps[last]=MapEntry;
|
||||
PrivateMaps[last]=TitEntry;
|
||||
|
||||
listctrl.DeleteAllItems();
|
||||
for(i=0; TargetMaps[i].path[0]; i++) {
|
||||
LV_ITEM listitem;
|
||||
listitem.mask = LVIF_TEXT | LVIF_IMAGE;
|
||||
listitem.iItem = i;
|
||||
listitem.iSubItem = 0;
|
||||
listitem.iImage = SetTargetIcon(TargetMaps[i]);
|
||||
listitem.pszText = PrivateMaps[i].title;
|
||||
listctrl.SetItem(&listitem);
|
||||
listctrl.InsertItem(&listitem);
|
||||
}
|
||||
SetTarget(TargetMaps);
|
||||
this->isUpdated=TRUE;
|
||||
}
|
||||
|
||||
void CDxwndhostView::OnDelete()
|
||||
{
|
||||
int i, len;
|
||||
@ -1797,6 +1979,7 @@ DWORD WINAPI TrayIconUpdate(CSystemTray *Tray)
|
||||
if(gTransientMode) {
|
||||
IdleCount++;
|
||||
if(IdleCount > 2) {
|
||||
Tray->HideIcon();
|
||||
delete(Tray->GetAncestor(GA_ROOTOWNER));
|
||||
exit(0);
|
||||
}
|
||||
@ -1947,6 +2130,9 @@ void CDxwndhostView::OnRButtonDown(UINT nFlags, CPoint point)
|
||||
case ID_PADD:
|
||||
OnAdd();
|
||||
break;
|
||||
case ID_PDUPLICATE:
|
||||
OnDuplicate();
|
||||
break;
|
||||
case ID_PEXPLORE:
|
||||
OnExplore();
|
||||
break;
|
||||
@ -1992,6 +2178,18 @@ void CDxwndhostView::OnRButtonDown(UINT nFlags, CPoint point)
|
||||
case ID_DESKTOPCOLORDEPTH_32BPP:
|
||||
OnDesktopcolordepth32bpp();
|
||||
break;
|
||||
case ID_MOVE_TOP:
|
||||
OnMoveTop();
|
||||
break;
|
||||
case ID_MOVE_UP:
|
||||
OnMoveUp();
|
||||
break;
|
||||
case ID_MOVE_DOWN:
|
||||
OnMoveDown();
|
||||
break;
|
||||
case ID_MOVE_BOTTOM:
|
||||
OnMoveBottom();
|
||||
break;
|
||||
}
|
||||
CListView::OnRButtonDown(nFlags, point);
|
||||
}
|
||||
|
@ -60,6 +60,7 @@ protected:
|
||||
//{{AFX_MSG(CDxwndhostView)
|
||||
afx_msg void OnDblclk(NMHDR* pNMHDR, LRESULT* pResult);
|
||||
afx_msg void OnAdd();
|
||||
afx_msg void OnDuplicate();
|
||||
afx_msg void OnModify();
|
||||
afx_msg void OnExport();
|
||||
afx_msg void OnImport();
|
||||
@ -97,6 +98,10 @@ protected:
|
||||
afx_msg void OnDesktopcolordepth16bpp();
|
||||
afx_msg void OnDesktopcolordepth24bpp();
|
||||
afx_msg void OnDesktopcolordepth32bpp();
|
||||
afx_msg void OnMoveTop();
|
||||
afx_msg void OnMoveUp();
|
||||
afx_msg void OnMoveDown();
|
||||
afx_msg void OnMoveBottom();
|
||||
//}}AFX_MSG
|
||||
DECLARE_MESSAGE_MAP()
|
||||
};
|
||||
|
BIN
host/host.aps
BIN
host/host.aps
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 6.1 KiB |
Binary file not shown.
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.3 KiB |
BIN
host/resource
BIN
host/resource
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user