mirror of
https://github.com/DxWnd/DxWnd.reloaded
synced 2024-12-30 09:25:35 +01:00
v2_02_39_src
Former-commit-id: bca94a8fa11609187704d32de5dca2ab99209934
This commit is contained in:
parent
547623861d
commit
0b3d188631
1070
Include/ddrawi.h
Normal file
1070
Include/ddrawi.h
Normal file
File diff suppressed because it is too large
Load Diff
@ -104,6 +104,12 @@
|
|||||||
#define PEEKALLMESSAGES 0x00400000 // force Peek-ing all sort of messages to avoid Win7 message queue saturation that leads to program halt
|
#define PEEKALLMESSAGES 0x00400000 // force Peek-ing all sort of messages to avoid Win7 message queue saturation that leads to program halt
|
||||||
#define SURFACEWARN 0x00800000 // warn when a unclassified surface capability is met (debug only!)
|
#define SURFACEWARN 0x00800000 // warn when a unclassified surface capability is met (debug only!)
|
||||||
#define ANALYTICMODE 0x01000000 // activate analytic mode (debug only!)
|
#define ANALYTICMODE 0x01000000 // activate analytic mode (debug only!)
|
||||||
|
#define FORCESHEL 0x02000000 // Forces HEL (DDCREATE_EMULATIONONLY)
|
||||||
|
#define CAPMASK 0x04000000 // Enable capability mask (according to ini file)
|
||||||
|
#define COLORFIX 0x08000000 // Win7 color fix for 8bpp paletized modes
|
||||||
|
#define NODDRAWBLT 0x10000000 // Suppress ddraw Blt to primary
|
||||||
|
#define NODDRAWFLIP 0x20000000 // Suppress ddraw Flip to primary
|
||||||
|
#define NOGDIBLT 0x40000000 // Suppress GDI Blt to video device
|
||||||
|
|
||||||
// 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
|
||||||
@ -156,6 +162,7 @@ typedef struct
|
|||||||
short IsFullScreen;
|
short IsFullScreen;
|
||||||
short Width, Height;
|
short Width, Height;
|
||||||
short ColorDepth;
|
short ColorDepth;
|
||||||
|
//DDPIXELFORMAT VirtualPixel;
|
||||||
short DXVersion;
|
short DXVersion;
|
||||||
HWND hWnd;
|
HWND hWnd;
|
||||||
DWORD dwPid;
|
DWORD dwPid;
|
||||||
@ -163,6 +170,7 @@ typedef struct
|
|||||||
DWORD FPSCount;
|
DWORD FPSCount;
|
||||||
int TimeShift;
|
int TimeShift;
|
||||||
short CursorX, CursorY;
|
short CursorX, CursorY;
|
||||||
|
PALETTEENTRY Palette[256];
|
||||||
} DXWNDSTATUS;
|
} DXWNDSTATUS;
|
||||||
|
|
||||||
extern DXWNDSTATUS DxWndStatus;
|
extern DXWNDSTATUS DxWndStatus;
|
||||||
|
5848
build/dxwnd.1.ini
Normal file
5848
build/dxwnd.1.ini
Normal file
File diff suppressed because it is too large
Load Diff
1133
build/dxwnd.2.ini
Normal file
1133
build/dxwnd.2.ini
Normal file
File diff suppressed because it is too large
Load Diff
167
build/dxwnd.3.ini
Normal file
167
build/dxwnd.3.ini
Normal file
@ -0,0 +1,167 @@
|
|||||||
|
[window]
|
||||||
|
posx=1452
|
||||||
|
posy=365
|
||||||
|
sizx=320
|
||||||
|
sizy=514
|
||||||
|
[target]
|
||||||
|
title0=Rayman 2 Demo
|
||||||
|
path0=D:\Games\Rayman2Demo\Rayman2Demo.exe
|
||||||
|
module0=
|
||||||
|
opengllib0=
|
||||||
|
ver0=1
|
||||||
|
coord0=0
|
||||||
|
flag0=402653217
|
||||||
|
flagg0=1210056704
|
||||||
|
flagh0=2097172
|
||||||
|
flagi0=0
|
||||||
|
tflag0=64
|
||||||
|
initx0=0
|
||||||
|
inity0=0
|
||||||
|
minx0=0
|
||||||
|
miny0=0
|
||||||
|
maxx0=0
|
||||||
|
maxy0=0
|
||||||
|
posx0=50
|
||||||
|
posy0=50
|
||||||
|
sizx0=800
|
||||||
|
sizy0=600
|
||||||
|
maxfps0=0
|
||||||
|
initts0=0
|
||||||
|
title1=Mirror's Edge
|
||||||
|
path1=D:\Games\Mirror's Edge\Binaries\MirrorsEdge.exe
|
||||||
|
module1=
|
||||||
|
opengllib1=
|
||||||
|
ver1=0
|
||||||
|
coord1=0
|
||||||
|
flag1=-2013265882
|
||||||
|
flagg1=1207959552
|
||||||
|
flagh1=2097172
|
||||||
|
flagi1=0
|
||||||
|
tflag1=5
|
||||||
|
initx1=0
|
||||||
|
inity1=0
|
||||||
|
minx1=0
|
||||||
|
miny1=0
|
||||||
|
maxx1=0
|
||||||
|
maxy1=0
|
||||||
|
posx1=50
|
||||||
|
posy1=50
|
||||||
|
sizx1=800
|
||||||
|
sizy1=600
|
||||||
|
maxfps1=0
|
||||||
|
initts1=6
|
||||||
|
title2=LastHalfWin.exe
|
||||||
|
path2=D:\Games\Last Half Of Darkness\LastHalfWin.exe
|
||||||
|
module2=
|
||||||
|
opengllib2=
|
||||||
|
ver2=1
|
||||||
|
coord2=0
|
||||||
|
flag2=134217760
|
||||||
|
flagg2=1207959552
|
||||||
|
flagh2=4
|
||||||
|
flagi2=0
|
||||||
|
tflag2=512
|
||||||
|
initx2=0
|
||||||
|
inity2=0
|
||||||
|
minx2=0
|
||||||
|
miny2=0
|
||||||
|
maxx2=0
|
||||||
|
maxy2=0
|
||||||
|
posx2=50
|
||||||
|
posy2=50
|
||||||
|
sizx2=800
|
||||||
|
sizy2=600
|
||||||
|
maxfps2=0
|
||||||
|
initts2=0
|
||||||
|
title3=DOOM95.EXE
|
||||||
|
path3=D:\Games\Doom95i\DOOM95.EXE
|
||||||
|
module3=
|
||||||
|
opengllib3=
|
||||||
|
ver3=0
|
||||||
|
coord3=0
|
||||||
|
flag3=134217762
|
||||||
|
flagg3=1207959552
|
||||||
|
flagh3=20
|
||||||
|
flagi3=0
|
||||||
|
tflag3=512
|
||||||
|
initx3=0
|
||||||
|
inity3=0
|
||||||
|
minx3=0
|
||||||
|
miny3=0
|
||||||
|
maxx3=0
|
||||||
|
maxy3=0
|
||||||
|
posx3=50
|
||||||
|
posy3=50
|
||||||
|
sizx3=800
|
||||||
|
sizy3=600
|
||||||
|
maxfps3=0
|
||||||
|
initts3=0
|
||||||
|
title4=CNC3.exe
|
||||||
|
path4=D:\Games\Command & Conquer 3\CNC3.exe
|
||||||
|
module4=
|
||||||
|
opengllib4=
|
||||||
|
ver4=9
|
||||||
|
coord4=0
|
||||||
|
flag4=134217762
|
||||||
|
flagg4=1207959552
|
||||||
|
flagh4=20
|
||||||
|
flagi4=0
|
||||||
|
tflag4=512
|
||||||
|
initx4=0
|
||||||
|
inity4=0
|
||||||
|
minx4=0
|
||||||
|
miny4=0
|
||||||
|
maxx4=0
|
||||||
|
maxy4=0
|
||||||
|
posx4=50
|
||||||
|
posy4=50
|
||||||
|
sizx4=800
|
||||||
|
sizy4=600
|
||||||
|
maxfps4=0
|
||||||
|
initts4=0
|
||||||
|
title5=Div.exe
|
||||||
|
path5=D:\Games\Beyond Divinity\Div.exe
|
||||||
|
module5=
|
||||||
|
opengllib5=
|
||||||
|
ver5=0
|
||||||
|
coord5=0
|
||||||
|
flag5=134217762
|
||||||
|
flagg5=1207959552
|
||||||
|
flagh5=20
|
||||||
|
flagi5=0
|
||||||
|
tflag5=512
|
||||||
|
initx5=0
|
||||||
|
inity5=0
|
||||||
|
minx5=0
|
||||||
|
miny5=0
|
||||||
|
maxx5=0
|
||||||
|
maxy5=0
|
||||||
|
posx5=50
|
||||||
|
posy5=50
|
||||||
|
sizx5=800
|
||||||
|
sizy5=600
|
||||||
|
maxfps5=0
|
||||||
|
initts5=0
|
||||||
|
title6=martian gothic.exe
|
||||||
|
path6=D:\Games\Martian Gothic\martian gothic.exe
|
||||||
|
module6=
|
||||||
|
opengllib6=
|
||||||
|
ver6=7
|
||||||
|
coord6=0
|
||||||
|
flag6=201326626
|
||||||
|
flagg6=1208090624
|
||||||
|
flagh6=276
|
||||||
|
flagi6=0
|
||||||
|
tflag6=263
|
||||||
|
initx6=0
|
||||||
|
inity6=0
|
||||||
|
minx6=0
|
||||||
|
miny6=0
|
||||||
|
maxx6=0
|
||||||
|
maxy6=0
|
||||||
|
posx6=50
|
||||||
|
posy6=50
|
||||||
|
sizx6=800
|
||||||
|
sizy6=600
|
||||||
|
maxfps6=0
|
||||||
|
initts6=0
|
@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:d388e96ad41d9c1eafc912aecd8968fbd61f7f293a1f1a1cd69df02309c64344
|
oid sha256:af6a5009d304a3e8cd4b4303697b68a8a6e060a6815e60b70a75a622cf8e4870
|
||||||
size 419328
|
size 421376
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:376135e3ce4f0be506edbfb44720a7c762f120258e1b24c11ccd6fe11cc6d375
|
oid sha256:78e9db00462bdbd92c3b15f0f9e7aa7ae434573ccaa808af1226ba489104837f
|
||||||
size 526336
|
size 532480
|
||||||
|
2815
build/dxwnd.ini
2815
build/dxwnd.ini
File diff suppressed because it is too large
Load Diff
@ -272,13 +272,3 @@ code reorganization
|
|||||||
GUI:
|
GUI:
|
||||||
removed useless flags and moved debug options in a hidden tab
|
removed useless flags and moved debug options in a hidden tab
|
||||||
|
|
||||||
v2.02.37
|
|
||||||
CORE:
|
|
||||||
fix: now saves ZBUFFER capabilities to restore them on queries. This eliminates one possible d3d error when attempting use surface emulated mode.
|
|
||||||
fixed surface caps for "Ancient Evil", "Star Wars Shadows of the Empire", "Star Force Deluxe".
|
|
||||||
fixed surface handling in "Star Force Deluxe" that rely on a implicit PRIMARY surface created with 0 flags & 0 capabilities.
|
|
||||||
fixed handling of Flip operations when BACKBUFFER surface no longer exists, but there's a QueryInterface clone.
|
|
||||||
attempt to fix GetSystemPaletteEntries in windowed mode by using CreateHalftonePalette
|
|
||||||
d3d8/9 GetDisplayMode method duplicated to take in account the different prototype!!
|
|
||||||
added tentative wrapper for GetDCEx() call
|
|
||||||
initial coding for timers wrapping for time stretching
|
|
@ -1,2 +0,0 @@
|
|||||||
|
|
||||||
|
|
181
dll/ddraw.cpp
181
dll/ddraw.cpp
@ -8,6 +8,7 @@
|
|||||||
#include <ddraw.h>
|
#include <ddraw.h>
|
||||||
#include "dxwnd.h"
|
#include "dxwnd.h"
|
||||||
#include "dxhook.h"
|
#include "dxhook.h"
|
||||||
|
#include "ddrawi.h"
|
||||||
#include "dxwcore.hpp"
|
#include "dxwcore.hpp"
|
||||||
#include "stdio.h"
|
#include "stdio.h"
|
||||||
#include "hddraw.h"
|
#include "hddraw.h"
|
||||||
@ -38,7 +39,7 @@ HRESULT WINAPI extGetDisplayMode(LPDIRECTDRAW, LPDDSURFACEDESC);
|
|||||||
HRESULT WINAPI extGetGDISurface(LPDIRECTDRAW, LPDIRECTDRAWSURFACE *);
|
HRESULT WINAPI extGetGDISurface(LPDIRECTDRAW, LPDIRECTDRAWSURFACE *);
|
||||||
HRESULT WINAPI extEnumDisplayModes1(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK);
|
HRESULT WINAPI extEnumDisplayModes1(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK);
|
||||||
HRESULT WINAPI extEnumDisplayModes4(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMMODESCALLBACK2);
|
HRESULT WINAPI extEnumDisplayModes4(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMMODESCALLBACK2);
|
||||||
// STDMETHOD(Initialize)(THIS_ GUID FAR *) PURE;
|
HRESULT WINAPI extInitialize(LPDIRECTDRAW, FAR GUID *);
|
||||||
HRESULT WINAPI extSetCooperativeLevel(void *, HWND, DWORD);
|
HRESULT WINAPI extSetCooperativeLevel(void *, HWND, DWORD);
|
||||||
HRESULT WINAPI extSetDisplayMode1(LPDIRECTDRAW, DWORD, DWORD, DWORD);
|
HRESULT WINAPI extSetDisplayMode1(LPDIRECTDRAW, DWORD, DWORD, DWORD);
|
||||||
HRESULT WINAPI extSetDisplayMode2(LPDIRECTDRAW, DWORD, DWORD, DWORD, DWORD, DWORD);
|
HRESULT WINAPI extSetDisplayMode2(LPDIRECTDRAW, DWORD, DWORD, DWORD, DWORD, DWORD);
|
||||||
@ -138,7 +139,7 @@ GetGDISurface_Type pGetGDISurface;
|
|||||||
GetMonitorFrequency_Type pGetMonitorFrequency;
|
GetMonitorFrequency_Type pGetMonitorFrequency;
|
||||||
GetScanLine_Type pGetScanLine;
|
GetScanLine_Type pGetScanLine;
|
||||||
GetVerticalBlankStatus_Type pGetVerticalBlankStatus;
|
GetVerticalBlankStatus_Type pGetVerticalBlankStatus;
|
||||||
//Initialize
|
Initialize_Type pInitialize;
|
||||||
RestoreDisplayMode_Type pRestoreDisplayMode;
|
RestoreDisplayMode_Type pRestoreDisplayMode;
|
||||||
SetCooperativeLevel_Type pSetCooperativeLevel;
|
SetCooperativeLevel_Type pSetCooperativeLevel;
|
||||||
SetDisplayMode1_Type pSetDisplayMode1;
|
SetDisplayMode1_Type pSetDisplayMode1;
|
||||||
@ -454,6 +455,8 @@ BOOL isPaletteUpdated;
|
|||||||
void mySetPalette(int dwstart, int dwcount, LPPALETTEENTRY lpentries)
|
void mySetPalette(int dwstart, int dwcount, LPPALETTEENTRY lpentries)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
extern DXWNDSTATUS *pStatus;
|
||||||
|
|
||||||
OutTraceD("mySetPalette DEBUG: BPP=%d GBitMask=%x count=%d\n",
|
OutTraceD("mySetPalette DEBUG: BPP=%d GBitMask=%x count=%d\n",
|
||||||
dxw.ActualPixelFormat.dwRGBBitCount, dxw.ActualPixelFormat.dwGBitMask, dwcount);
|
dxw.ActualPixelFormat.dwRGBBitCount, dxw.ActualPixelFormat.dwGBitMask, dwcount);
|
||||||
|
|
||||||
@ -467,6 +470,9 @@ void mySetPalette(int dwstart, int dwcount, LPPALETTEENTRY lpentries)
|
|||||||
OutTraceD("\n");
|
OutTraceD("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for(int idx=0; idx<dwcount; idx++)
|
||||||
|
pStatus->Palette[dwstart+idx]= lpentries[idx];
|
||||||
|
|
||||||
if (dxw.dwFlags3 & RGB2YUV){
|
if (dxw.dwFlags3 & RGB2YUV){
|
||||||
int idx;
|
int idx;
|
||||||
for(idx=0; idx<dwcount; idx++){
|
for(idx=0; idx<dwcount; idx++){
|
||||||
@ -1000,6 +1006,8 @@ static void HookDDSession(LPDIRECTDRAW *lplpdd, int dxversion)
|
|||||||
SetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode, (void **)&pGetDisplayMode, "GetDisplayMode(D)");
|
SetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode, (void **)&pGetDisplayMode, "GetDisplayMode(D)");
|
||||||
// IDIrectDraw::GetGDISurface
|
// IDIrectDraw::GetGDISurface
|
||||||
SetHook((void *)(**(DWORD **)lplpdd + 56), extGetGDISurface, (void **)&pGetGDISurface, "GetGDISurface(D)");
|
SetHook((void *)(**(DWORD **)lplpdd + 56), extGetGDISurface, (void **)&pGetGDISurface, "GetGDISurface(D)");
|
||||||
|
// IDIrectDraw::Initialize
|
||||||
|
SetHook((void *)(**(DWORD **)lplpdd + 72), extInitialize, (void **)&pInitialize, "Initialize(D)");
|
||||||
// IDIrectDraw::SetCooperativeLevel
|
// IDIrectDraw::SetCooperativeLevel
|
||||||
SetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevel, (void **)&pSetCooperativeLevel, "SetCooperativeLevel(D)");
|
SetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevel, (void **)&pSetCooperativeLevel, "SetCooperativeLevel(D)");
|
||||||
// IDIrectDraw::SetDisplayMode
|
// IDIrectDraw::SetDisplayMode
|
||||||
@ -1035,8 +1043,6 @@ static void HookDDSession(LPDIRECTDRAW *lplpdd, int dxversion)
|
|||||||
SetHook((void *)(**(DWORD **)lplpdd + 64), extGetScanLineProxy, (void **)&pGetScanLine, "GetScanLine(D)");
|
SetHook((void *)(**(DWORD **)lplpdd + 64), extGetScanLineProxy, (void **)&pGetScanLine, "GetScanLine(D)");
|
||||||
// IDIrectDraw::GetVerticalBlankStatus
|
// IDIrectDraw::GetVerticalBlankStatus
|
||||||
SetHook((void *)(**(DWORD **)lplpdd + 68), extGetVerticalBlankStatusProxy, (void **)&pGetVerticalBlankStatus, "GetVerticalBlankStatus(D)");
|
SetHook((void *)(**(DWORD **)lplpdd + 68), extGetVerticalBlankStatusProxy, (void **)&pGetVerticalBlankStatus, "GetVerticalBlankStatus(D)");
|
||||||
// IDIrectDraw::Initialize
|
|
||||||
// offset 72: Undocumented
|
|
||||||
// IDIrectDraw::RestoreDisplayMode
|
// IDIrectDraw::RestoreDisplayMode
|
||||||
SetHook((void *)(**(DWORD **)lplpdd + 76), extRestoreDisplayModeProxy, (void **)&pRestoreDisplayMode, "RestoreDisplayMode(D)");
|
SetHook((void *)(**(DWORD **)lplpdd + 76), extRestoreDisplayModeProxy, (void **)&pRestoreDisplayMode, "RestoreDisplayMode(D)");
|
||||||
// IDIrectDraw::GetAvailableVidMem
|
// IDIrectDraw::GetAvailableVidMem
|
||||||
@ -1364,6 +1370,57 @@ static void HookDDSurfaceGeneric(LPDIRECTDRAWSURFACE *lplpdds, int dxversion)
|
|||||||
SetHook((void *)(**(DWORD **)lplpdds + 140), extUpdateOverlayZOrderProxy, (void **)&pUpdateOverlayZOrder, "UpdateOverlayZOrder(S)");
|
SetHook((void *)(**(DWORD **)lplpdds + 140), extUpdateOverlayZOrderProxy, (void **)&pUpdateOverlayZOrder, "UpdateOverlayZOrder(S)");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------------------------ */
|
||||||
|
// CleanRect:
|
||||||
|
// takes care of a corrupted RECT struct where some elements are not valid pointers.
|
||||||
|
// In this case, the whole RECT * variable is set to NULL, a value that is interpreted
|
||||||
|
// by directdraw functions as the whole surface area.
|
||||||
|
/* ------------------------------------------------------------------------------ */
|
||||||
|
|
||||||
|
static void CleanRect(RECT **lprect, int line)
|
||||||
|
{
|
||||||
|
__try {
|
||||||
|
// normally unharmful statements
|
||||||
|
if(*lprect){
|
||||||
|
int i;
|
||||||
|
i=(*lprect)->bottom;
|
||||||
|
i=(*lprect)->top;
|
||||||
|
i=(*lprect)->left;
|
||||||
|
i=(*lprect)->right;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
__except(EXCEPTION_EXECUTE_HANDLER){
|
||||||
|
OutTraceE("Rectangle exception caught at %d: invalid RECT\n", __LINE__);
|
||||||
|
if(IsAssertEnabled) MessageBox(0, "Rectangle exception", "CleanRect", MB_OK | MB_ICONEXCLAMATION);
|
||||||
|
*lprect=NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void MaskCapsD(LPDDCAPS c1, LPDDCAPS c2)
|
||||||
|
{
|
||||||
|
FILE *capfile;
|
||||||
|
//char sBuf[80+1];
|
||||||
|
char token[20+1];
|
||||||
|
DWORD val;
|
||||||
|
OutTraceD("MaskCaps\n");
|
||||||
|
capfile=fopen("dxwnd.cap", "r");
|
||||||
|
if(!capfile) return;
|
||||||
|
while(TRUE){
|
||||||
|
if(fscanf(capfile, "%s=%x", token, &val)!=2) break;
|
||||||
|
if(!strcmp(token, "dwCaps")) c1->dwCaps &= val;
|
||||||
|
if(!strcmp(token, "dwCaps2")) c1->dwCaps2 &= val;
|
||||||
|
if(!strcmp(token, "dwCKeyCaps")) c1->dwCKeyCaps &= val;
|
||||||
|
if(!strcmp(token, "dwFXCaps")) c1->dwFXCaps &= val;
|
||||||
|
}
|
||||||
|
OutTraceD("MaskCaps(D-HW): caps=%x(%s) caps2=%x(%s) fxcaps=%x(%s) fxalphacaps=%x(%s) keycaps=%x(%s)\n",
|
||||||
|
c1->dwCaps, ExplainDDDCaps(c1->dwCaps),
|
||||||
|
c1->dwCaps2, ExplainDDDCaps2(c1->dwCaps2),
|
||||||
|
c1->dwFXCaps, ExplainDDFXCaps(c1->dwFXCaps),
|
||||||
|
c1->dwFXAlphaCaps, ExplainDDFXALPHACaps(c1->dwFXAlphaCaps),
|
||||||
|
c1->dwCKeyCaps, ExplainDDCKeyCaps(c1->dwCKeyCaps));
|
||||||
|
fclose(capfile);
|
||||||
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------------ */
|
/* ------------------------------------------------------------------------------ */
|
||||||
// directdraw method hooks
|
// directdraw method hooks
|
||||||
/* ------------------------------------------------------------------------------ */
|
/* ------------------------------------------------------------------------------ */
|
||||||
@ -1376,13 +1433,13 @@ HRESULT WINAPI extGetCapsD(LPDIRECTDRAW lpdd, LPDDCAPS c1, LPDDCAPS c2)
|
|||||||
if(res)
|
if(res)
|
||||||
OutTraceE("GetCaps(D): ERROR res=%x(%s)\n", res, ExplainDDError(res));
|
OutTraceE("GetCaps(D): ERROR res=%x(%s)\n", res, ExplainDDError(res));
|
||||||
else {
|
else {
|
||||||
if (c1) OutTraceD("GetCaps(D-HW): caps=%x(%s) caps2=%x(%s)fxcaps=%x(%s) fxalphacaps=%x(%s) keycaps=%x(%s)\n",
|
if (c1) OutTraceD("GetCaps(D-HW): caps=%x(%s) caps2=%x(%s) fxcaps=%x(%s) fxalphacaps=%x(%s) keycaps=%x(%s)\n",
|
||||||
c1->dwCaps, ExplainDDDCaps(c1->dwCaps),
|
c1->dwCaps, ExplainDDDCaps(c1->dwCaps),
|
||||||
c1->dwCaps2, ExplainDDDCaps2(c1->dwCaps2),
|
c1->dwCaps2, ExplainDDDCaps2(c1->dwCaps2),
|
||||||
c1->dwFXCaps, ExplainDDFXCaps(c1->dwFXCaps),
|
c1->dwFXCaps, ExplainDDFXCaps(c1->dwFXCaps),
|
||||||
c1->dwFXAlphaCaps, ExplainDDFXALPHACaps(c1->dwFXAlphaCaps),
|
c1->dwFXAlphaCaps, ExplainDDFXALPHACaps(c1->dwFXAlphaCaps),
|
||||||
c1->dwCKeyCaps, ExplainDDCKeyCaps(c1->dwCKeyCaps));
|
c1->dwCKeyCaps, ExplainDDCKeyCaps(c1->dwCKeyCaps));
|
||||||
if (c2) OutTraceD("GetCaps(D-SW): caps=%x(%s) caps2=%x(%s)fxcaps=%x(%s) fxalphacaps=%x(%s) keycaps=%x(%s)\n",
|
if (c2) OutTraceD("GetCaps(D-SW): caps=%x(%s) caps2=%x(%s) fxcaps=%x(%s) fxalphacaps=%x(%s) keycaps=%x(%s)\n",
|
||||||
c2->dwCaps, ExplainDDDCaps(c2->dwCaps),
|
c2->dwCaps, ExplainDDDCaps(c2->dwCaps),
|
||||||
c2->dwCaps2, ExplainDDDCaps2(c2->dwCaps2),
|
c2->dwCaps2, ExplainDDDCaps2(c2->dwCaps2),
|
||||||
c2->dwFXCaps, ExplainDDFXCaps(c2->dwFXCaps),
|
c2->dwFXCaps, ExplainDDFXCaps(c2->dwFXCaps),
|
||||||
@ -1390,12 +1447,28 @@ HRESULT WINAPI extGetCapsD(LPDIRECTDRAW lpdd, LPDDCAPS c1, LPDDCAPS c2)
|
|||||||
c2->dwCKeyCaps, ExplainDDCKeyCaps(c2->dwCKeyCaps));
|
c2->dwCKeyCaps, ExplainDDCKeyCaps(c2->dwCKeyCaps));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if((dxw.dwFlags3 & FORCESHEL) && c1) {
|
||||||
|
DDCAPS_DX7 swcaps; // DDCAPS_DX7 because it is the bigger in size
|
||||||
|
int size;
|
||||||
|
size=c1->dwSize;
|
||||||
|
if (!c2) {
|
||||||
|
memset(&swcaps, 0, sizeof(DDCAPS_DX7));
|
||||||
|
swcaps.dwSize=size;
|
||||||
|
c2=&swcaps;
|
||||||
|
res=(*pGetCapsD)(lpdd, NULL, c2);
|
||||||
|
}
|
||||||
|
memcpy((void *)c1, (void *)c2, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
if((dxw.dwFlags3 & CAPMASK) && c1 && c2) MaskCapsD(c1, c2);
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI extDirectDrawCreate(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplpdd, IUnknown FAR *pu)
|
HRESULT WINAPI extDirectDrawCreate(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplpdd, IUnknown FAR *pu)
|
||||||
{
|
{
|
||||||
HRESULT res;
|
HRESULT res;
|
||||||
|
GUID FAR *lpPrivGuid = lpguid;
|
||||||
|
|
||||||
OutTraceD("DirectDrawCreate: guid=%x(%s)\n", lpguid, ExplainGUID(lpguid));
|
OutTraceD("DirectDrawCreate: guid=%x(%s)\n", lpguid, ExplainGUID(lpguid));
|
||||||
|
|
||||||
@ -1415,15 +1488,19 @@ HRESULT WINAPI extDirectDrawCreate(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplpdd, I
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
res = (*pDirectDrawCreate)(lpguid, lplpdd, pu);
|
if((dxw.dwFlags3 & FORCESHEL) && (lpguid==NULL)) lpPrivGuid=(GUID FAR *)DDCREATE_EMULATIONONLY;
|
||||||
|
|
||||||
|
res = (*pDirectDrawCreate)(lpPrivGuid, lplpdd, pu);
|
||||||
if(res) {
|
if(res) {
|
||||||
OutTraceE("DirectDrawCreate: ERROR res=%x(%s)\n", res, ExplainDDError(res));
|
OutTraceE("DirectDrawCreate: ERROR res=%x(%s)\n", res, ExplainDDError(res));
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(dxw.dwFlags3 & COLORFIX) (*((DDRAWI_DIRECTDRAW_INT **)lplpdd))->lpLcl->dwAppHackFlags |= 0x800;
|
||||||
|
|
||||||
dxw.dwDDVersion=1;
|
dxw.dwDDVersion=1;
|
||||||
char *mode;
|
char *mode;
|
||||||
switch ((DWORD)lpguid){
|
switch ((DWORD)lpPrivGuid){
|
||||||
case 0: mode="NULL"; break;
|
case 0: mode="NULL"; break;
|
||||||
case DDCREATE_HARDWAREONLY: mode="DDCREATE_HARDWAREONLY"; break;
|
case DDCREATE_HARDWAREONLY: mode="DDCREATE_HARDWAREONLY"; break;
|
||||||
case DDCREATE_EMULATIONONLY: mode="DDCREATE_EMULATIONONLY"; break;
|
case DDCREATE_EMULATIONONLY: mode="DDCREATE_EMULATIONONLY"; break;
|
||||||
@ -1453,36 +1530,12 @@ HRESULT WINAPI extDirectDrawCreate(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplpdd, I
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------------ */
|
|
||||||
// CleanRect:
|
|
||||||
// takes care of a corrupted RECT struct where some elements are not valid pointers.
|
|
||||||
// In this case, the whole RECT * variable is set to NULL, a value that is interpreted
|
|
||||||
// by directdraw functions as the whole surface area.
|
|
||||||
/* ------------------------------------------------------------------------------ */
|
|
||||||
|
|
||||||
static void CleanRect(RECT **lprect, int line)
|
|
||||||
{
|
|
||||||
__try {
|
|
||||||
// normally unharmful statements
|
|
||||||
if(*lprect){
|
|
||||||
int i;
|
|
||||||
i=(*lprect)->bottom;
|
|
||||||
i=(*lprect)->top;
|
|
||||||
i=(*lprect)->left;
|
|
||||||
i=(*lprect)->right;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
__except(EXCEPTION_EXECUTE_HANDLER){
|
|
||||||
OutTraceE("Rectangle exception caught at %d: invalid RECT\n", __LINE__);
|
|
||||||
if(IsAssertEnabled) MessageBox(0, "Rectangle exception", "CleanRect", MB_OK | MB_ICONEXCLAMATION);
|
|
||||||
*lprect=NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
HRESULT WINAPI extDirectDrawCreateEx(GUID FAR *lpguid,
|
HRESULT WINAPI extDirectDrawCreateEx(GUID FAR *lpguid,
|
||||||
LPDIRECTDRAW FAR *lplpdd, REFIID iid, IUnknown FAR *pu)
|
LPDIRECTDRAW FAR *lplpdd, REFIID iid, IUnknown FAR *pu)
|
||||||
{
|
{
|
||||||
HRESULT res;
|
HRESULT res;
|
||||||
|
GUID FAR *lpPrivGuid = lpguid;
|
||||||
|
|
||||||
OutTraceD("DirectDrawCreateEx: guid=%x(%s) refiid=%x\n", lpguid, ExplainGUID(lpguid), iid);
|
OutTraceD("DirectDrawCreateEx: guid=%x(%s) refiid=%x\n", lpguid, ExplainGUID(lpguid), iid);
|
||||||
|
|
||||||
// v2.1.70: auto-hooking (just in case...)
|
// v2.1.70: auto-hooking (just in case...)
|
||||||
@ -1505,15 +1558,19 @@ HRESULT WINAPI extDirectDrawCreateEx(GUID FAR *lpguid,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
res = (*pDirectDrawCreateEx)(lpguid, lplpdd, iid, pu);
|
if((dxw.dwFlags3 & FORCESHEL) && (lpguid==NULL)) lpPrivGuid=(GUID FAR *)DDCREATE_EMULATIONONLY;
|
||||||
|
|
||||||
|
res = (*pDirectDrawCreateEx)(lpPrivGuid, lplpdd, iid, pu);
|
||||||
if (res){
|
if (res){
|
||||||
OutTraceD("DirectDrawCreateEx: res=%x(%s)\n",res, ExplainDDError(res));
|
OutTraceD("DirectDrawCreateEx: res=%x(%s)\n",res, ExplainDDError(res));
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(dxw.dwFlags3 & COLORFIX) (*((DDRAWI_DIRECTDRAW_INT **)lplpdd))->lpLcl->dwAppHackFlags |= 0x800;
|
||||||
|
|
||||||
dxw.dwDDVersion=7;
|
dxw.dwDDVersion=7;
|
||||||
char *mode;
|
char *mode;
|
||||||
switch ((DWORD)lpguid){
|
switch ((DWORD)lpPrivGuid){
|
||||||
case 0: mode="NULL"; break;
|
case 0: mode="NULL"; break;
|
||||||
case DDCREATE_HARDWAREONLY: mode="DDCREATE_HARDWAREONLY"; break;
|
case DDCREATE_HARDWAREONLY: mode="DDCREATE_HARDWAREONLY"; break;
|
||||||
case DDCREATE_EMULATIONONLY: mode="DDCREATE_EMULATIONONLY"; break;
|
case DDCREATE_EMULATIONONLY: mode="DDCREATE_EMULATIONONLY"; break;
|
||||||
@ -1534,6 +1591,23 @@ HRESULT WINAPI extDirectDrawCreateEx(GUID FAR *lpguid,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI extInitialize(LPDIRECTDRAW lpdd, GUID FAR *lpguid)
|
||||||
|
{
|
||||||
|
HRESULT res;
|
||||||
|
GUID FAR *lpPrivGuid = lpguid;
|
||||||
|
|
||||||
|
OutTraceD("Initialize: lpdd=%x guid=%x(%s)\n", lpdd, lpguid, ExplainGUID(lpguid));
|
||||||
|
|
||||||
|
if((dxw.dwFlags3 & FORCESHEL) && (lpguid==NULL)) lpPrivGuid=(GUID FAR *)DDCREATE_EMULATIONONLY;
|
||||||
|
|
||||||
|
res=(*pInitialize)(lpdd, lpPrivGuid);
|
||||||
|
|
||||||
|
if(dxw.dwFlags3 & COLORFIX) (((DDRAWI_DIRECTDRAW_INT *)lpdd))->lpLcl->dwAppHackFlags |= 0x800;
|
||||||
|
|
||||||
|
if(res) OutTraceE("Initialize ERROR: res=%x(%s)\n", res, ExplainDDError(res));
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
HRESULT WINAPI extQueryInterfaceD(void *lpdd, REFIID riid, LPVOID *obp)
|
HRESULT WINAPI extQueryInterfaceD(void *lpdd, REFIID riid, LPVOID *obp)
|
||||||
{
|
{
|
||||||
HRESULT res;
|
HRESULT res;
|
||||||
@ -2081,6 +2155,7 @@ void FixSurfaceCapsAnalytic(LPDDSURFACEDESC2 lpddsd, int dxversion)
|
|||||||
break;
|
break;
|
||||||
case DDSCAPS_SYSTEMMEMORY|DDSCAPS_TEXTURE:
|
case DDSCAPS_SYSTEMMEMORY|DDSCAPS_TEXTURE:
|
||||||
// Wargames Direct3D hw acceleration
|
// Wargames Direct3D hw acceleration
|
||||||
|
// Star Wars Shadows of the Empire in RGB HEL mode
|
||||||
return;
|
return;
|
||||||
break;
|
break;
|
||||||
case DDSCAPS_TEXTURE:
|
case DDSCAPS_TEXTURE:
|
||||||
@ -2117,7 +2192,8 @@ void FixSurfaceCapsAnalytic(LPDDSURFACEDESC2 lpddsd, int dxversion)
|
|||||||
// Star Wars Shadows of the Empire
|
// Star Wars Shadows of the Empire
|
||||||
// seems to work both with/without SetPixFmt, but doesn't like DDSCAPS_SYSTEMMEMORY textures.
|
// seems to work both with/without SetPixFmt, but doesn't like DDSCAPS_SYSTEMMEMORY textures.
|
||||||
// Setting SetPixFmt makes bad alpha transparencies!
|
// Setting SetPixFmt makes bad alpha transparencies!
|
||||||
//lpddsd->ddsCaps.dwCaps = (DDSCAPS_TEXTURE|DDSCAPS_SYSTEMMEMORY|DDSCAPS_ALLOCONLOAD);
|
// DDSCAPS_VIDEOMEMORY doesn't work with HEL only! Better switch to DDSCAPS_SYSTEMMEMORY.
|
||||||
|
if (dxw.dwFlags3 & FORCESHEL) lpddsd->ddsCaps.dwCaps = (DDSCAPS_TEXTURE|DDSCAPS_SYSTEMMEMORY|DDSCAPS_ALLOCONLOAD);
|
||||||
//SetPixFmt(lpddsd);
|
//SetPixFmt(lpddsd);
|
||||||
return;
|
return;
|
||||||
break;
|
break;
|
||||||
@ -2188,6 +2264,21 @@ static void FixSurfaceCaps(LPDDSURFACEDESC2 lpddsd, int dxversion)
|
|||||||
SetPixFmt(lpddsd);
|
SetPixFmt(lpddsd);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
//// DDSCAPS_ALLOCONLOAD on VIDEOMEMORY can't be done when HAL is disabled - it returns DDERR_NODIRECTDRAWHW error
|
||||||
|
//if((lpddsd->dwFlags & DDSD_CAPS) &&
|
||||||
|
// ((lpddsd->ddsCaps.dwCaps & (DDSCAPS_TEXTURE|DDSCAPS_ALLOCONLOAD))==(DDSCAPS_TEXTURE|DDSCAPS_ALLOCONLOAD))) {
|
||||||
|
// if (dxw.dwFlags3 & FORCESHEL) lpddsd->ddsCaps.dwCaps = (DDSCAPS_TEXTURE|DDSCAPS_SYSTEMMEMORY|DDSCAPS_ALLOCONLOAD);
|
||||||
|
// return;
|
||||||
|
//}
|
||||||
|
// DDSCAPS_TEXTURE surfaces must be left untouched, unless you set FORCESHEL: in this case switch VIDEOMEMORY to SYSTEMMEMORY
|
||||||
|
if((lpddsd->dwFlags & DDSD_CAPS) && (lpddsd->ddsCaps.dwCaps & DDSCAPS_TEXTURE)){
|
||||||
|
if (dxw.dwFlags3 & FORCESHEL) {
|
||||||
|
lpddsd->ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY;
|
||||||
|
lpddsd->ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY;
|
||||||
|
}
|
||||||
|
// no further changes...
|
||||||
|
return;
|
||||||
|
}
|
||||||
if(lpddsd->dwFlags & DDSD_ZBUFFERBITDEPTH){
|
if(lpddsd->dwFlags & DDSD_ZBUFFERBITDEPTH){
|
||||||
lpddsd->dwFlags &= ~DDSD_PIXELFORMAT;
|
lpddsd->dwFlags &= ~DDSD_PIXELFORMAT;
|
||||||
}
|
}
|
||||||
@ -2202,6 +2293,10 @@ static void FixSurfaceCaps(LPDDSURFACEDESC2 lpddsd, int dxversion)
|
|||||||
(lpddsd->ddsCaps.dwCaps == (DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY))){
|
(lpddsd->ddsCaps.dwCaps == (DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY))){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if(((lpddsd->dwFlags & (DDSD_CAPS|DDSD_WIDTH|DDSD_HEIGHT|DDSD_PIXELFORMAT)) == (DDSD_CAPS|DDSD_WIDTH|DDSD_HEIGHT|DDSD_PIXELFORMAT)) &&
|
||||||
|
(lpddsd->ddsCaps.dwCaps == (DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY))){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// default case: adjust pixel format
|
// default case: adjust pixel format
|
||||||
OutTraceB("FixSurfaceCaps: suppress DDSCAPS_VIDEOMEMORY case\n");
|
OutTraceB("FixSurfaceCaps: suppress DDSCAPS_VIDEOMEMORY case\n");
|
||||||
@ -2830,7 +2925,6 @@ HRESULT WINAPI sBlt(char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect,
|
|||||||
BOOL ToPrim, FromPrim, ToScreen, FromScreen;
|
BOOL ToPrim, FromPrim, ToScreen, FromScreen;
|
||||||
//CkArg arg;
|
//CkArg arg;
|
||||||
|
|
||||||
|
|
||||||
ToPrim=dxw.IsAPrimarySurface(lpdds);
|
ToPrim=dxw.IsAPrimarySurface(lpdds);
|
||||||
FromPrim=dxw.IsAPrimarySurface(lpddssrc);
|
FromPrim=dxw.IsAPrimarySurface(lpddssrc);
|
||||||
ToScreen=ToPrim && !(dxw.dwFlags1 & EMULATESURFACE);
|
ToScreen=ToPrim && !(dxw.dwFlags1 & EMULATESURFACE);
|
||||||
@ -2881,6 +2975,14 @@ HRESULT WINAPI sBlt(char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect,
|
|||||||
OutTrace(sLog);
|
OutTrace(sLog);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// debug suppressions
|
||||||
|
if(ToPrim){
|
||||||
|
if(isFlipping)
|
||||||
|
if(dxw.dwFlags3 & NODDRAWFLIP) return DD_OK;
|
||||||
|
else
|
||||||
|
if(dxw.dwFlags3 & NODDRAWBLT) return DD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef ONEPIXELFIX
|
#ifdef ONEPIXELFIX
|
||||||
if (lpdestrect){
|
if (lpdestrect){
|
||||||
if ((lpdestrect->top == 0) && (lpdestrect->bottom == dxw.GetScreenHeight() -1)) lpdestrect->bottom = dxw.GetScreenHeight();
|
if ((lpdestrect->top == 0) && (lpdestrect->bottom == dxw.GetScreenHeight() -1)) lpdestrect->bottom = dxw.GetScreenHeight();
|
||||||
@ -3266,8 +3368,7 @@ HRESULT WINAPI extCreatePalette(LPDIRECTDRAW lpdd, DWORD dwflags, LPPALETTEENTRY
|
|||||||
|
|
||||||
HookDDPalette(lplpddp);
|
HookDDPalette(lplpddp);
|
||||||
|
|
||||||
//if(dwflags & DDPCAPS_PRIMARYSURFACE){
|
if((dwflags & (DDPCAPS_8BIT|DDPCAPS_PRIMARYSURFACE)) == (DDPCAPS_8BIT|DDPCAPS_PRIMARYSURFACE)){ // v2.02.39
|
||||||
if(dwflags & DDPCAPS_8BIT){ // v2.02.38
|
|
||||||
mySetPalette(0, 256, lpddpa);
|
mySetPalette(0, 256, lpddpa);
|
||||||
lpDDP = *lplpddp;
|
lpDDP = *lplpddp;
|
||||||
}
|
}
|
||||||
|
@ -153,6 +153,18 @@ static void dx_ToggleLogging()
|
|||||||
GetHookInfo()->isLogging=(dxw.dwTFlags & OUTTRACE);
|
GetHookInfo()->isLogging=(dxw.dwTFlags & OUTTRACE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void SuppressIMEWindow()
|
||||||
|
{
|
||||||
|
OutTraceD("WindowProc: SUPPRESS IME\n");
|
||||||
|
typedef BOOL (WINAPI *ImmDisableIME_Type)(DWORD);
|
||||||
|
ImmDisableIME_Type pImmDisableIME;
|
||||||
|
HMODULE ImmLib;
|
||||||
|
ImmLib=(*pLoadLibraryA)("Imm32");
|
||||||
|
pImmDisableIME=(ImmDisableIME_Type)(*pGetProcAddress)(ImmLib,"ImmDisableIME");
|
||||||
|
(*pImmDisableIME)(-1);
|
||||||
|
CloseHandle(ImmLib);
|
||||||
|
}
|
||||||
|
|
||||||
void HookDlls(HMODULE module)
|
void HookDlls(HMODULE module)
|
||||||
{
|
{
|
||||||
PIMAGE_NT_HEADERS pnth;
|
PIMAGE_NT_HEADERS pnth;
|
||||||
@ -627,6 +639,7 @@ void AdjustWindowPos(HWND hwnd, DWORD width, DWORD height)
|
|||||||
OutTraceE("AdjustWindowPos: ERROR err=%d at %d\n", GetLastError(), __LINE__);
|
OutTraceE("AdjustWindowPos: ERROR err=%d at %d\n", GetLastError(), __LINE__);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(dxw.dwFlags2 & SUPPRESSIME) SuppressIMEWindow();
|
||||||
dxw.ShowBanner(hwnd);
|
dxw.ShowBanner(hwnd);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -909,15 +922,7 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WM_NCCREATE:
|
case WM_NCCREATE:
|
||||||
if(dxw.dwFlags2 & SUPPRESSIME){
|
if(dxw.dwFlags2 & SUPPRESSIME) SuppressIMEWindow();
|
||||||
OutTraceD("WindowProc: SUPPRESS IME\n");
|
|
||||||
typedef BOOL (WINAPI *ImmDisableIME_Type)(DWORD);
|
|
||||||
ImmDisableIME_Type pImmDisableIME;
|
|
||||||
HMODULE ImmLib;
|
|
||||||
ImmLib=(*pLoadLibraryA)("Imm32");
|
|
||||||
pImmDisableIME=(ImmDisableIME_Type)(*pGetProcAddress)(ImmLib,"ImmDisableIME");
|
|
||||||
(*pImmDisableIME)(-1);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case WM_IME_SETCONTEXT:
|
case WM_IME_SETCONTEXT:
|
||||||
case WM_IME_NOTIFY:
|
case WM_IME_NOTIFY:
|
||||||
|
@ -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.38"
|
#define VERSION "2.02.39"
|
||||||
|
|
||||||
#define DDTHREADLOCK 1
|
#define DDTHREADLOCK 1
|
||||||
|
|
||||||
|
Binary file not shown.
@ -220,10 +220,6 @@
|
|||||||
RelativePath=".\advapi.cpp"
|
RelativePath=".\advapi.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath=".\analytic.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath=".\ddraw.cpp"
|
RelativePath=".\ddraw.cpp"
|
||||||
>
|
>
|
||||||
|
@ -816,6 +816,7 @@ BOOL WINAPI extGDIBitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nH
|
|||||||
res=0;
|
res=0;
|
||||||
if (OBJ_DC == GetObjectType(hdcDest)){
|
if (OBJ_DC == GetObjectType(hdcDest)){
|
||||||
if (dxw.HandleFPS()) return TRUE;
|
if (dxw.HandleFPS()) return TRUE;
|
||||||
|
if (dxw.dwFlags3 & NOGDIBLT) return TRUE;
|
||||||
if(dxw.IsFullScreen()){
|
if(dxw.IsFullScreen()){
|
||||||
int nWDest, nHDest;
|
int nWDest, nHDest;
|
||||||
nWDest= nWidth;
|
nWDest= nWidth;
|
||||||
@ -862,6 +863,7 @@ BOOL WINAPI extGDIPatBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nH
|
|||||||
if (OBJ_DC == GetObjectType(hdcDest)){
|
if (OBJ_DC == GetObjectType(hdcDest)){
|
||||||
IsToScreen=TRUE;
|
IsToScreen=TRUE;
|
||||||
if (dxw.HandleFPS()) return TRUE;
|
if (dxw.HandleFPS()) return TRUE;
|
||||||
|
if (dxw.dwFlags3 & NOGDIBLT) return TRUE;
|
||||||
if (dxw.IsFullScreen()){
|
if (dxw.IsFullScreen()){
|
||||||
dxw.MapClient(&nXDest, &nYDest, &nWidth, &nHeight);
|
dxw.MapClient(&nXDest, &nYDest, &nWidth, &nHeight);
|
||||||
if (dxw.dwFlags2 & SHOWFPSOVERLAY) dxw.ShowFPS(hdcDest);
|
if (dxw.dwFlags2 & SHOWFPSOVERLAY) dxw.ShowFPS(hdcDest);
|
||||||
@ -897,6 +899,7 @@ BOOL WINAPI extGDIStretchBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, in
|
|||||||
IsToScreen=FALSE;
|
IsToScreen=FALSE;
|
||||||
if (OBJ_DC == GetObjectType(hdcDest)){
|
if (OBJ_DC == GetObjectType(hdcDest)){
|
||||||
if (dxw.HandleFPS()) return TRUE;
|
if (dxw.HandleFPS()) return TRUE;
|
||||||
|
if (dxw.dwFlags3 & NOGDIBLT) return TRUE;
|
||||||
IsToScreen=TRUE;
|
IsToScreen=TRUE;
|
||||||
if(dxw.IsFullScreen()){
|
if(dxw.IsFullScreen()){
|
||||||
dxw.MapClient(&nXDest, &nYDest, &nWidth, &nHeight);
|
dxw.MapClient(&nXDest, &nYDest, &nWidth, &nHeight);
|
||||||
|
@ -60,7 +60,7 @@ extern GetGDISurface_Type pGetGDISurface;
|
|||||||
extern GetMonitorFrequency_Type pGetMonitorFrequency;
|
extern GetMonitorFrequency_Type pGetMonitorFrequency;
|
||||||
extern GetScanLine_Type pGetScanLine;
|
extern GetScanLine_Type pGetScanLine;
|
||||||
extern GetVerticalBlankStatus_Type pGetVerticalBlankStatus;
|
extern GetVerticalBlankStatus_Type pGetVerticalBlankStatus;
|
||||||
// missing Initialize ...
|
extern Initialize_Type pInitialize;
|
||||||
extern RestoreDisplayMode_Type pRestoreDisplayMode;
|
extern RestoreDisplayMode_Type pRestoreDisplayMode;
|
||||||
extern SetCooperativeLevel_Type pSetCooperativeLevel;
|
extern SetCooperativeLevel_Type pSetCooperativeLevel;
|
||||||
extern SetDisplayMode1_Type pSetDisplayMode1;
|
extern SetDisplayMode1_Type pSetDisplayMode1;
|
||||||
@ -658,6 +658,19 @@ ULONG WINAPI extReleaseDProxy(LPDIRECTDRAW lpdd)
|
|||||||
return ref;
|
return ref;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI extInitializeProxy(LPDIRECTDRAW lpdd, GUID FAR *lpguid)
|
||||||
|
{
|
||||||
|
HRESULT res;
|
||||||
|
GUID FAR *lpPrivGuid = lpguid;
|
||||||
|
|
||||||
|
OutTraceD("Initialize: lpdd=%x guid=%x(%s)\n", lpdd, lpguid, ExplainGUID(lpguid));
|
||||||
|
|
||||||
|
res=(*pInitialize)(lpdd, lpPrivGuid);
|
||||||
|
|
||||||
|
if(res) OutTraceE("Initialize ERROR: res=%x(%s)\n", res, ExplainDDError(res));
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
HRESULT WINAPI extCreateClipperProxy(LPDIRECTDRAW lpdd, DWORD dwflags, LPDIRECTDRAWCLIPPER FAR* lplpDDClipper, IUnknown FAR* pUnkOuter)
|
HRESULT WINAPI extCreateClipperProxy(LPDIRECTDRAW lpdd, DWORD dwflags, LPDIRECTDRAWCLIPPER FAR* lplpDDClipper, IUnknown FAR* pUnkOuter)
|
||||||
{
|
{
|
||||||
HRESULT res;
|
HRESULT res;
|
||||||
@ -1711,7 +1724,7 @@ static void HookDDSessionProxy(LPDIRECTDRAW *lplpdd, int dxVersion)
|
|||||||
// IDIrectDraw::GetVerticalBlankStatus
|
// IDIrectDraw::GetVerticalBlankStatus
|
||||||
SetHook((void *)(**(DWORD **)lplpdd + 68), extGetVerticalBlankStatusProxy, (void **)&pGetVerticalBlankStatus, "GetVerticalBlankStatus(D)");
|
SetHook((void *)(**(DWORD **)lplpdd + 68), extGetVerticalBlankStatusProxy, (void **)&pGetVerticalBlankStatus, "GetVerticalBlankStatus(D)");
|
||||||
// IDIrectDraw::Initialize
|
// IDIrectDraw::Initialize
|
||||||
// offset 72: Undocumented
|
SetHook((void *)(**(DWORD **)lplpdd + 72), extInitializeProxy, (void **)&pInitialize, "Initialize(D)");
|
||||||
// IDIrectDraw::RestoreDisplayMode
|
// IDIrectDraw::RestoreDisplayMode
|
||||||
SetHook((void *)(**(DWORD **)lplpdd + 76), extRestoreDisplayModeProxy, (void **)&pRestoreDisplayMode, "RestoreDisplayMode(D)");
|
SetHook((void *)(**(DWORD **)lplpdd + 76), extRestoreDisplayModeProxy, (void **)&pRestoreDisplayMode, "RestoreDisplayMode(D)");
|
||||||
if (dxVersion >= 2){
|
if (dxVersion >= 2){
|
||||||
|
@ -74,6 +74,7 @@ extern HRESULT WINAPI extGetFourCCCodesProxy(LPDIRECTDRAW, LPDWORD, LPDWORD);
|
|||||||
extern HRESULT WINAPI extTestCooperativeLevelProxy(LPDIRECTDRAW);
|
extern HRESULT WINAPI extTestCooperativeLevelProxy(LPDIRECTDRAW);
|
||||||
extern HRESULT WINAPI extEnumSurfacesProxy1(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMSURFACESCALLBACK);
|
extern HRESULT WINAPI extEnumSurfacesProxy1(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMSURFACESCALLBACK);
|
||||||
extern HRESULT WINAPI extEnumSurfacesProxy4(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMSURFACESCALLBACK2);
|
extern HRESULT WINAPI extEnumSurfacesProxy4(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMSURFACESCALLBACK2);
|
||||||
|
extern HRESULT WINAPI extInitializeProxy(LPDIRECTDRAW, GUID FAR *);
|
||||||
|
|
||||||
// DirectDraw Clipper Proxed methods
|
// DirectDraw Clipper Proxed methods
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ typedef HRESULT (WINAPI *GetGDISurface_Type)(LPDIRECTDRAW, LPDIRECTDRAWSURFACE *
|
|||||||
typedef HRESULT (WINAPI *GetMonitorFrequency_Type)(LPDIRECTDRAW, LPDWORD);
|
typedef HRESULT (WINAPI *GetMonitorFrequency_Type)(LPDIRECTDRAW, LPDWORD);
|
||||||
typedef HRESULT (WINAPI *GetScanLine_Type)(LPDIRECTDRAW, LPDWORD);
|
typedef HRESULT (WINAPI *GetScanLine_Type)(LPDIRECTDRAW, LPDWORD);
|
||||||
typedef HRESULT (WINAPI *GetVerticalBlankStatus_Type)(LPDIRECTDRAW, LPBOOL);
|
typedef HRESULT (WINAPI *GetVerticalBlankStatus_Type)(LPDIRECTDRAW, LPBOOL);
|
||||||
// STDMETHOD(Initialize)(THIS_ GUID FAR *) PURE;
|
typedef HRESULT (WINAPI *Initialize_Type)(LPDIRECTDRAW, GUID FAR *);
|
||||||
typedef HRESULT (WINAPI *RestoreDisplayMode_Type)(LPDIRECTDRAW);
|
typedef HRESULT (WINAPI *RestoreDisplayMode_Type)(LPDIRECTDRAW);
|
||||||
typedef HRESULT (WINAPI *SetCooperativeLevel_Type)(void *, HWND, DWORD);
|
typedef HRESULT (WINAPI *SetCooperativeLevel_Type)(void *, HWND, DWORD);
|
||||||
typedef HRESULT (WINAPI *SetDisplayMode2_Type)(LPDIRECTDRAW, DWORD, DWORD, DWORD, DWORD, DWORD);
|
typedef HRESULT (WINAPI *SetDisplayMode2_Type)(LPDIRECTDRAW, DWORD, DWORD, DWORD, DWORD, DWORD);
|
||||||
|
@ -1304,19 +1304,18 @@ BOOL WINAPI extClipCursor(RECT *lpRectArg)
|
|||||||
|
|
||||||
if(dxw.dwFlags1 & MODIFYMOUSE){
|
if(dxw.dwFlags1 & MODIFYMOUSE){
|
||||||
// save desired clip region
|
// save desired clip region
|
||||||
|
// v2.02.39: fix - do not attempt to write to NULL lpRect
|
||||||
if (lpRect) {
|
if (lpRect) {
|
||||||
ClipRegion=*lpRectArg;
|
ClipRegion=*lpRectArg;
|
||||||
lpClipRegion=&ClipRegion;
|
lpClipRegion=&ClipRegion;
|
||||||
|
*lpRect=dxw.MapWindowRect(lpRect);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
lpClipRegion=NULL;
|
lpClipRegion=NULL;
|
||||||
|
|
||||||
*lpRect=dxw.MapWindowRect(lpRect);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pClipCursor) res=(*pClipCursor)(lpRect);
|
if (pClipCursor) res=(*pClipCursor)(lpRect);
|
||||||
OutTraceD("ClipCursor: rect=(%d,%d)-(%d,%d) res=%x\n",
|
if (lpRect) OutTraceD("ClipCursor: REMAPPED rect=(%d,%d)-(%d,%d) res=%x\n", lpRect->left,lpRect->top,lpRect->right,lpRect->bottom, res);
|
||||||
lpRect->left,lpRect->top,lpRect->right,lpRect->bottom, res);
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=007 NightFire
|
|
||||||
path0=D:\Games\007_NightFire\Bond.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=134234146
|
|
||||||
flagg0=134217728
|
|
||||||
flagh0=65556
|
|
||||||
flagi0=0
|
|
||||||
tflag0=67
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=101 The Airborne Invasion of Normandy
|
|
||||||
path0=D:\Games\101air\101.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=134234146
|
|
||||||
flagg0=134217728
|
|
||||||
flagh0=20
|
|
||||||
flagi0=0
|
|
||||||
tflag0=192
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Age of Empires III
|
|
||||||
path0=D:\Games\Age of Empires III\age3.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=-394125278
|
|
||||||
flagg0=134217728
|
|
||||||
flagh0=20
|
|
||||||
flagi0=0
|
|
||||||
tflag0=3
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Akuma Demon Spawn - Lamentation Sword
|
|
||||||
path0=D:\Games\Akuma Demon Spawn - Lamentation Sword (1999)\Akuma\Akuma.EXE
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=134234146
|
|
||||||
flagg0=134217728
|
|
||||||
flagh0=20
|
|
||||||
flagi0=0
|
|
||||||
tflag0=64
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Ancient Evil demo
|
|
||||||
path0=D:\Games\AECSC\aecsc-demo.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=150994976
|
|
||||||
flagg0=1207959552
|
|
||||||
flagh0=25165844
|
|
||||||
flagi0=0
|
|
||||||
tflag0=259
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Army Men RTS
|
|
||||||
path0=D:\Games\Army Men RTS\amrts.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=671088676
|
|
||||||
flagg0=1207959552
|
|
||||||
flagh0=20
|
|
||||||
flagi0=0
|
|
||||||
tflag0=0
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Attack of the Saucerman
|
|
||||||
path0=D:\Games\Attack of the Saucerman\attack of the saucerman.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=134217730
|
|
||||||
flagg0=134217728
|
|
||||||
flagh0=20
|
|
||||||
flagi0=0
|
|
||||||
tflag0=192
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Beyond Divinity
|
|
||||||
path0=D:\Games\Beyond Divinity\Div.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=134234144
|
|
||||||
flagg0=134217728
|
|
||||||
flagh0=61
|
|
||||||
flagi0=0
|
|
||||||
tflag0=3
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Daikatana
|
|
||||||
path0=D:\Games\Daikatana\daikatana.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=12
|
|
||||||
coord0=0
|
|
||||||
flag0=269492738
|
|
||||||
flagg0=537002497
|
|
||||||
flagh0=20
|
|
||||||
flagi0=0
|
|
||||||
tflag0=2
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Devastation
|
|
||||||
path0=D:\Games\Devastation\System\Devastation.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=134217762
|
|
||||||
flagg0=1207959552
|
|
||||||
flagh0=16
|
|
||||||
flagi0=0
|
|
||||||
tflag0=67
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Diablo
|
|
||||||
path0=D:\Games\Diablo\Diablo.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=1
|
|
||||||
coord0=0
|
|
||||||
flag0=138428450
|
|
||||||
flagg0=1108344848
|
|
||||||
flagh0=20
|
|
||||||
flagi0=0
|
|
||||||
tflag0=0
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=640
|
|
||||||
sizy0=480
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Doom Shareware for Windows 95
|
|
||||||
path0=D:\Games\Doom Shareware for Windows 95\Doom95.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=134217762
|
|
||||||
flagg0=134217728
|
|
||||||
flagh0=20
|
|
||||||
flagi0=0
|
|
||||||
tflag0=0
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Dungeon Keeper II
|
|
||||||
path0=D:\Games\Dungeon Keeper 2\DKII.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=16418
|
|
||||||
flagg0=574619648
|
|
||||||
flagh0=20
|
|
||||||
flagi0=0
|
|
||||||
tflag0=263
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=150
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Dungeon Lords MMXII
|
|
||||||
path0=D:\Games\Dungeon Lords MMXII\dlords2012.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=2
|
|
||||||
flag0=-2013265886
|
|
||||||
flagg0=1207959552
|
|
||||||
flagh0=20
|
|
||||||
flagi0=0
|
|
||||||
tflag0=0
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=GTA 3
|
|
||||||
path0=D:\Games\GTA3\gta3.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=134234150
|
|
||||||
flagg0=1207975952
|
|
||||||
flagh0=176
|
|
||||||
flagi0=0
|
|
||||||
tflag0=2
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
Binary file not shown.
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Grand Prix World
|
|
||||||
path0=D:\Games\Grand Prix World\gpwxp2.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=134283428
|
|
||||||
flagg0=134217728
|
|
||||||
flagh0=29
|
|
||||||
flagi0=0
|
|
||||||
tflag0=3
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Hamsterball
|
|
||||||
path0=D:\Games\Hamsterball\Hamsterball.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=8
|
|
||||||
coord0=0
|
|
||||||
flag0=134217762
|
|
||||||
flagg0=1207959552
|
|
||||||
flagh0=20
|
|
||||||
flagi0=0
|
|
||||||
tflag0=323
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Heroes of Might and Magic IV
|
|
||||||
path0=D:\Games\Heroes of Might and Magic IV\heroes4i.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=134283298
|
|
||||||
flagg0=1211121728
|
|
||||||
flagh0=65556
|
|
||||||
flagi0=0
|
|
||||||
tflag0=3
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Homeworld 2
|
|
||||||
path0=D:\Games\Homeworld2\Bin\Release\Homeworld2.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=671088642
|
|
||||||
flagg0=134217728
|
|
||||||
flagh0=477
|
|
||||||
flagi0=0
|
|
||||||
tflag0=0
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=JetMoto
|
|
||||||
path0=D:\Games\Jet_Moto\JETMOTO.EXE
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=671088674
|
|
||||||
flagg0=1207959552
|
|
||||||
flagh0=20
|
|
||||||
flagi0=0
|
|
||||||
tflag0=64
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Kiss Psycho Circus
|
|
||||||
path0=D:\Games\Kiss\client.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=134217760
|
|
||||||
flagg0=1207959552
|
|
||||||
flagh0=20
|
|
||||||
flagi0=0
|
|
||||||
tflag0=67
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=L'Elefante a Strisce
|
|
||||||
path0=D:\Games\L'Elefante a Strisce\Pilots1I.EXE
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=134217762
|
|
||||||
flagg0=134217728
|
|
||||||
flagh0=20
|
|
||||||
flagi0=0
|
|
||||||
tflag0=64
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Land of the Dead
|
|
||||||
path0=D:\Games\Land of the Dead\System\LOTD.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=134217766
|
|
||||||
flagg0=1207959552
|
|
||||||
flagh0=20
|
|
||||||
flagi0=0
|
|
||||||
tflag0=64
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Mageslayer
|
|
||||||
path0=D:\Games\MAGE\MAGESLAY.EXE
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=134234146
|
|
||||||
flagg0=134217760
|
|
||||||
flagh0=20
|
|
||||||
flagi0=0
|
|
||||||
tflag0=64
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Magic & Mayhem
|
|
||||||
path0=D:\Games\Magic_&_Mayhem\Chaos.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=138428450
|
|
||||||
flagg0=1275068416
|
|
||||||
flagh0=8388628
|
|
||||||
flagi0=0
|
|
||||||
tflag0=259
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Mirror's Edge
|
|
||||||
path0=D:\Games\Mirror's Edge\Binaries\MirrorsEdge.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=-2013265882
|
|
||||||
flagg0=1207959552
|
|
||||||
flagh0=2097172
|
|
||||||
flagi0=0
|
|
||||||
tflag0=15
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=6
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Praetorians
|
|
||||||
path0=D:\Games\Praetorians\Praetorians.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=134217760
|
|
||||||
flagg0=1207959552
|
|
||||||
flagh0=20
|
|
||||||
flagi0=0
|
|
||||||
tflag0=259
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Premier Manager 98
|
|
||||||
path0=D:\Games\Premier Manager 98\MANAGER.EXE
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=671088674
|
|
||||||
flagg0=1207959552
|
|
||||||
flagh0=16
|
|
||||||
flagi0=0
|
|
||||||
tflag0=0
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Primitive Wars
|
|
||||||
path0=D:\Games\Primitive Wars\Pw.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=402653218
|
|
||||||
flagg0=1207959552
|
|
||||||
flagh0=20
|
|
||||||
flagi0=0
|
|
||||||
tflag0=64
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Railroad Tycoon II
|
|
||||||
path0=D:\Games\Railroad.Tycoon.II\RT2.EXE
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=2082
|
|
||||||
flagg0=143654912
|
|
||||||
flagh0=16
|
|
||||||
flagi0=0
|
|
||||||
tflag0=0
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Rayman2Demo.exe
|
|
||||||
path0=D:\Games\Rayman2Demo\Rayman2Demo.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=1
|
|
||||||
coord0=0
|
|
||||||
flag0=939524129
|
|
||||||
flagg0=1207959552
|
|
||||||
flagh0=20
|
|
||||||
flagi0=0
|
|
||||||
tflag0=323
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Space Rangers
|
|
||||||
path0=D:\Games\Space Rangers\Rangers.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=1
|
|
||||||
coord0=0
|
|
||||||
flag0=134234146
|
|
||||||
flagg0=1207959552
|
|
||||||
flagh0=20
|
|
||||||
flagi0=0
|
|
||||||
tflag0=0
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Star Wars Shadow of the Empire (DEMO)
|
|
||||||
path0=D:\Games\shadowsdemo\shadows.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=134217762
|
|
||||||
flagg0=1208483844
|
|
||||||
flagh0=25165844
|
|
||||||
flagi0=0
|
|
||||||
tflag0=275
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Star Wars Shadow of the Empire
|
|
||||||
path0=D:\Games\Star Wars Shadow of the Empire\game\SDATA\SHADOWS.EXE
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=134217762
|
|
||||||
flagg0=1476919296
|
|
||||||
flagh0=25166364
|
|
||||||
flagi0=0
|
|
||||||
tflag0=274
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=StarCraft
|
|
||||||
path0=D:\Games\Starcraft\StarCraft.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=134217762
|
|
||||||
flagg0=136314880
|
|
||||||
flagh0=20
|
|
||||||
flagi0=0
|
|
||||||
tflag0=64
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Talis Gear
|
|
||||||
path0=D:\Games\TailsGear078\DT_MAIN.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=134217760
|
|
||||||
flagg0=1207959552
|
|
||||||
flagh0=20
|
|
||||||
flagi0=0
|
|
||||||
tflag0=0
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Theseus
|
|
||||||
path0=D:\Games\theseus\Theseus.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=8
|
|
||||||
coord0=0
|
|
||||||
flag0=134217730
|
|
||||||
flagg0=1207959552
|
|
||||||
flagh0=20
|
|
||||||
flagi0=0
|
|
||||||
tflag0=0
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Total Annihilation Kingdoms
|
|
||||||
path0=D:\Games\Total Annihilation Kingdoms\Kingdoms.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=134234146
|
|
||||||
flagg0=1073741840
|
|
||||||
flagh0=16
|
|
||||||
flagi0=0
|
|
||||||
tflag0=0
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Vangers
|
|
||||||
path0=D:\Games\Vangers\road.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=402653219
|
|
||||||
flagg0=671088640
|
|
||||||
flagh0=20
|
|
||||||
flagi0=0
|
|
||||||
tflag0=67
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Wargames (demo)
|
|
||||||
path0=D:\Games\Wargames\wargames.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=268435618
|
|
||||||
flagg0=1207959552
|
|
||||||
flagh0=20
|
|
||||||
flagi0=0
|
|
||||||
tflag0=3
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=Warlords 3
|
|
||||||
path0=D:\Games\WARLORDS3\Darklord.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=-2147483102
|
|
||||||
flagg0=269484064
|
|
||||||
flagh0=532
|
|
||||||
flagi0=0
|
|
||||||
tflag0=0
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=0
|
|
||||||
sizy0=0
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
@ -1,24 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=deadrising2otr.exe
|
|
||||||
path0=C:\Program Files (x86)\Capcom\Dead Rising 2 Off The Record\deadrising2otr.exe
|
|
||||||
module0=
|
|
||||||
opengllib0=
|
|
||||||
ver0=0
|
|
||||||
coord0=0
|
|
||||||
flag0=0
|
|
||||||
flagg0=134217728
|
|
||||||
flagh0=16
|
|
||||||
flagi0=0
|
|
||||||
tflag0=3
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
maxfps0=0
|
|
||||||
initts0=0
|
|
139
host/PaletteDialog - Copia.cpp
Normal file
139
host/PaletteDialog - Copia.cpp
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
// StatusDialog.cpp : implementation file
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "dxwndhost.h"
|
||||||
|
#include "PaletteDialog.h"
|
||||||
|
#include "bmpext.h"
|
||||||
|
|
||||||
|
// CPaletteDialog dialog
|
||||||
|
|
||||||
|
IMPLEMENT_DYNAMIC(CPaletteDialog, CDialog)
|
||||||
|
|
||||||
|
CPaletteDialog::CPaletteDialog(CWnd* pParent /*=NULL*/)
|
||||||
|
: CDialog(CPaletteDialog::IDD, pParent)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
CPaletteDialog::~CPaletteDialog()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPaletteDialog::DoDataExchange(CDataExchange* pDX)
|
||||||
|
{
|
||||||
|
CDialog::DoDataExchange(pDX);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN_MESSAGE_MAP(CPaletteDialog, CDialog)
|
||||||
|
ON_WM_TIMER()
|
||||||
|
END_MESSAGE_MAP()
|
||||||
|
|
||||||
|
#define IDPaletteTIMER 2
|
||||||
|
|
||||||
|
// CPaletteDialog message handlers
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
void CPaletteDialog::OnTimer(UINT_PTR nIDEvent)
|
||||||
|
{
|
||||||
|
DXWNDSTATUS DxWndStatus;
|
||||||
|
int DxStatus;
|
||||||
|
TARGETMAP *Target;
|
||||||
|
CBitmap *cPal, *cMiniPal;
|
||||||
|
extern PRIVATEMAP *pTitles;
|
||||||
|
extern TARGETMAP *pTargets;
|
||||||
|
RECT Rect;
|
||||||
|
int h, w;
|
||||||
|
//CBitmap cMiniPal;
|
||||||
|
//cMiniPal.CreateCompatibleBitmap(this->GetDC(), 16, 16);
|
||||||
|
|
||||||
|
CWnd *Pix;
|
||||||
|
|
||||||
|
DxStatus=GetHookStatus(&DxWndStatus);
|
||||||
|
this->GetDC()->GetWindow()->GetWindowRect(&Rect);
|
||||||
|
h=Rect.bottom - Rect.top;
|
||||||
|
w=Rect.right - Rect.left;
|
||||||
|
cPal=(CBitmap *)this->GetDlgItem(IDC_PALETTECOLORS);
|
||||||
|
Pix=(CWnd *)this->GetDlgItem(IDC_PALETTEMAP);
|
||||||
|
|
||||||
|
if(DxStatus==DXW_RUNNING){
|
||||||
|
for(int row=0; row<16; row++)
|
||||||
|
for(int col=0; col<16; col++){
|
||||||
|
COLORREF color;
|
||||||
|
PALETTEENTRY *pe = &DxWndStatus.Palette[16*row+col];
|
||||||
|
//color=pe->peRed | (pe->peGreen << 8) | (pe->peBlue << 16);
|
||||||
|
color=RGB(pe->peRed, pe->peGreen, pe->peBlue);
|
||||||
|
|
||||||
|
//Pix->GetDC()->SetPixel(row, col, color);
|
||||||
|
//this->GetDC()->StretchBlt(0, 0, w, h, Pix->GetDC(), 0, 0, 16, 16, SRCCOPY);
|
||||||
|
|
||||||
|
this->GetDC()->SetPixel(row, col, color);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
this->GetDC()->StretchBlt(0, 0, w, h, NULL, 0, 0, 0, 0, WHITENESS);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
void CPaletteDialog::OnTimer(UINT_PTR nIDEvent)
|
||||||
|
{
|
||||||
|
DXWNDSTATUS DxWndStatus;
|
||||||
|
int DxStatus;
|
||||||
|
extern PRIVATEMAP *pTitles;
|
||||||
|
extern TARGETMAP *pTargets;
|
||||||
|
RECT Rect;
|
||||||
|
int h, w;
|
||||||
|
|
||||||
|
CBitmap cBmp;
|
||||||
|
CBitmap* pBitmap;
|
||||||
|
CDC cMemDC;
|
||||||
|
cMemDC.CreateCompatibleDC(this->GetDC()); // Create the memory DC.
|
||||||
|
|
||||||
|
CBitmap* pOld = cMemDC.SelectObject(&cBmp);
|
||||||
|
pBitmap = cMemDC.SelectObject(pOld);
|
||||||
|
|
||||||
|
DxStatus=GetHookStatus(&DxWndStatus);
|
||||||
|
this->GetDC()->GetWindow()->GetWindowRect(&Rect);
|
||||||
|
h=Rect.bottom - Rect.top;
|
||||||
|
w=Rect.right - Rect.left;
|
||||||
|
|
||||||
|
CDib dib;
|
||||||
|
dib.ReadFromResource(IDB_PALETTE);
|
||||||
|
if(DxStatus==DXW_RUNNING){
|
||||||
|
for(int row=0; row<dib.Height(); row++){
|
||||||
|
for(int col=0; col<dib.Width(); col++){
|
||||||
|
PALETTEENTRY *pe = &DxWndStatus.Palette[16*row+col];
|
||||||
|
RGBQUAD rgbq;
|
||||||
|
rgbq.rgbBlue=pe->peBlue;
|
||||||
|
rgbq.rgbGreen=pe->peGreen;
|
||||||
|
rgbq.rgbRed=pe->peRed;
|
||||||
|
rgbq.rgbReserved=0;
|
||||||
|
dib.SetPixel(col, row, rgbq);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dib.Draw(this->GetDC(), CRect(0, 0, w, h), CRect(0, 0, 16, 16));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
BOOL CPaletteDialog::OnInitDialog()
|
||||||
|
{
|
||||||
|
CDialog::OnInitDialog();
|
||||||
|
|
||||||
|
SetTimer(IDPaletteTIMER, 1000, NULL);
|
||||||
|
|
||||||
|
// TODO: Add extra initialization here
|
||||||
|
|
||||||
|
return TRUE; // return TRUE unless you set the focus to a control
|
||||||
|
// EXCEPTION: OCX Property Pages should return FALSE
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPaletteDialog::OnOK()
|
||||||
|
{
|
||||||
|
// TODO: Add your specialized code here and/or call the base class
|
||||||
|
|
||||||
|
KillTimer(IDPaletteTIMER);
|
||||||
|
// stop timer
|
||||||
|
|
||||||
|
CDialog::OnOK();
|
||||||
|
}
|
82
host/PaletteDialog.cpp
Normal file
82
host/PaletteDialog.cpp
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
// StatusDialog.cpp : implementation file
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "dxwndhost.h"
|
||||||
|
#include "PaletteDialog.h"
|
||||||
|
#include "bmpext.h"
|
||||||
|
|
||||||
|
// CPaletteDialog dialog
|
||||||
|
|
||||||
|
IMPLEMENT_DYNAMIC(CPaletteDialog, CDialog)
|
||||||
|
|
||||||
|
CPaletteDialog::CPaletteDialog(CWnd* pParent /*=NULL*/)
|
||||||
|
: CDialog(CPaletteDialog::IDD, pParent)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
CPaletteDialog::~CPaletteDialog()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPaletteDialog::DoDataExchange(CDataExchange* pDX)
|
||||||
|
{
|
||||||
|
CDialog::DoDataExchange(pDX);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN_MESSAGE_MAP(CPaletteDialog, CDialog)
|
||||||
|
ON_WM_TIMER()
|
||||||
|
END_MESSAGE_MAP()
|
||||||
|
|
||||||
|
#define IDPaletteTIMER 2
|
||||||
|
|
||||||
|
// CPaletteDialog message handlers
|
||||||
|
|
||||||
|
void CPaletteDialog::OnTimer(UINT_PTR nIDEvent)
|
||||||
|
{
|
||||||
|
DXWNDSTATUS DxWndStatus;
|
||||||
|
int DxStatus;
|
||||||
|
//extern PRIVATEMAP *pTitles;
|
||||||
|
extern TARGETMAP *pTargets;
|
||||||
|
RECT Rect;
|
||||||
|
int h, w;
|
||||||
|
|
||||||
|
DxStatus=GetHookStatus(&DxWndStatus);
|
||||||
|
this->GetDC()->GetWindow()->GetClientRect(&Rect);
|
||||||
|
h=Rect.bottom - Rect.top;
|
||||||
|
w=Rect.right - Rect.left;
|
||||||
|
|
||||||
|
CDib dib;
|
||||||
|
dib.ReadFromResource(IDB_PALETTE);
|
||||||
|
if(DxStatus==DXW_RUNNING){
|
||||||
|
for(int row=0; row<16; row++){
|
||||||
|
for(int col=0; col<16; col++){
|
||||||
|
PALETTEENTRY *pe = &DxWndStatus.Palette[16*row+col];
|
||||||
|
RGBQUAD rgbq;
|
||||||
|
rgbq.rgbBlue=pe->peBlue;
|
||||||
|
rgbq.rgbGreen=pe->peGreen;
|
||||||
|
rgbq.rgbRed=pe->peRed;
|
||||||
|
rgbq.rgbReserved=0;
|
||||||
|
dib.SetPixel(col, row, rgbq);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dib.Draw(this->GetDC(), CRect(0, 0, w, h), CRect(0, 0, 16, 16));
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CPaletteDialog::OnInitDialog()
|
||||||
|
{
|
||||||
|
CDialog::OnInitDialog();
|
||||||
|
SetTimer(IDPaletteTIMER, 200, NULL);
|
||||||
|
return TRUE; // return TRUE unless you set the focus to a control
|
||||||
|
// EXCEPTION: OCX Property Pages should return FALSE
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPaletteDialog::OnOK()
|
||||||
|
{
|
||||||
|
// TODO: Add your specialized code here and/or call the base class
|
||||||
|
KillTimer(IDPaletteTIMER);
|
||||||
|
// stop timer
|
||||||
|
CDialog::OnOK();
|
||||||
|
}
|
27
host/PaletteDialog.h
Normal file
27
host/PaletteDialog.h
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
// CPaletteDialog dialog
|
||||||
|
|
||||||
|
class CPaletteDialog : public CDialog
|
||||||
|
{
|
||||||
|
DECLARE_DYNAMIC(CPaletteDialog)
|
||||||
|
|
||||||
|
public:
|
||||||
|
CPaletteDialog(CWnd* pParent = NULL); // standard constructor
|
||||||
|
virtual ~CPaletteDialog();
|
||||||
|
|
||||||
|
// Dialog Data
|
||||||
|
enum { IDD = IDD_PALETTE };
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
|
||||||
|
|
||||||
|
DECLARE_MESSAGE_MAP()
|
||||||
|
public:
|
||||||
|
afx_msg void OnTimer(UINT_PTR nIDEvent);
|
||||||
|
public:
|
||||||
|
virtual BOOL OnInitDialog();
|
||||||
|
protected:
|
||||||
|
virtual void OnOK();
|
||||||
|
};
|
@ -32,11 +32,13 @@
|
|||||||
#define IDD_TAB_TIMING 156
|
#define IDD_TAB_TIMING 156
|
||||||
#define IDD_TAB_WINDOW 157
|
#define IDD_TAB_WINDOW 157
|
||||||
#define IDD_TAB_EMPTY 158
|
#define IDD_TAB_EMPTY 158
|
||||||
|
#define IDB_PALETTE 158
|
||||||
#define IDD_TAB_OPENGL 159
|
#define IDD_TAB_OPENGL 159
|
||||||
#define IDD_TAB_COMPAT 160
|
#define IDD_TAB_COMPAT 160
|
||||||
#define IDD_TAB_GDI 161
|
#define IDD_TAB_GDI 161
|
||||||
#define IDD_TAB_COLOR 162
|
#define IDD_TAB_COLOR 162
|
||||||
#define IDD_TAB_DEBUG 163
|
#define IDD_TAB_DEBUG 163
|
||||||
|
#define IDD_PALETTE 164
|
||||||
#define IDC_AUTO 300
|
#define IDC_AUTO 300
|
||||||
#define IDC_DIRECTX1 301
|
#define IDC_DIRECTX1 301
|
||||||
#define IDC_DIRECTX7 302
|
#define IDC_DIRECTX7 302
|
||||||
@ -135,6 +137,7 @@
|
|||||||
#define IDC_WINDOWIZE 1091
|
#define IDC_WINDOWIZE 1091
|
||||||
#define IDC_NOBANNER 1092
|
#define IDC_NOBANNER 1092
|
||||||
#define IDC_STARTDEBUG 1093
|
#define IDC_STARTDEBUG 1093
|
||||||
|
#define IDC_PALETTECOLORS 1093
|
||||||
#define IDC_WIREFRAME 1094
|
#define IDC_WIREFRAME 1094
|
||||||
#define IDC_DISABLEGAMMARAMP 1095
|
#define IDC_DISABLEGAMMARAMP 1095
|
||||||
#define IDC_FORCEWINRESIZE 1096
|
#define IDC_FORCEWINRESIZE 1096
|
||||||
@ -145,11 +148,7 @@
|
|||||||
#define IDC_SUPPRESSD3DEXT 1101
|
#define IDC_SUPPRESSD3DEXT 1101
|
||||||
#define IDC_FULLRECTBLT 1102
|
#define IDC_FULLRECTBLT 1102
|
||||||
#define IDC_TIMESPEED 1103
|
#define IDC_TIMESPEED 1103
|
||||||
#define IDC_FULLRECTBLT2 1103
|
|
||||||
#define IDC_SURFACEWARN 1103
|
|
||||||
#define IDC_HOOKDLLS 1104
|
#define IDC_HOOKDLLS 1104
|
||||||
#define IDC_ANALITICALMODE 1104
|
|
||||||
#define IDC_ANALYTICMODE 1104
|
|
||||||
#define IDC_HOOKENABLED 1105
|
#define IDC_HOOKENABLED 1105
|
||||||
#define IDC_DESKTOPWORKAREA 1106
|
#define IDC_DESKTOPWORKAREA 1106
|
||||||
#define IDC_DESKTOPFULL 1107
|
#define IDC_DESKTOPFULL 1107
|
||||||
@ -177,6 +176,17 @@
|
|||||||
#define IDC_FILTERMESSAGES 1129
|
#define IDC_FILTERMESSAGES 1129
|
||||||
#define IDC_PEEKALLMESSAGES 1130
|
#define IDC_PEEKALLMESSAGES 1130
|
||||||
#define IDC_TRACEHOOKS 1131
|
#define IDC_TRACEHOOKS 1131
|
||||||
|
#define IDC_FULLRECTBLT2 1132
|
||||||
|
#define IDC_SURFACEWARN 1133
|
||||||
|
#define IDC_ANALITICALMODE 1134
|
||||||
|
#define IDC_ANALYTICMODE 1135
|
||||||
|
#define IDC_CAPMASK 1136
|
||||||
|
#define IDC_FORCESHEL 1137
|
||||||
|
#define IDC_COLORFIX 1138
|
||||||
|
#define IDC_NODDRAWBLIT 1139
|
||||||
|
#define IDC_NODDRAWBLT 1139
|
||||||
|
#define IDC_NODDRAWFLIP 1140
|
||||||
|
#define IDC_NOGDIBLT 1141
|
||||||
#define ID_MODIFY 32771
|
#define ID_MODIFY 32771
|
||||||
#define ID_DELETE 32772
|
#define ID_DELETE 32772
|
||||||
#define ID_ADD 32773
|
#define ID_ADD 32773
|
||||||
@ -218,15 +228,16 @@
|
|||||||
#define ID_INDEX0_EXPORT 32821
|
#define ID_INDEX0_EXPORT 32821
|
||||||
#define ID_PEXPORT 32822
|
#define ID_PEXPORT 32822
|
||||||
#define ID_PKILL 32823
|
#define ID_PKILL 32823
|
||||||
|
#define ID_VIEW_PALETTE 32825
|
||||||
|
|
||||||
// Next default values for new objects
|
// Next default values for new objects
|
||||||
//
|
//
|
||||||
#ifdef APSTUDIO_INVOKED
|
#ifdef APSTUDIO_INVOKED
|
||||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||||
#define _APS_3D_CONTROLS 1
|
#define _APS_3D_CONTROLS 1
|
||||||
#define _APS_NEXT_RESOURCE_VALUE 156
|
#define _APS_NEXT_RESOURCE_VALUE 159
|
||||||
#define _APS_NEXT_COMMAND_VALUE 32825
|
#define _APS_NEXT_COMMAND_VALUE 32826
|
||||||
#define _APS_NEXT_CONTROL_VALUE 1092
|
#define _APS_NEXT_CONTROL_VALUE 1095
|
||||||
#define _APS_NEXT_SYMED_VALUE 101
|
#define _APS_NEXT_SYMED_VALUE 101
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
@ -38,6 +38,7 @@ void CStatusDialog::OnTimer(UINT_PTR nIDEvent)
|
|||||||
int IconId;
|
int IconId;
|
||||||
LPCSTR Status;
|
LPCSTR Status;
|
||||||
char sMsg[1024];
|
char sMsg[1024];
|
||||||
|
char sMsg2[1024];
|
||||||
char sMsgBuf[80+1];
|
char sMsgBuf[80+1];
|
||||||
char DllVersion[21];
|
char DllVersion[21];
|
||||||
DXWNDSTATUS DxWndStatus;
|
DXWNDSTATUS DxWndStatus;
|
||||||
@ -45,8 +46,11 @@ void CStatusDialog::OnTimer(UINT_PTR nIDEvent)
|
|||||||
extern TARGETMAP *pTargets;
|
extern TARGETMAP *pTargets;
|
||||||
TARGETMAP *Target;
|
TARGETMAP *Target;
|
||||||
extern char *GetTSCaption(int);
|
extern char *GetTSCaption(int);
|
||||||
|
int iPixelFormat;
|
||||||
|
PIXELFORMATDESCRIPTOR pfd;
|
||||||
|
|
||||||
CDialog::OnTimer(nIDEvent);
|
CDialog::OnTimer(nIDEvent);
|
||||||
|
GetDllVersion(DllVersion);
|
||||||
DxStatus=GetHookStatus(&DxWndStatus);
|
DxStatus=GetHookStatus(&DxWndStatus);
|
||||||
switch (DxStatus){
|
switch (DxStatus){
|
||||||
case DXW_IDLE: IconId=IDI_DXIDLE; Status="DISABLED"; break;
|
case DXW_IDLE: IconId=IDI_DXIDLE; Status="DISABLED"; break;
|
||||||
@ -55,14 +59,29 @@ void CStatusDialog::OnTimer(UINT_PTR nIDEvent)
|
|||||||
default: IconId=IDI_DXIDLE; Status="???"; break;
|
default: IconId=IDI_DXIDLE; Status="???"; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
GetDllVersion(DllVersion);
|
// get the current pixel format index
|
||||||
|
//HDC myDC = this->GetDC()->m_hDC;
|
||||||
|
//iPixelFormat = GetPixelFormat(myDC);
|
||||||
|
iPixelFormat = 1;
|
||||||
|
HDC myDC = ::GetDC(::GetForegroundWindow());
|
||||||
|
//iPixelFormat = ::GetPixelFormat(myDC);
|
||||||
|
|
||||||
|
// obtain a detailed description of that pixel format
|
||||||
|
memset((void *)&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR));
|
||||||
|
pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
|
||||||
|
DescribePixelFormat(myDC, iPixelFormat, sizeof(PIXELFORMATDESCRIPTOR), &pfd);
|
||||||
|
|
||||||
|
sprintf_s(sMsg, 1024,
|
||||||
|
"DxWnd %s\n"
|
||||||
|
"PixelFormat=%d DEPTH=%d RGBA=(%d,%d,%d,%d)\n"
|
||||||
|
"Hook status: %s",
|
||||||
|
DllVersion, iPixelFormat, pfd.cColorBits, pfd.cRedBits, pfd.cGreenBits, pfd.cBlueBits, pfd.cAlphaBits, Status);
|
||||||
|
|
||||||
if(DxStatus==DXW_RUNNING){
|
if(DxStatus==DXW_RUNNING){
|
||||||
|
|
||||||
Target=&pTargets[DxWndStatus.TaskIdx];
|
Target=&pTargets[DxWndStatus.TaskIdx];
|
||||||
|
|
||||||
sprintf_s(sMsg, 1024,
|
sprintf_s(sMsg2, 1024,
|
||||||
"DxWnd %s\nHook status: %s\n"
|
|
||||||
"Running \"%s\"\nScreen = (%dx%d) %dBPP\n"
|
|
||||||
"FullScreen = %s\nDX version = %d\n"
|
"FullScreen = %s\nDX version = %d\n"
|
||||||
"Logging = %s\n"
|
"Logging = %s\n"
|
||||||
"Cursor = (%d,%d)",
|
"Cursor = (%d,%d)",
|
||||||
@ -72,6 +91,7 @@ void CStatusDialog::OnTimer(UINT_PTR nIDEvent)
|
|||||||
DxWndStatus.IsFullScreen ? "Yes":"No", DxWndStatus.DXVersion,
|
DxWndStatus.IsFullScreen ? "Yes":"No", DxWndStatus.DXVersion,
|
||||||
DxWndStatus.isLogging?"ON":"OFF",
|
DxWndStatus.isLogging?"ON":"OFF",
|
||||||
DxWndStatus.CursorX, DxWndStatus.CursorY);
|
DxWndStatus.CursorX, DxWndStatus.CursorY);
|
||||||
|
strcat(sMsg, sMsg2);
|
||||||
if(Target->flags2 & (SHOWFPS|SHOWFPSOVERLAY)){
|
if(Target->flags2 & (SHOWFPS|SHOWFPSOVERLAY)){
|
||||||
sprintf(sMsgBuf, "\nFPS = %d", DxWndStatus.FPSCount);
|
sprintf(sMsgBuf, "\nFPS = %d", DxWndStatus.FPSCount);
|
||||||
strcat(sMsg, sMsgBuf);
|
strcat(sMsg, sMsgBuf);
|
||||||
@ -83,8 +103,6 @@ void CStatusDialog::OnTimer(UINT_PTR nIDEvent)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
sprintf_s(sMsg, 1024, "DxWnd %s\nHook status: %s", DllVersion, Status);
|
|
||||||
|
|
||||||
this->SetDlgItemTextA(IDC_STATUSINFO, sMsg);
|
this->SetDlgItemTextA(IDC_STATUSINFO, sMsg);
|
||||||
}
|
}
|
||||||
|
@ -35,6 +35,10 @@ void CTabDebug::DoDataExchange(CDataExchange* pDX)
|
|||||||
DDX_Check(pDX, IDC_MARKBLIT, cTarget->m_MarkBlit);
|
DDX_Check(pDX, IDC_MARKBLIT, cTarget->m_MarkBlit);
|
||||||
DDX_Check(pDX, IDC_ANALYTICMODE, cTarget->m_AnalyticMode);
|
DDX_Check(pDX, IDC_ANALYTICMODE, cTarget->m_AnalyticMode);
|
||||||
DDX_Check(pDX, IDC_SURFACEWARN, cTarget->m_SurfaceWarn);
|
DDX_Check(pDX, IDC_SURFACEWARN, cTarget->m_SurfaceWarn);
|
||||||
|
DDX_Check(pDX, IDC_CAPMASK, cTarget->m_CapMask);
|
||||||
|
DDX_Check(pDX, IDC_NODDRAWBLT, cTarget->m_NoDDRAWBlt);
|
||||||
|
DDX_Check(pDX, IDC_NODDRAWFLIP, cTarget->m_NoDDRAWFlip);
|
||||||
|
DDX_Check(pDX, IDC_NOGDIBLT, cTarget->m_NoGDIBlt);
|
||||||
}
|
}
|
||||||
|
|
||||||
BEGIN_MESSAGE_MAP(CTabDebug, CDialog)
|
BEGIN_MESSAGE_MAP(CTabDebug, CDialog)
|
||||||
|
@ -38,6 +38,8 @@ void CTabDirectX::DoDataExchange(CDataExchange* pDX)
|
|||||||
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_DISABLEHAL, cTarget->m_DisableHAL);
|
||||||
|
DDX_Check(pDX, IDC_FORCESHEL, cTarget->m_ForcesHEL);
|
||||||
|
DDX_Check(pDX, IDC_COLORFIX, cTarget->m_ColorFix);
|
||||||
//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);
|
||||||
|
@ -38,6 +38,8 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
|
|||||||
m_SuppressD3DExt = FALSE;
|
m_SuppressD3DExt = FALSE;
|
||||||
m_SetCompatibility = TRUE;
|
m_SetCompatibility = TRUE;
|
||||||
m_DisableHAL = FALSE;
|
m_DisableHAL = FALSE;
|
||||||
|
m_ForcesHEL = FALSE;
|
||||||
|
m_ColorFix = FALSE;
|
||||||
m_LockSysColors = FALSE;
|
m_LockSysColors = FALSE;
|
||||||
m_ForceYUVtoRGB = FALSE;
|
m_ForceYUVtoRGB = FALSE;
|
||||||
m_ForceRGBtoYUV = FALSE;
|
m_ForceRGBtoYUV = FALSE;
|
||||||
@ -51,7 +53,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
|
|||||||
m_Windowize = TRUE; // default true !!
|
m_Windowize = TRUE; // default true !!
|
||||||
m_HookDLLs = TRUE; // default true !!
|
m_HookDLLs = TRUE; // default true !!
|
||||||
m_HookEnabled = TRUE; // default true !!
|
m_HookEnabled = TRUE; // default true !!
|
||||||
m_EmulateRegistry = FALSE; // default true !!
|
m_EmulateRegistry = FALSE;
|
||||||
m_FullScreenOnly = FALSE;
|
m_FullScreenOnly = FALSE;
|
||||||
m_FilterMessages = FALSE;
|
m_FilterMessages = FALSE;
|
||||||
m_PeekAllMessages = FALSE;
|
m_PeekAllMessages = FALSE;
|
||||||
@ -109,6 +111,10 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
|
|||||||
m_FakeVersion = FALSE;
|
m_FakeVersion = FALSE;
|
||||||
m_FullRectBlt = FALSE;
|
m_FullRectBlt = FALSE;
|
||||||
m_SurfaceWarn = FALSE;
|
m_SurfaceWarn = FALSE;
|
||||||
|
m_CapMask = FALSE;
|
||||||
|
m_NoDDRAWBlt = FALSE;
|
||||||
|
m_NoDDRAWFlip = FALSE;
|
||||||
|
m_NoGDIBlt = FALSE;
|
||||||
m_AnalyticMode = FALSE;
|
m_AnalyticMode = FALSE;
|
||||||
m_NoPaletteUpdate = FALSE;
|
m_NoPaletteUpdate = FALSE;
|
||||||
m_WireFrame = FALSE;
|
m_WireFrame = FALSE;
|
||||||
|
@ -105,6 +105,10 @@ public:
|
|||||||
BOOL m_FakeVersion;
|
BOOL m_FakeVersion;
|
||||||
BOOL m_FullRectBlt;
|
BOOL m_FullRectBlt;
|
||||||
BOOL m_SurfaceWarn;
|
BOOL m_SurfaceWarn;
|
||||||
|
BOOL m_CapMask;
|
||||||
|
BOOL m_NoDDRAWBlt;
|
||||||
|
BOOL m_NoDDRAWFlip;
|
||||||
|
BOOL m_NoGDIBlt;
|
||||||
BOOL m_AnalyticMode;
|
BOOL m_AnalyticMode;
|
||||||
BOOL m_NoPaletteUpdate;
|
BOOL m_NoPaletteUpdate;
|
||||||
BOOL m_LimitResources;
|
BOOL m_LimitResources;
|
||||||
@ -114,6 +118,8 @@ public:
|
|||||||
BOOL m_SuppressIME;
|
BOOL m_SuppressIME;
|
||||||
BOOL m_SetCompatibility;
|
BOOL m_SetCompatibility;
|
||||||
BOOL m_DisableHAL;
|
BOOL m_DisableHAL;
|
||||||
|
BOOL m_ForcesHEL;
|
||||||
|
BOOL m_ColorFix;
|
||||||
BOOL m_LockSysColors;
|
BOOL m_LockSysColors;
|
||||||
BOOL m_SaveCaps;
|
BOOL m_SaveCaps;
|
||||||
BOOL m_SingleProcAffinity;
|
BOOL m_SingleProcAffinity;
|
||||||
|
96
host/bmpext.h
Normal file
96
host/bmpext.h
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "afxtempl.h"
|
||||||
|
|
||||||
|
//MakeRgn helper data definition
|
||||||
|
typedef CTypedPtrList< CPtrList, LPRECT > RECTLIST;
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
// DD Bitmap draw extensions class
|
||||||
|
class AFX_EXT_CLASS CDDBDrawEx
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CDDBDrawEx(CDC* pDC, CBitmap* pbmSrc, CBitmap* pbmBack = NULL);
|
||||||
|
virtual ~CDDBDrawEx();
|
||||||
|
|
||||||
|
void Fill(CRect& rDest);
|
||||||
|
void Draw(CRect& rDest, CPoint& pntSrc);
|
||||||
|
void DrawTransparent(CRect& rDest, CPoint& pntSrc, COLORREF crMask );
|
||||||
|
HRGN MakeRgn(COLORREF cTransparentColor = 0, COLORREF cTolerance = 0x101010);
|
||||||
|
|
||||||
|
private:
|
||||||
|
CDC* m_pDC;
|
||||||
|
CBitmap* m_pbmSrc;
|
||||||
|
CBitmap* m_pbmBack;
|
||||||
|
|
||||||
|
LPRGNDATA RectList2RGNDATA( RECTLIST& rl, RECT& rBound, int& iByteCount );
|
||||||
|
};
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
// DIB support classes
|
||||||
|
class CDibException
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
//exception types: not enough memory, operation not supported, invalid pixel position
|
||||||
|
enum {E_NOMEM, E_NOTSUPP, E_INVPOS};
|
||||||
|
CDibException( int iReason ) : m_iReason(iReason) {}
|
||||||
|
|
||||||
|
static void Throw( int iReason ){ throw new CDibException(iReason); }
|
||||||
|
|
||||||
|
public:
|
||||||
|
int m_iReason;
|
||||||
|
};
|
||||||
|
|
||||||
|
class AFX_EXT_CLASS CDib
|
||||||
|
{
|
||||||
|
// Constructors
|
||||||
|
public:
|
||||||
|
CDib();
|
||||||
|
virtual ~CDib();
|
||||||
|
|
||||||
|
// Attributes
|
||||||
|
protected:
|
||||||
|
LPBYTE m_pBits;
|
||||||
|
LPBITMAPINFO m_pBMI;
|
||||||
|
|
||||||
|
public:
|
||||||
|
CPalette* m_pPalette;
|
||||||
|
|
||||||
|
public:
|
||||||
|
DWORD Width() const;
|
||||||
|
DWORD Height() const;
|
||||||
|
WORD NumColors( BITMAPINFOHEADER& bmiHeader ) const;
|
||||||
|
BOOL IsValid() const;
|
||||||
|
|
||||||
|
void SetPixel( int iX, int iY, RGBQUAD& rgbPixel );
|
||||||
|
RGBQUAD GetPixel(int iX, int iY);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void AssertPosition( int iX, int iY );
|
||||||
|
DWORD PaletteSize() const;
|
||||||
|
|
||||||
|
// Operations
|
||||||
|
public:
|
||||||
|
BOOL Draw(CDC*, CRect& rectDC, CRect& rectDIB) const;
|
||||||
|
|
||||||
|
DWORD Save(CFile& file) const;
|
||||||
|
DWORD Read(CFile& file, BOOL bFromResource = FALSE );
|
||||||
|
DWORD ReadFromResource(UINT nResID);
|
||||||
|
|
||||||
|
void Invalidate();
|
||||||
|
|
||||||
|
// Implementation
|
||||||
|
protected:
|
||||||
|
BOOL CreatePalette();
|
||||||
|
|
||||||
|
void Free();
|
||||||
|
|
||||||
|
public:
|
||||||
|
HBITMAP CreateDDBitmap(CDC* pDC);
|
||||||
|
HBITMAP CreateDDBitmap( HDC hDC );
|
||||||
|
BOOL Compress(CDC* pDC, BOOL bCompress );
|
||||||
|
|
||||||
|
protected:
|
||||||
|
CDib& operator = (CDib& dib);
|
||||||
|
};
|
||||||
|
|
822
host/cdib.cpp
Normal file
822
host/cdib.cpp
Normal file
@ -0,0 +1,822 @@
|
|||||||
|
// cdib.cpp
|
||||||
|
// new version for WIN32
|
||||||
|
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "cdib.h"
|
||||||
|
|
||||||
|
#ifdef _DEBUG
|
||||||
|
#define new DEBUG_NEW
|
||||||
|
#undef THIS_FILE
|
||||||
|
static char THIS_FILE[] = __FILE__;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
IMPLEMENT_SERIAL(CDib, CObject, 0);
|
||||||
|
|
||||||
|
CDib::CDib()
|
||||||
|
{
|
||||||
|
|
||||||
|
m_hFile = NULL;
|
||||||
|
|
||||||
|
m_hBitmap = NULL;
|
||||||
|
|
||||||
|
m_hPalette = NULL;
|
||||||
|
|
||||||
|
m_nBmihAlloc = m_nImageAlloc = noAlloc;
|
||||||
|
|
||||||
|
Empty();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CDib::CDib(CSize size, int nBitCount)
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
m_hFile = NULL;
|
||||||
|
|
||||||
|
m_hBitmap = NULL;
|
||||||
|
|
||||||
|
m_hPalette = NULL;
|
||||||
|
|
||||||
|
m_nBmihAlloc = m_nImageAlloc = noAlloc;
|
||||||
|
|
||||||
|
Empty();
|
||||||
|
|
||||||
|
ComputePaletteSize(nBitCount);
|
||||||
|
|
||||||
|
m_lpBMIH = (LPBITMAPINFOHEADER) new
|
||||||
|
|
||||||
|
char[sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries];
|
||||||
|
|
||||||
|
m_nBmihAlloc = crtAlloc;
|
||||||
|
|
||||||
|
m_lpBMIH->biSize = sizeof(BITMAPINFOHEADER);
|
||||||
|
|
||||||
|
m_lpBMIH->biWidth = size.cx;
|
||||||
|
|
||||||
|
m_lpBMIH->biHeight = size.cy;
|
||||||
|
|
||||||
|
m_lpBMIH->biPlanes = 1;
|
||||||
|
|
||||||
|
m_lpBMIH->biBitCount = nBitCount;
|
||||||
|
|
||||||
|
m_lpBMIH->biCompression = BI_RGB;
|
||||||
|
|
||||||
|
m_lpBMIH->biSizeImage = 0;
|
||||||
|
|
||||||
|
m_lpBMIH->biXPelsPerMeter = 0;
|
||||||
|
|
||||||
|
m_lpBMIH->biYPelsPerMeter = 0;
|
||||||
|
|
||||||
|
m_lpBMIH->biClrUsed = m_nColorTableEntries;
|
||||||
|
|
||||||
|
m_lpBMIH->biClrImportant = m_nColorTableEntries;
|
||||||
|
|
||||||
|
ComputeMetrics();
|
||||||
|
|
||||||
|
memset(m_lpvColorTable, 0, sizeof(RGBQUAD) * m_nColorTableEntries);
|
||||||
|
|
||||||
|
m_lpImage = NULL; // no data yet
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CDib::~CDib()
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
Empty();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CSize CDib::GetDimensions()
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
if(m_lpBMIH == NULL) return CSize(0, 0);
|
||||||
|
|
||||||
|
return CSize((int) m_lpBMIH->biWidth, (int) m_lpBMIH->biHeight);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
BOOL CDib::AttachMapFile(const char* strPathname, BOOL bShare) // for reading
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
// if we open the same file twice, Windows treats it as 2 separate files
|
||||||
|
|
||||||
|
// doesn't work with rare BMP files where # palette entries > biClrUsed
|
||||||
|
|
||||||
|
HANDLE hFile = ::CreateFile(strPathname, GENERIC_WRITE | GENERIC_READ,
|
||||||
|
|
||||||
|
bShare ? FILE_SHARE_READ : 0,
|
||||||
|
|
||||||
|
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||||
|
|
||||||
|
ASSERT(hFile != INVALID_HANDLE_VALUE);
|
||||||
|
|
||||||
|
DWORD dwFileSize = ::GetFileSize(hFile, NULL);
|
||||||
|
|
||||||
|
HANDLE hMap = ::CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, NULL);
|
||||||
|
|
||||||
|
DWORD dwErr = ::GetLastError();
|
||||||
|
|
||||||
|
if(hMap == NULL) {
|
||||||
|
|
||||||
|
AfxMessageBox("Empty bitmap file");
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
LPVOID lpvFile = ::MapViewOfFile(hMap, FILE_MAP_WRITE, 0, 0, 0); // map whole file
|
||||||
|
|
||||||
|
ASSERT(lpvFile != NULL);
|
||||||
|
|
||||||
|
if(((LPBITMAPFILEHEADER) lpvFile)->bfType != 0x4d42) {
|
||||||
|
|
||||||
|
AfxMessageBox("Invalid bitmap file");
|
||||||
|
|
||||||
|
DetachMapFile();
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
AttachMemory((LPBYTE) lpvFile + sizeof(BITMAPFILEHEADER));
|
||||||
|
|
||||||
|
m_lpvFile = lpvFile;
|
||||||
|
|
||||||
|
m_hFile = hFile;
|
||||||
|
|
||||||
|
m_hMap = hMap;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
BOOL CDib::CopyToMapFile(const char* strPathname)
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
// copies DIB to a new file, releases prior pointers
|
||||||
|
|
||||||
|
// if you previously used CreateSection, the HBITMAP will be NULL (and unusable)
|
||||||
|
|
||||||
|
BITMAPFILEHEADER bmfh;
|
||||||
|
|
||||||
|
bmfh.bfType = 0x4d42; // 'BM'
|
||||||
|
|
||||||
|
bmfh.bfSize = m_dwSizeImage + sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries + sizeof(BITMAPFILEHEADER);
|
||||||
|
|
||||||
|
// meaning of bfSize open to interpretation
|
||||||
|
|
||||||
|
bmfh.bfReserved1 = bmfh.bfReserved2 = 0;
|
||||||
|
|
||||||
|
bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries;
|
||||||
|
|
||||||
|
HANDLE hFile = ::CreateFile(strPathname, GENERIC_WRITE | GENERIC_READ, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||||
|
|
||||||
|
ASSERT(hFile != INVALID_HANDLE_VALUE);
|
||||||
|
|
||||||
|
int nSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries + m_dwSizeImage;
|
||||||
|
|
||||||
|
HANDLE hMap = ::CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, nSize, NULL);
|
||||||
|
|
||||||
|
DWORD dwErr = ::GetLastError();
|
||||||
|
|
||||||
|
ASSERT(hMap != NULL);
|
||||||
|
|
||||||
|
LPVOID lpvFile = ::MapViewOfFile(hMap, FILE_MAP_WRITE, 0, 0, 0); // map whole file
|
||||||
|
|
||||||
|
ASSERT(lpvFile != NULL);
|
||||||
|
|
||||||
|
LPBYTE lpbCurrent = (LPBYTE) lpvFile;
|
||||||
|
|
||||||
|
memcpy(lpbCurrent, &bmfh, sizeof(BITMAPFILEHEADER)); // file header
|
||||||
|
|
||||||
|
lpbCurrent += sizeof(BITMAPFILEHEADER);
|
||||||
|
|
||||||
|
LPBITMAPINFOHEADER lpBMIH = (LPBITMAPINFOHEADER) lpbCurrent;
|
||||||
|
|
||||||
|
memcpy(lpbCurrent, m_lpBMIH, sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries); // info
|
||||||
|
|
||||||
|
lpbCurrent += sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries;
|
||||||
|
|
||||||
|
memcpy(lpbCurrent, m_lpImage, m_dwSizeImage); // bit image
|
||||||
|
|
||||||
|
DWORD dwSizeImage = m_dwSizeImage;
|
||||||
|
|
||||||
|
Empty();
|
||||||
|
|
||||||
|
m_dwSizeImage = dwSizeImage;
|
||||||
|
|
||||||
|
m_nBmihAlloc = m_nImageAlloc = noAlloc;
|
||||||
|
|
||||||
|
m_lpBMIH = lpBMIH;
|
||||||
|
|
||||||
|
m_lpImage = lpbCurrent;
|
||||||
|
|
||||||
|
m_hFile = hFile;
|
||||||
|
|
||||||
|
m_hMap = hMap;
|
||||||
|
|
||||||
|
m_lpvFile = lpvFile;
|
||||||
|
|
||||||
|
ComputePaletteSize(m_lpBMIH->biBitCount);
|
||||||
|
|
||||||
|
ComputeMetrics();
|
||||||
|
|
||||||
|
MakePalette();
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
BOOL CDib::AttachMemory(LPVOID lpvMem, BOOL bMustDelete, HGLOBAL hGlobal)
|
||||||
|
{
|
||||||
|
// assumes contiguous BITMAPINFOHEADER, color table, image color table could be zero length
|
||||||
|
Empty();
|
||||||
|
m_hGlobal = hGlobal;
|
||||||
|
if(bMustDelete == FALSE) {
|
||||||
|
m_nBmihAlloc = noAlloc;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
m_nBmihAlloc = ((hGlobal == NULL) ? crtAlloc : heapAlloc);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
m_lpBMIH = (LPBITMAPINFOHEADER) lpvMem;
|
||||||
|
ComputeMetrics();
|
||||||
|
ComputePaletteSize(m_lpBMIH->biBitCount);
|
||||||
|
m_lpImage = (LPBYTE) m_lpvColorTable + sizeof(RGBQUAD) * m_nColorTableEntries;
|
||||||
|
MakePalette();
|
||||||
|
}
|
||||||
|
|
||||||
|
catch(CException* pe) {
|
||||||
|
|
||||||
|
AfxMessageBox("AttachMemory error");
|
||||||
|
|
||||||
|
pe->Delete();
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
UINT CDib::UsePalette(CDC* pDC, BOOL bBackground /* = FALSE */)
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
if(m_hPalette == NULL) return 0;
|
||||||
|
|
||||||
|
HDC hdc = pDC->GetSafeHdc();
|
||||||
|
|
||||||
|
::SelectPalette(hdc, m_hPalette, bBackground);
|
||||||
|
|
||||||
|
return ::RealizePalette(hdc);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
BOOL CDib::Draw(CDC* pDC, CPoint origin, CSize size)
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
if(m_lpBMIH == NULL) return FALSE;
|
||||||
|
|
||||||
|
if(m_hPalette != NULL) {
|
||||||
|
|
||||||
|
::SelectPalette(pDC->GetSafeHdc(), m_hPalette, TRUE);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
pDC->SetStretchBltMode(COLORONCOLOR);
|
||||||
|
|
||||||
|
::StretchDIBits(pDC->GetSafeHdc(), origin.x, origin.y, size.cx, size.cy,
|
||||||
|
|
||||||
|
0, 0, m_lpBMIH->biWidth, m_lpBMIH->biHeight,
|
||||||
|
|
||||||
|
m_lpImage, (LPBITMAPINFO) m_lpBMIH, DIB_RGB_COLORS, SRCCOPY);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
HBITMAP CDib::CreateSection(CDC* pDC /* = NULL */)
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
if(m_lpBMIH == NULL) return NULL;
|
||||||
|
|
||||||
|
if(m_lpImage != NULL) return NULL; // can only do this if image doesn't exist
|
||||||
|
|
||||||
|
m_hBitmap = ::CreateDIBSection(pDC->GetSafeHdc(), (LPBITMAPINFO) m_lpBMIH,
|
||||||
|
|
||||||
|
DIB_RGB_COLORS, (LPVOID*) &m_lpImage, NULL, 0);
|
||||||
|
|
||||||
|
ASSERT(m_lpImage != NULL);
|
||||||
|
|
||||||
|
return m_hBitmap;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
BOOL CDib::MakePalette()
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
// makes a logical palette (m_hPalette) from the DIB's color table
|
||||||
|
|
||||||
|
// this palette will be selected and realized prior to drawing the DIB
|
||||||
|
|
||||||
|
if(m_nColorTableEntries == 0) return FALSE;
|
||||||
|
|
||||||
|
if(m_hPalette != NULL) ::DeleteObject(m_hPalette);
|
||||||
|
|
||||||
|
TRACE("CDib::MakePalette -- m_nColorTableEntries = %d\n", m_nColorTableEntries);
|
||||||
|
|
||||||
|
LPLOGPALETTE pLogPal = (LPLOGPALETTE) new char[2 * sizeof(WORD) +
|
||||||
|
|
||||||
|
m_nColorTableEntries * sizeof(PALETTEENTRY)];
|
||||||
|
|
||||||
|
pLogPal->palVersion = 0x300;
|
||||||
|
|
||||||
|
pLogPal->palNumEntries = m_nColorTableEntries;
|
||||||
|
|
||||||
|
LPRGBQUAD pDibQuad = (LPRGBQUAD) m_lpvColorTable;
|
||||||
|
|
||||||
|
for(int i = 0; i < m_nColorTableEntries; i++) {
|
||||||
|
|
||||||
|
pLogPal->palPalEntry[i].peRed = pDibQuad->rgbRed;
|
||||||
|
|
||||||
|
pLogPal->palPalEntry[i].peGreen = pDibQuad->rgbGreen;
|
||||||
|
|
||||||
|
pLogPal->palPalEntry[i].peBlue = pDibQuad->rgbBlue;
|
||||||
|
|
||||||
|
pLogPal->palPalEntry[i].peFlags = 0;
|
||||||
|
|
||||||
|
pDibQuad++;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
m_hPalette = ::CreatePalette(pLogPal);
|
||||||
|
|
||||||
|
delete pLogPal;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
BOOL CDib::SetSystemPalette(CDC* pDC)
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
// if the DIB doesn't have a color table, we can use the system's halftone palette
|
||||||
|
|
||||||
|
if(m_nColorTableEntries != 0) return FALSE;
|
||||||
|
|
||||||
|
m_hPalette = ::CreateHalftonePalette(pDC->GetSafeHdc());
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
HBITMAP CDib::CreateBitmap(CDC* pDC)
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
if (m_dwSizeImage == 0) return NULL;
|
||||||
|
|
||||||
|
HBITMAP hBitmap = ::CreateDIBitmap(pDC->GetSafeHdc(), m_lpBMIH,
|
||||||
|
|
||||||
|
CBM_INIT, m_lpImage, (LPBITMAPINFO) m_lpBMIH, DIB_RGB_COLORS);
|
||||||
|
|
||||||
|
ASSERT(hBitmap != NULL);
|
||||||
|
|
||||||
|
return hBitmap;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
BOOL CDib::Compress(CDC* pDC, BOOL bCompress /* = TRUE */)
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
// 1. makes GDI bitmap from existing DIB
|
||||||
|
|
||||||
|
// 2. makes a new DIB from GDI bitmap with compression
|
||||||
|
|
||||||
|
// 3. cleans up the original DIB
|
||||||
|
|
||||||
|
// 4. puts the new DIB in the object
|
||||||
|
|
||||||
|
if((m_lpBMIH->biBitCount != 4) && (m_lpBMIH->biBitCount != 8)) return FALSE;
|
||||||
|
|
||||||
|
// compression supported only for 4 bpp and 8 bpp DIBs
|
||||||
|
|
||||||
|
if(m_hBitmap) return FALSE; // can't compress a DIB Section!
|
||||||
|
|
||||||
|
TRACE("Compress: original palette size = %d\n", m_nColorTableEntries);
|
||||||
|
|
||||||
|
HDC hdc = pDC->GetSafeHdc();
|
||||||
|
|
||||||
|
HPALETTE hOldPalette = ::SelectPalette(hdc, m_hPalette, FALSE);
|
||||||
|
|
||||||
|
HBITMAP hBitmap; // temporary
|
||||||
|
|
||||||
|
if((hBitmap = CreateBitmap(pDC)) == NULL) return FALSE;
|
||||||
|
|
||||||
|
int nSize = sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries;
|
||||||
|
|
||||||
|
LPBITMAPINFOHEADER lpBMIH = (LPBITMAPINFOHEADER) new char[nSize];
|
||||||
|
|
||||||
|
memcpy(lpBMIH, m_lpBMIH, nSize); // new header
|
||||||
|
|
||||||
|
if(bCompress) {
|
||||||
|
|
||||||
|
switch (lpBMIH->biBitCount) {
|
||||||
|
|
||||||
|
case 4:
|
||||||
|
|
||||||
|
lpBMIH->biCompression = BI_RLE4;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 8:
|
||||||
|
|
||||||
|
lpBMIH->biCompression = BI_RLE8;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
|
||||||
|
ASSERT(FALSE);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// calls GetDIBits with null data pointer to get size of compressed DIB
|
||||||
|
|
||||||
|
if(!::GetDIBits(pDC->GetSafeHdc(), hBitmap, 0, (UINT) lpBMIH->biHeight, NULL, (LPBITMAPINFO) lpBMIH, DIB_RGB_COLORS)) {
|
||||||
|
|
||||||
|
AfxMessageBox("Unable to compress this DIB");
|
||||||
|
|
||||||
|
// probably a problem with the color table
|
||||||
|
|
||||||
|
::DeleteObject(hBitmap);
|
||||||
|
|
||||||
|
delete [] lpBMIH;
|
||||||
|
|
||||||
|
::SelectPalette(hdc, hOldPalette, FALSE);
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lpBMIH->biSizeImage == 0) {
|
||||||
|
|
||||||
|
AfxMessageBox("Driver can't do compression");
|
||||||
|
|
||||||
|
::DeleteObject(hBitmap);
|
||||||
|
|
||||||
|
delete [] lpBMIH;
|
||||||
|
|
||||||
|
::SelectPalette(hdc, hOldPalette, FALSE);
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
|
||||||
|
m_dwSizeImage = lpBMIH->biSizeImage;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
|
||||||
|
lpBMIH->biCompression = BI_RGB; // decompress
|
||||||
|
|
||||||
|
// figure the image size from the bitmap width and height
|
||||||
|
|
||||||
|
DWORD dwBytes = ((DWORD) lpBMIH->biWidth * lpBMIH->biBitCount) / 32;
|
||||||
|
|
||||||
|
if(((DWORD) lpBMIH->biWidth * lpBMIH->biBitCount) % 32) {
|
||||||
|
|
||||||
|
dwBytes++;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
dwBytes *= 4;
|
||||||
|
|
||||||
|
m_dwSizeImage = dwBytes * lpBMIH->biHeight; // no compression
|
||||||
|
|
||||||
|
lpBMIH->biSizeImage = m_dwSizeImage;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// second GetDIBits call to make DIB
|
||||||
|
|
||||||
|
LPBYTE lpImage = (LPBYTE) new char[m_dwSizeImage];
|
||||||
|
|
||||||
|
VERIFY(::GetDIBits(pDC->GetSafeHdc(), hBitmap, 0, (UINT) lpBMIH->biHeight, lpImage, (LPBITMAPINFO) lpBMIH, DIB_RGB_COLORS));
|
||||||
|
|
||||||
|
TRACE("dib successfully created - height = %d\n", lpBMIH->biHeight);
|
||||||
|
|
||||||
|
::DeleteObject(hBitmap);
|
||||||
|
|
||||||
|
Empty();
|
||||||
|
|
||||||
|
m_nBmihAlloc = m_nImageAlloc = crtAlloc;
|
||||||
|
|
||||||
|
m_lpBMIH = lpBMIH;
|
||||||
|
|
||||||
|
m_lpImage = lpImage;
|
||||||
|
|
||||||
|
ComputeMetrics();
|
||||||
|
|
||||||
|
ComputePaletteSize(m_lpBMIH->biBitCount);
|
||||||
|
|
||||||
|
MakePalette();
|
||||||
|
|
||||||
|
::SelectPalette(hdc, hOldPalette, FALSE);
|
||||||
|
|
||||||
|
TRACE("Compress: new palette size = %d\n", m_nColorTableEntries);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
BOOL CDib::Read(CFile* pFile)
|
||||||
|
{
|
||||||
|
// 1. read file header to get size of info hdr + color table
|
||||||
|
// 2. read info hdr (to get image size) and color table
|
||||||
|
// 3. read image
|
||||||
|
// can't use bfSize in file header
|
||||||
|
|
||||||
|
Empty();
|
||||||
|
int nCount, nSize;
|
||||||
|
BITMAPFILEHEADER bmfh;
|
||||||
|
|
||||||
|
try {
|
||||||
|
nCount = pFile->Read((LPVOID) &bmfh, sizeof(BITMAPFILEHEADER));
|
||||||
|
//if(nCount != sizeof(BITMAPFILEHEADER)) {
|
||||||
|
// throw new CException;
|
||||||
|
//}
|
||||||
|
//if(bmfh.bfType != 0x4d42) {
|
||||||
|
// throw new CException;
|
||||||
|
//}
|
||||||
|
nSize = bmfh.bfOffBits - sizeof(BITMAPFILEHEADER);
|
||||||
|
m_lpBMIH = (LPBITMAPINFOHEADER) new char[nSize];
|
||||||
|
m_nBmihAlloc = m_nImageAlloc = crtAlloc;
|
||||||
|
nCount = pFile->Read(m_lpBMIH, nSize); // info hdr & color table
|
||||||
|
ComputeMetrics();
|
||||||
|
ComputePaletteSize(m_lpBMIH->biBitCount);
|
||||||
|
MakePalette();
|
||||||
|
m_lpImage = (LPBYTE) new char[m_dwSizeImage];
|
||||||
|
nCount = pFile->Read(m_lpImage, m_dwSizeImage); // image only
|
||||||
|
}
|
||||||
|
catch(CException* pe) {
|
||||||
|
AfxMessageBox("Read error");
|
||||||
|
pe->Delete();
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CDib::ReadSection(CFile* pFile, CDC* pDC /* = NULL */)
|
||||||
|
{
|
||||||
|
// new function reads BMP from disk and creates a DIB section
|
||||||
|
// allows modification of bitmaps from disk
|
||||||
|
// 1. read file header to get size of info hdr + color table
|
||||||
|
// 2. read info hdr (to get image size) and color table
|
||||||
|
// 3. create DIB section based on header parms
|
||||||
|
// 4. read image into memory that CreateDibSection allocates
|
||||||
|
Empty();
|
||||||
|
int nCount, nSize;
|
||||||
|
BITMAPFILEHEADER bmfh;
|
||||||
|
try {
|
||||||
|
nCount = pFile->Read((LPVOID) &bmfh, sizeof(BITMAPFILEHEADER));
|
||||||
|
//if(nCount != sizeof(BITMAPFILEHEADER)) {
|
||||||
|
// throw new CException;
|
||||||
|
//}
|
||||||
|
//if(bmfh.bfType != 0x4d42) {
|
||||||
|
// throw new CException;
|
||||||
|
//}
|
||||||
|
nSize = bmfh.bfOffBits - sizeof(BITMAPFILEHEADER);
|
||||||
|
m_lpBMIH = (LPBITMAPINFOHEADER) new char[nSize];
|
||||||
|
m_nBmihAlloc = crtAlloc;
|
||||||
|
m_nImageAlloc = noAlloc;
|
||||||
|
nCount = pFile->Read(m_lpBMIH, nSize); // info hdr & color table
|
||||||
|
//if(m_lpBMIH->biCompression != BI_RGB) {
|
||||||
|
// throw new CException;
|
||||||
|
//}
|
||||||
|
ComputeMetrics();
|
||||||
|
ComputePaletteSize(m_lpBMIH->biBitCount);
|
||||||
|
MakePalette();
|
||||||
|
UsePalette(pDC);
|
||||||
|
m_hBitmap = ::CreateDIBSection(pDC->GetSafeHdc(), (LPBITMAPINFO) m_lpBMIH, DIB_RGB_COLORS, (LPVOID*) &m_lpImage, NULL, 0);
|
||||||
|
ASSERT(m_lpImage != NULL);
|
||||||
|
nCount = pFile->Read(m_lpImage, m_dwSizeImage); // image only
|
||||||
|
}
|
||||||
|
catch(CException* pe) {
|
||||||
|
AfxMessageBox("ReadSection error");
|
||||||
|
pe->Delete();
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CDib::Write(CFile* pFile)
|
||||||
|
{
|
||||||
|
BITMAPFILEHEADER bmfh;
|
||||||
|
bmfh.bfType = 0x4d42; // 'BM'
|
||||||
|
int nSizeHdr = sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries;
|
||||||
|
bmfh.bfSize = 0;
|
||||||
|
// bmfh.bfSize = sizeof(BITMAPFILEHEADER) + nSizeHdr + m_dwSizeImage;
|
||||||
|
// meaning of bfSize open to interpretation (bytes, words, dwords?) -- we won't use it
|
||||||
|
bmfh.bfReserved1 = bmfh.bfReserved2 = 0;
|
||||||
|
bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries;
|
||||||
|
try {
|
||||||
|
pFile->Write((LPVOID) &bmfh, sizeof(BITMAPFILEHEADER));
|
||||||
|
pFile->Write((LPVOID) m_lpBMIH, nSizeHdr);
|
||||||
|
pFile->Write((LPVOID) m_lpImage, m_dwSizeImage);
|
||||||
|
}
|
||||||
|
catch(CException* pe) {
|
||||||
|
pe->Delete();
|
||||||
|
AfxMessageBox("write error");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CDib::Serialize(CArchive& ar)
|
||||||
|
|
||||||
|
{
|
||||||
|
DWORD dwPos;
|
||||||
|
dwPos = ar.GetFile()->GetPosition();
|
||||||
|
TRACE("CDib::Serialize -- pos = %d\n", dwPos);
|
||||||
|
ar.Flush();
|
||||||
|
dwPos = ar.GetFile()->GetPosition();
|
||||||
|
TRACE("CDib::Serialize -- pos = %d\n", dwPos);
|
||||||
|
if(ar.IsStoring()) {
|
||||||
|
Write(ar.GetFile());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Read(ar.GetFile());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// helper functions
|
||||||
|
|
||||||
|
void CDib::ComputePaletteSize(int nBitCount)
|
||||||
|
{
|
||||||
|
if((m_lpBMIH == NULL) || (m_lpBMIH->biClrUsed == 0)) {
|
||||||
|
switch(nBitCount) {
|
||||||
|
case 1:
|
||||||
|
m_nColorTableEntries = 2;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
m_nColorTableEntries = 16;
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
m_nColorTableEntries = 256;
|
||||||
|
break;
|
||||||
|
case 16:
|
||||||
|
case 24:
|
||||||
|
case 32:
|
||||||
|
m_nColorTableEntries = 0;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ASSERT(FALSE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
m_nColorTableEntries = m_lpBMIH->biClrUsed;
|
||||||
|
}
|
||||||
|
ASSERT((m_nColorTableEntries >= 0) && (m_nColorTableEntries <= 256));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void CDib::ComputeMetrics()
|
||||||
|
{
|
||||||
|
//if(m_lpBMIH->biSize != sizeof(BITMAPINFOHEADER)) {
|
||||||
|
// TRACE("Not a valid Windows bitmap -- probably an OS/2 bitmap\n");
|
||||||
|
// throw new CException;
|
||||||
|
//}
|
||||||
|
m_dwSizeImage = m_lpBMIH->biSizeImage;
|
||||||
|
if(m_dwSizeImage == 0) {
|
||||||
|
DWORD dwBytes = ((DWORD) m_lpBMIH->biWidth * m_lpBMIH->biBitCount) / 32;
|
||||||
|
if(((DWORD) m_lpBMIH->biWidth * m_lpBMIH->biBitCount) % 32) {
|
||||||
|
dwBytes++;
|
||||||
|
}
|
||||||
|
dwBytes *= 4;
|
||||||
|
m_dwSizeImage = dwBytes * m_lpBMIH->biHeight; // no compression
|
||||||
|
}
|
||||||
|
m_lpvColorTable = (LPBYTE) m_lpBMIH + sizeof(BITMAPINFOHEADER);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CDib::Empty()
|
||||||
|
{
|
||||||
|
|
||||||
|
// this is supposed to clean up whatever is in the DIB
|
||||||
|
|
||||||
|
DetachMapFile();
|
||||||
|
|
||||||
|
if(m_nBmihAlloc == crtAlloc) {
|
||||||
|
|
||||||
|
delete [ ] m_lpBMIH;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
else if(m_nBmihAlloc == heapAlloc) {
|
||||||
|
|
||||||
|
::GlobalUnlock(m_hGlobal);
|
||||||
|
|
||||||
|
::GlobalFree(m_hGlobal);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if(m_nImageAlloc == crtAlloc) delete [] m_lpImage;
|
||||||
|
|
||||||
|
if(m_hPalette != NULL) ::DeleteObject(m_hPalette);
|
||||||
|
|
||||||
|
if(m_hBitmap != NULL) ::DeleteObject(m_hBitmap);
|
||||||
|
|
||||||
|
m_nBmihAlloc = m_nImageAlloc = noAlloc;
|
||||||
|
|
||||||
|
m_hGlobal = NULL;
|
||||||
|
|
||||||
|
m_lpBMIH = NULL;
|
||||||
|
|
||||||
|
m_lpImage = NULL;
|
||||||
|
|
||||||
|
m_lpvColorTable = NULL;
|
||||||
|
|
||||||
|
m_nColorTableEntries = 0;
|
||||||
|
|
||||||
|
m_dwSizeImage = 0;
|
||||||
|
|
||||||
|
m_lpvFile = NULL;
|
||||||
|
|
||||||
|
m_hMap = NULL;
|
||||||
|
|
||||||
|
m_hFile = NULL;
|
||||||
|
|
||||||
|
m_hBitmap = NULL;
|
||||||
|
|
||||||
|
m_hPalette = NULL;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void CDib::DetachMapFile()
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
if(m_hFile == NULL) return;
|
||||||
|
|
||||||
|
::UnmapViewOfFile(m_lpvFile);
|
||||||
|
|
||||||
|
::CloseHandle(m_hMap);
|
||||||
|
|
||||||
|
::CloseHandle(m_hFile);
|
||||||
|
|
||||||
|
m_hFile = NULL;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
61
host/cdib.h
Normal file
61
host/cdib.h
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
#ifndef _INSIDE_VISUAL_CPP_CDIB
|
||||||
|
#define _INSIDE_VISUAL_CPP_CDIB
|
||||||
|
|
||||||
|
class CDib : public CObject
|
||||||
|
{
|
||||||
|
enum Alloc {noAlloc, crtAlloc, heapAlloc}; // applies to BITMAPINFOHEADER
|
||||||
|
DECLARE_SERIAL(CDib)
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
LPVOID m_lpvColorTable;
|
||||||
|
HBITMAP m_hBitmap;
|
||||||
|
LPBYTE m_lpImage; // starting address of DIB bits
|
||||||
|
LPBITMAPINFOHEADER m_lpBMIH; // buffer containing the BITMAPINFOHEADER
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
HGLOBAL m_hGlobal; // for external windows we need to free; could be allocated by this class or allocated externally
|
||||||
|
Alloc m_nBmihAlloc;
|
||||||
|
Alloc m_nImageAlloc;
|
||||||
|
DWORD m_dwSizeImage; // of bits—not BITMAPINFOHEADER or BITMAPFILEHEADER
|
||||||
|
int m_nColorTableEntries;
|
||||||
|
|
||||||
|
HANDLE m_hFile;
|
||||||
|
HANDLE m_hMap;
|
||||||
|
LPVOID m_lpvFile;
|
||||||
|
HPALETTE m_hPalette;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
CDib();
|
||||||
|
CDib(CSize size, int nBitCount); // builds BITMAPINFOHEADER
|
||||||
|
~CDib();
|
||||||
|
int GetSizeImage() {return m_dwSizeImage;}
|
||||||
|
int GetSizeHeader()
|
||||||
|
{return sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries;}
|
||||||
|
CSize GetDimensions();
|
||||||
|
BOOL AttachMapFile(const char* strPathname, BOOL bShare = FALSE);
|
||||||
|
BOOL CopyToMapFile(const char* strPathname);
|
||||||
|
BOOL AttachMemory(LPVOID lpvMem, BOOL bMustDelete = FALSE, HGLOBAL hGlobal = NULL);
|
||||||
|
BOOL Draw(CDC* pDC, CPoint origin, CSize size); // until we implement CreateDibSection
|
||||||
|
HBITMAP CreateSection(CDC* pDC = NULL);
|
||||||
|
UINT UsePalette(CDC* pDC, BOOL bBackground = FALSE);
|
||||||
|
BOOL MakePalette();
|
||||||
|
BOOL SetSystemPalette(CDC* pDC);
|
||||||
|
BOOL Compress(CDC* pDC, BOOL bCompress = TRUE); // FALSE means decompress
|
||||||
|
HBITMAP CreateBitmap(CDC* pDC);
|
||||||
|
BOOL Read(CFile* pFile);
|
||||||
|
BOOL ReadSection(CFile* pFile, CDC* pDC = NULL);
|
||||||
|
BOOL Write(CFile* pFile);
|
||||||
|
void Serialize(CArchive& ar);
|
||||||
|
void Empty();
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
void DetachMapFile();
|
||||||
|
void ComputePaletteSize(int nBitCount);
|
||||||
|
void ComputeMetrics();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // _INSIDE_VISUAL_CPP_CDIB
|
552
host/dib.cpp
Normal file
552
host/dib.cpp
Normal file
@ -0,0 +1,552 @@
|
|||||||
|
#include "stdafx.h"
|
||||||
|
#include "bmpext.h"
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
// DIB support defines
|
||||||
|
#define BMIH_SIZE sizeof BITMAPINFOHEADER
|
||||||
|
#define BMIF_SIZE sizeof BITMAPFILEHEADER
|
||||||
|
|
||||||
|
/* DIB constants */
|
||||||
|
#define PALVERSION 0x300
|
||||||
|
|
||||||
|
/* Dib Header Marker - used in writing DIBs to files */
|
||||||
|
#define DIB_HEADER_MARKER ((WORD) ('M' << 8) | 'B')
|
||||||
|
|
||||||
|
// WIDTHBYTES performs DWORD-aligning of DIB scanlines. The "bits"
|
||||||
|
// parameter is the bit count for the scanline (biWidth * biBitCount),
|
||||||
|
// and this macro returns the number of DWORD-aligned bytes needed
|
||||||
|
// to hold those bits.
|
||||||
|
#define WIDTHBYTES(bits) (((bits) + 31) / 32 * 4)
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//CDib implementation
|
||||||
|
|
||||||
|
CDib::CDib() : m_pBMI(0), m_pBits(0), m_pPalette(0)
|
||||||
|
{}
|
||||||
|
|
||||||
|
CDib::~CDib()
|
||||||
|
{
|
||||||
|
Free();
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD CDib::Width() const
|
||||||
|
{
|
||||||
|
if (!m_pBMI)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* return the DIB width */
|
||||||
|
return m_pBMI->bmiHeader.biWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD CDib::Height() const
|
||||||
|
{
|
||||||
|
if (!m_pBMI)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* return the DIB height */
|
||||||
|
return m_pBMI->bmiHeader.biHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
WORD CDib::NumColors( BITMAPINFOHEADER& bmiHeader ) const
|
||||||
|
{
|
||||||
|
if ( bmiHeader.biClrUsed != 0)
|
||||||
|
return (WORD)bmiHeader.biClrUsed;
|
||||||
|
|
||||||
|
switch ( bmiHeader.biBitCount )
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
return 2;
|
||||||
|
case 4:
|
||||||
|
return 16;
|
||||||
|
case 8:
|
||||||
|
return 256;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CDib::IsValid() const
|
||||||
|
{
|
||||||
|
return (m_pBits != NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD CDib::PaletteSize() const
|
||||||
|
{
|
||||||
|
return NumColors( m_pBMI->bmiHeader ) * sizeof(RGBQUAD);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CDib::Draw(CDC* pDC, CRect& rectDC, CRect& rectDIB) const
|
||||||
|
{
|
||||||
|
if ( !IsValid() )
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
CPalette* pOldPal = NULL; // Previous palette
|
||||||
|
|
||||||
|
// Get the DIB's palette, then select it into DC
|
||||||
|
if (m_pPalette != NULL)
|
||||||
|
{
|
||||||
|
// Select as background since we have
|
||||||
|
// already realized in forground if needed
|
||||||
|
pOldPal = pDC->SelectPalette( m_pPalette, TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Make sure to use the stretching mode best for color pictures */
|
||||||
|
pDC->SetStretchBltMode( COLORONCOLOR );
|
||||||
|
|
||||||
|
/* Determine whether to call StretchDIBits() or SetDIBitsToDevice() */
|
||||||
|
BOOL bSuccess;
|
||||||
|
if( ( rectDC.Width() == rectDIB.Width() ) &&
|
||||||
|
( rectDC.Height() == rectDIB.Height() ) )
|
||||||
|
bSuccess = ::SetDIBitsToDevice(pDC->m_hDC, // hDC
|
||||||
|
rectDC.left, // DestX
|
||||||
|
rectDC.top, // DestY
|
||||||
|
rectDC.Width(), // nDestWidth
|
||||||
|
rectDC.Height(), // nDestHeight
|
||||||
|
rectDIB.left, // SrcX
|
||||||
|
(int)Height() -
|
||||||
|
rectDIB.top -
|
||||||
|
rectDIB.Height(), // SrcY
|
||||||
|
0, // nStartScan
|
||||||
|
(WORD)Height(), // nNumScans
|
||||||
|
m_pBits, // lpBits
|
||||||
|
m_pBMI, // lpBitsInfo
|
||||||
|
DIB_RGB_COLORS); // wUsage
|
||||||
|
else
|
||||||
|
bSuccess = ::StretchDIBits(pDC->m_hDC, // hDC
|
||||||
|
rectDC.left, // DestX
|
||||||
|
rectDC.top, // DestY
|
||||||
|
rectDC.Width(), // nDestWidth
|
||||||
|
rectDC.Height(), // nDestHeight
|
||||||
|
rectDIB.left, // SrcX
|
||||||
|
rectDIB.top, // SrcY
|
||||||
|
rectDIB.Width(), // wSrcWidth
|
||||||
|
rectDIB.Height(), // wSrcHeight
|
||||||
|
m_pBits, // lpBits
|
||||||
|
m_pBMI, // lpBitsInfo
|
||||||
|
DIB_RGB_COLORS, // wUsage
|
||||||
|
SRCCOPY); // dwROP
|
||||||
|
|
||||||
|
/* Reselect old palette */
|
||||||
|
if (pOldPal != NULL)
|
||||||
|
{
|
||||||
|
pDC->SelectPalette( pOldPal, TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
return bSuccess;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CDib::AssertPosition(int iX, int iY)
|
||||||
|
{
|
||||||
|
if( (iX < 0) || (iX > m_pBMI->bmiHeader.biWidth - 1) ||
|
||||||
|
(iY < 0) || (iY > m_pBMI->bmiHeader.biHeight - 1) )
|
||||||
|
{
|
||||||
|
//invalid image pixel position
|
||||||
|
CDibException::Throw( CDibException::E_INVPOS );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
RGBQUAD CDib::GetPixel(int iX, int iY)
|
||||||
|
{
|
||||||
|
RGBQUAD rgbResult;
|
||||||
|
WORD wDummy;
|
||||||
|
|
||||||
|
//takeinto account that DIBit raws are reversed vertically
|
||||||
|
iY = (m_pBMI->bmiHeader.biHeight - 1) - iY; // GHO fix
|
||||||
|
//iY = m_pBMI->bmiHeader.biHeight - iY;
|
||||||
|
|
||||||
|
//assert pixel position
|
||||||
|
AssertPosition( iX, iY );
|
||||||
|
|
||||||
|
//access the destination pixel
|
||||||
|
int nRowBytes = m_pBMI->bmiHeader.biWidth * m_pBMI->bmiHeader.biBitCount;
|
||||||
|
nRowBytes = ( (nRowBytes + 31) & (~31) ) / 8;
|
||||||
|
|
||||||
|
switch( m_pBMI->bmiHeader.biBitCount )
|
||||||
|
{
|
||||||
|
case 1: //Monochrome
|
||||||
|
rgbResult = m_pBMI->bmiColors[ *(m_pBits + nRowBytes*iY + iX/8) & (0x80 >> iX%8) ];
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
rgbResult = m_pBMI->bmiColors[ *(m_pBits + nRowBytes*iY + iX/2) & ((iX&1) ? 0x0f : 0xf0) ];
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
rgbResult = m_pBMI->bmiColors[ *(m_pBits + nRowBytes*iY + iX) ];
|
||||||
|
break;
|
||||||
|
case 16:
|
||||||
|
wDummy = *(LPWORD)(m_pBits + nRowBytes*iY + iX*2);
|
||||||
|
|
||||||
|
rgbResult.rgbBlue = (BYTE)(0x001F & wDummy);
|
||||||
|
rgbResult.rgbGreen = (BYTE)(0x001F & (wDummy >> 5));
|
||||||
|
rgbResult.rgbRed = (BYTE)(0x001F & wDummy >> 10 );
|
||||||
|
break;
|
||||||
|
case 24:
|
||||||
|
rgbResult = *(LPRGBQUAD)(m_pBits + nRowBytes*iY + iX*3);
|
||||||
|
break;
|
||||||
|
case 32:
|
||||||
|
rgbResult = *(LPRGBQUAD)(m_pBits + nRowBytes*iY + iX*4);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return rgbResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CDib::SetPixel(int iX, int iY, RGBQUAD &rgbPixel)
|
||||||
|
{
|
||||||
|
WORD wDummy;
|
||||||
|
|
||||||
|
//takeinto account that DIBit raws are reversed vertically
|
||||||
|
iY = (m_pBMI->bmiHeader.biHeight - 1) - iY; // GHO fix
|
||||||
|
//iY = m_pBMI->bmiHeader.biHeight - iY;
|
||||||
|
|
||||||
|
//assert pixel position
|
||||||
|
AssertPosition( iX, iY );
|
||||||
|
|
||||||
|
//access the destination pixel
|
||||||
|
int nRowBytes = m_pBMI->bmiHeader.biWidth * m_pBMI->bmiHeader.biBitCount;
|
||||||
|
nRowBytes = ( (nRowBytes + 31) & (~31) ) / 8;
|
||||||
|
|
||||||
|
switch( m_pBMI->bmiHeader.biBitCount )
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
case 4:
|
||||||
|
case 8:
|
||||||
|
//do not support this operation;
|
||||||
|
CDibException::Throw( CDibException::E_NOTSUPP );
|
||||||
|
break;
|
||||||
|
case 16:
|
||||||
|
wDummy = rgbPixel.rgbRed;
|
||||||
|
wDummy = wDummy << 5;
|
||||||
|
wDummy |= rgbPixel.rgbGreen;
|
||||||
|
wDummy = wDummy << 5;
|
||||||
|
wDummy |= rgbPixel.rgbBlue;
|
||||||
|
|
||||||
|
*(LPWORD)(m_pBits + nRowBytes*iY + iX*2) = wDummy;
|
||||||
|
break;
|
||||||
|
case 24:
|
||||||
|
*(LPRGBQUAD)(m_pBits + nRowBytes*iY + iX*3) = rgbPixel;
|
||||||
|
break;
|
||||||
|
case 32:
|
||||||
|
*(LPRGBQUAD)(m_pBits + nRowBytes*iY + iX*4) = rgbPixel;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD CDib::Save(CFile& file) const
|
||||||
|
{
|
||||||
|
BITMAPFILEHEADER bmfHdr; // Header for Bitmap file
|
||||||
|
DWORD dwDIBSize;
|
||||||
|
|
||||||
|
if (m_pBMI == NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
// Fill in the fields of the file header
|
||||||
|
|
||||||
|
// Fill in file type (first 2 bytes must be "BM" for a bitmap)
|
||||||
|
bmfHdr.bfType = DIB_HEADER_MARKER; // "BM"
|
||||||
|
|
||||||
|
// Calculating the size of the DIB is a bit tricky (if we want to
|
||||||
|
// do it right). The easiest way to do this is to call GlobalSize()
|
||||||
|
// on our global handle, but since the size of our global memory may have
|
||||||
|
// been padded a few bytes, we may end up writing out a few too
|
||||||
|
// many bytes to the file (which may cause problems with some apps).
|
||||||
|
//
|
||||||
|
// So, instead let's calculate the size manually (if we can)
|
||||||
|
//
|
||||||
|
// First, find size of header plus size of color table. Since the
|
||||||
|
// first DWORD in both BITMAPINFOHEADER and BITMAPCOREHEADER conains
|
||||||
|
// the size of the structure, let's use this.
|
||||||
|
dwDIBSize = m_pBMI->bmiHeader.biSize + PaletteSize(); // Partial Calculation
|
||||||
|
|
||||||
|
// Now calculate the size of the image
|
||||||
|
if ((m_pBMI->bmiHeader.biCompression == BI_RLE8) || (m_pBMI->bmiHeader.biCompression == BI_RLE4))
|
||||||
|
{
|
||||||
|
// It's an RLE bitmap, we can't calculate size, so trust the
|
||||||
|
// biSizeImage field
|
||||||
|
dwDIBSize += m_pBMI->bmiHeader.biSizeImage;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DWORD dwBmBitsSize; // Size of Bitmap Bits only
|
||||||
|
|
||||||
|
// It's not RLE, so size is Width (DWORD aligned) * Height
|
||||||
|
dwBmBitsSize = WIDTHBYTES((m_pBMI->bmiHeader.biWidth)*((DWORD)m_pBMI->bmiHeader.biBitCount)) * m_pBMI->bmiHeader.biHeight;
|
||||||
|
dwDIBSize += dwBmBitsSize;
|
||||||
|
|
||||||
|
// Now, since we have calculated the correct size, why don't we
|
||||||
|
// fill in the biSizeImage field (this will fix any .BMP files which
|
||||||
|
// have this field incorrect).
|
||||||
|
m_pBMI->bmiHeader.biSizeImage = dwBmBitsSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calculate the file size by adding the DIB size to sizeof(BITMAPFILEHEADER)
|
||||||
|
bmfHdr.bfSize = dwDIBSize + BMIF_SIZE;
|
||||||
|
bmfHdr.bfReserved1 = 0;
|
||||||
|
bmfHdr.bfReserved2 = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Now, calculate the offset the actual bitmap bits will be in
|
||||||
|
* the file -- It's the Bitmap file header plus the DIB header,
|
||||||
|
* plus the size of the color table.
|
||||||
|
*/
|
||||||
|
bmfHdr.bfOffBits = BMIF_SIZE + m_pBMI->bmiHeader.biSize + PaletteSize();
|
||||||
|
|
||||||
|
// Write the file header
|
||||||
|
file.Write( (LPSTR)&bmfHdr, BMIF_SIZE );
|
||||||
|
DWORD dwBytesSaved = BMIF_SIZE;
|
||||||
|
|
||||||
|
// Write the DIB header
|
||||||
|
UINT nCount = sizeof(BITMAPINFO) + PaletteSize();
|
||||||
|
dwBytesSaved += nCount;
|
||||||
|
file.Write(m_pBMI, nCount);
|
||||||
|
|
||||||
|
// Write the DIB bits
|
||||||
|
DWORD dwBytes = m_pBMI->bmiHeader.biBitCount * Width();
|
||||||
|
// Calculate the number of bytes per line
|
||||||
|
if (dwBytes%32 == 0)
|
||||||
|
dwBytes /= 8;
|
||||||
|
else
|
||||||
|
dwBytes = dwBytes/8 + (32-dwBytes%32)/8 + (((32-dwBytes%32)%8 > 0) ? 1 : 0);
|
||||||
|
nCount = dwBytes * Height();
|
||||||
|
dwBytesSaved += nCount;
|
||||||
|
//file.WriteHuge(m_pBits, nCount);
|
||||||
|
file.Write(m_pBits, nCount);
|
||||||
|
|
||||||
|
return dwBytesSaved;
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD CDib::Read(CFile& file, BOOL bFromResource)
|
||||||
|
{
|
||||||
|
DWORD dwReadBytes = 0;
|
||||||
|
DWORD dwLength = file.GetLength();
|
||||||
|
|
||||||
|
// Ensures no memory leaks will occur
|
||||||
|
Free();
|
||||||
|
|
||||||
|
BITMAPFILEHEADER bmfHeader;
|
||||||
|
BITMAPINFOHEADER bmiHeader;
|
||||||
|
|
||||||
|
if( !bFromResource )
|
||||||
|
{
|
||||||
|
// Go read the DIB file header and check if it's valid.
|
||||||
|
if( (dwReadBytes = file.Read((LPSTR)&bmfHeader, BMIF_SIZE)) != BMIF_SIZE)
|
||||||
|
return 0;
|
||||||
|
if(bmfHeader.bfType != DIB_HEADER_MARKER)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read DIB header.
|
||||||
|
if( file.Read( &bmiHeader, BMIH_SIZE ) != BMIH_SIZE )
|
||||||
|
return 0;
|
||||||
|
dwReadBytes += BMIH_SIZE;
|
||||||
|
|
||||||
|
DWORD dwPalSize = NumColors( bmiHeader ) * sizeof RGBQUAD;
|
||||||
|
m_pBMI = (LPBITMAPINFO) new BYTE[BMIH_SIZE + dwPalSize];
|
||||||
|
memcpy( m_pBMI, &bmiHeader, BMIH_SIZE );
|
||||||
|
// read palette data
|
||||||
|
if( file.Read( m_pBMI->bmiColors, dwPalSize ) != dwPalSize )
|
||||||
|
return 0;
|
||||||
|
dwReadBytes += dwPalSize;
|
||||||
|
CreatePalette();
|
||||||
|
|
||||||
|
// Go read the bits.
|
||||||
|
m_pBits = new BYTE[ dwLength - dwReadBytes + 0x200]; // GHO fix: you need some more space who knows why...?
|
||||||
|
if (m_pBits == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (file.Read( m_pBits, dwLength - dwReadBytes ) != (dwLength - dwReadBytes))
|
||||||
|
{
|
||||||
|
delete m_pBMI;
|
||||||
|
m_pBMI = NULL;
|
||||||
|
|
||||||
|
delete m_pBits;
|
||||||
|
m_pBits = NULL;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
dwReadBytes = dwLength;
|
||||||
|
|
||||||
|
return dwReadBytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD CDib::ReadFromResource(UINT nResID)
|
||||||
|
{
|
||||||
|
DWORD dwResult = 0;
|
||||||
|
// Load from resource
|
||||||
|
HRSRC hbmres = FindResource( NULL, MAKEINTRESOURCE(nResID), RT_BITMAP );
|
||||||
|
CMemFile file;
|
||||||
|
HGLOBAL hGlob;
|
||||||
|
|
||||||
|
if (hbmres)
|
||||||
|
{
|
||||||
|
DWORD dwResSize = SizeofResource( NULL, hbmres );
|
||||||
|
file.Attach( (LPBYTE)LockResource( hGlob = LoadResource(NULL, hbmres) ), dwResSize );
|
||||||
|
dwResult = Read(file, TRUE);
|
||||||
|
file.Detach();
|
||||||
|
DeleteObject( hGlob );
|
||||||
|
}
|
||||||
|
|
||||||
|
return dwResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CDib::Invalidate()
|
||||||
|
{
|
||||||
|
Free();
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CDib::CreatePalette()
|
||||||
|
{
|
||||||
|
if ( !IsValid() )
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
//get the number of colors in the DIB
|
||||||
|
WORD wNumColors = NumColors( m_pBMI->bmiHeader );
|
||||||
|
BOOL bResult = TRUE;
|
||||||
|
|
||||||
|
if (wNumColors != 0)
|
||||||
|
{
|
||||||
|
// allocate memory block for logical palette
|
||||||
|
LPLOGPALETTE pLogPal = (LPLOGPALETTE) new BYTE[ sizeof(LOGPALETTE) +
|
||||||
|
sizeof(PALETTEENTRY)*wNumColors ];
|
||||||
|
|
||||||
|
// if not enough memory, clean up and return NULL
|
||||||
|
if( pLogPal == 0 )
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
// set version and number of palette entries
|
||||||
|
pLogPal->palVersion = PALVERSION;
|
||||||
|
pLogPal->palNumEntries = wNumColors;
|
||||||
|
|
||||||
|
for (WORD i = 0; i < wNumColors; i++)
|
||||||
|
{
|
||||||
|
pLogPal->palPalEntry[i].peRed = m_pBMI->bmiColors[i].rgbRed;
|
||||||
|
pLogPal->palPalEntry[i].peGreen = m_pBMI->bmiColors[i].rgbGreen;
|
||||||
|
pLogPal->palPalEntry[i].peBlue = m_pBMI->bmiColors[i].rgbBlue;
|
||||||
|
pLogPal->palPalEntry[i].peFlags = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// create the palette and get handle to it
|
||||||
|
if (m_pPalette)
|
||||||
|
{
|
||||||
|
m_pPalette->DeleteObject();
|
||||||
|
delete m_pPalette;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_pPalette = new CPalette;
|
||||||
|
bResult = m_pPalette->CreatePalette( pLogPal );
|
||||||
|
delete pLogPal;
|
||||||
|
}
|
||||||
|
|
||||||
|
return bResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CDib::Free()
|
||||||
|
{
|
||||||
|
// Make sure all member data that might have been allocated is freed.
|
||||||
|
if(m_pBMI)
|
||||||
|
{
|
||||||
|
delete m_pBMI;
|
||||||
|
m_pBMI = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(m_pBits)
|
||||||
|
{
|
||||||
|
delete m_pBits;
|
||||||
|
m_pBits = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(m_pPalette)
|
||||||
|
{
|
||||||
|
m_pPalette->DeleteObject();
|
||||||
|
delete m_pPalette;
|
||||||
|
m_pPalette = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
HBITMAP CDib::CreateDDBitmap( HDC hDC )
|
||||||
|
{
|
||||||
|
HBITMAP hBitmap = ::CreateDIBitmap( hDC, &m_pBMI->bmiHeader,
|
||||||
|
CBM_INIT, m_pBits, (LPBITMAPINFO)m_pBMI, DIB_RGB_COLORS);
|
||||||
|
ASSERT(hBitmap);
|
||||||
|
return hBitmap;
|
||||||
|
}
|
||||||
|
|
||||||
|
HBITMAP CDib::CreateDDBitmap(CDC* pDC)
|
||||||
|
{
|
||||||
|
return CreateDDBitmap( pDC->GetSafeHdc() );
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CDib::Compress(CDC* pDC, BOOL bCompress )
|
||||||
|
{
|
||||||
|
// 1. makes GDI bitmap from existing DIB
|
||||||
|
// 2. makes a new DIB from GDI bitmap with compression
|
||||||
|
// 3. cleans up the original DIB
|
||||||
|
// 4. puts the new DIB in the object
|
||||||
|
if((m_pBMI->bmiHeader.biBitCount != 4) && (m_pBMI->bmiHeader.biBitCount != 8)) return FALSE;
|
||||||
|
// compression supported only for 4 bpp and 8 bpp DIBs
|
||||||
|
TRACE(_T("Compress: original palette size = %d\n"), NumColors(m_pBMI->bmiHeader) );
|
||||||
|
HDC hdc = pDC->GetSafeHdc();
|
||||||
|
CPalette* pOldPalette = pDC->SelectPalette( m_pPalette, TRUE);
|
||||||
|
HBITMAP hBitmap; // temporary
|
||||||
|
if((hBitmap = CreateDDBitmap(pDC)) == NULL) return FALSE;
|
||||||
|
int nSize = BMIF_SIZE + PaletteSize();
|
||||||
|
LPBITMAPINFO pBMI = (LPBITMAPINFO) new char[nSize];
|
||||||
|
memcpy(pBMI, &m_pBMI->bmiHeader, nSize); // new header
|
||||||
|
if(bCompress) {
|
||||||
|
switch (pBMI->bmiHeader.biBitCount) {
|
||||||
|
case 4:
|
||||||
|
pBMI->bmiHeader.biCompression = BI_RLE4;
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
pBMI->bmiHeader.biCompression = BI_RLE8;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ASSERT(FALSE);
|
||||||
|
}
|
||||||
|
// calls GetDIBits with null data pointer to get size of compressed DIB
|
||||||
|
if(!::GetDIBits(pDC->m_hDC, hBitmap, 0, (UINT) pBMI->bmiHeader.biHeight,
|
||||||
|
NULL, pBMI, DIB_RGB_COLORS)) {
|
||||||
|
AfxMessageBox(_T("Unable to compress this DIB"));
|
||||||
|
// probably a problem with the color table
|
||||||
|
::DeleteObject(hBitmap);
|
||||||
|
delete[] pBMI;
|
||||||
|
pDC->SelectPalette( pOldPalette, TRUE);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
if (pBMI->bmiHeader.biSizeImage == 0) {
|
||||||
|
AfxMessageBox(_T("Driver can't do compression"));
|
||||||
|
::DeleteObject(hBitmap);
|
||||||
|
delete[] pBMI;
|
||||||
|
pDC->SelectPalette( pOldPalette, TRUE);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
m_pBMI->bmiHeader.biSizeImage = pBMI->bmiHeader.biSizeImage;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pBMI->bmiHeader.biCompression = BI_RGB; // decompress
|
||||||
|
// figure the image size from the bitmap width and height
|
||||||
|
DWORD dwBytes = ((DWORD) pBMI->bmiHeader.biWidth * pBMI->bmiHeader.biBitCount) / 32;
|
||||||
|
if(((DWORD) pBMI->bmiHeader.biWidth * pBMI->bmiHeader.biBitCount) % 32) {
|
||||||
|
dwBytes++;
|
||||||
|
}
|
||||||
|
dwBytes *= 4;
|
||||||
|
m_pBMI->bmiHeader.biSizeImage = dwBytes * pBMI->bmiHeader.biHeight; // no compression
|
||||||
|
pBMI->bmiHeader.biSizeImage = m_pBMI->bmiHeader.biSizeImage;
|
||||||
|
}
|
||||||
|
// second GetDIBits call to make DIB
|
||||||
|
LPBYTE lpImage = (LPBYTE) new char[m_pBMI->bmiHeader.biSizeImage];
|
||||||
|
VERIFY(::GetDIBits(pDC->m_hDC, hBitmap, 0, (UINT) pBMI->bmiHeader.biHeight,
|
||||||
|
lpImage, pBMI, DIB_RGB_COLORS));
|
||||||
|
TRACE(_T("dib successfully created - height = %d\n"), pBMI->bmiHeader.biHeight);
|
||||||
|
::DeleteObject(hBitmap);
|
||||||
|
Free();
|
||||||
|
m_pBMI = pBMI;
|
||||||
|
m_pBits = lpImage;
|
||||||
|
CreatePalette();
|
||||||
|
pDC->SelectPalette( pOldPalette, TRUE );
|
||||||
|
TRACE(_T("Compress: new palette size = %d\n"), NumColors(m_pBMI->bmiHeader) );
|
||||||
|
return TRUE;
|
||||||
|
}
|
@ -1,6 +1,11 @@
|
|||||||
|
[window]
|
||||||
|
posx=1283
|
||||||
|
posy=380
|
||||||
|
sizx=320
|
||||||
|
sizy=200
|
||||||
[target]
|
[target]
|
||||||
title0=Last Bronx
|
title0=a10
|
||||||
path0=D:\Games\Last_Bronx\LB.EXE
|
path0=D:\Games\A10\A10Cuba.exe
|
||||||
module0=
|
module0=
|
||||||
opengllib0=
|
opengllib0=
|
||||||
ver0=0
|
ver0=0
|
||||||
@ -9,7 +14,7 @@ flag0=134217762
|
|||||||
flagg0=1207959552
|
flagg0=1207959552
|
||||||
flagh0=20
|
flagh0=20
|
||||||
flagi0=0
|
flagi0=0
|
||||||
tflag0=0
|
tflag0=64
|
||||||
initx0=0
|
initx0=0
|
||||||
inity0=0
|
inity0=0
|
||||||
minx0=0
|
minx0=0
|
Binary file not shown.
@ -119,6 +119,7 @@ BEGIN
|
|||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "Status", ID_VIEW_STATUS
|
MENUITEM "Status", ID_VIEW_STATUS
|
||||||
MENUITEM "Time Slider", ID_VIEW_TIMESLIDER
|
MENUITEM "Time Slider", ID_VIEW_TIMESLIDER
|
||||||
|
MENUITEM "Palette", ID_VIEW_PALETTE
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
@ -316,7 +317,7 @@ BEGIN
|
|||||||
GROUPBOX "Emulation",IDC_STATIC,7,109,98,61,WS_GROUP
|
GROUPBOX "Emulation",IDC_STATIC,7,109,98,61,WS_GROUP
|
||||||
CONTROL "Auto Primary Surface Refresh",IDC_AUTOREFRESH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,16,126,9
|
CONTROL "Auto Primary Surface Refresh",IDC_AUTOREFRESH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,16,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 "switch VIDEO to SYSTEM on fail",IDC_VIDEOTOSYSTEMMEM,
|
||||||
"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,118,28,126,9
|
"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,118,28,126,9
|
||||||
CONTROL "Suppress DX common errors",IDC_SUPPRESSDXERRORS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,40,127,10
|
CONTROL "Suppress DX common errors",IDC_SUPPRESSDXERRORS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,40,127,10
|
||||||
CONTROL "Make Backbuf attachable",IDC_BACKBUFATTACH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,52,119,10
|
CONTROL "Make Backbuf attachable",IDC_BACKBUFATTACH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,52,119,10
|
||||||
@ -341,6 +342,8 @@ BEGIN
|
|||||||
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,100,109,12
|
CONTROL "Set AERO compatible mode",IDC_SETCOMPATIBILITY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,100,109,12
|
||||||
CONTROL "Disable HAL support",IDC_DISABLEHAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,112,109,12
|
CONTROL "Disable HAL support",IDC_DISABLEHAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,112,109,12
|
||||||
|
CONTROL "Forces HEL ",IDC_FORCESHEL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,124,109,12
|
||||||
|
CONTROL "Win7 color fix",IDC_COLORFIX,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,136,109,12
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_TAB_MOUSE DIALOGEX 0, 0, 300, 240
|
IDD_TAB_MOUSE DIALOGEX 0, 0, 300, 240
|
||||||
@ -465,17 +468,30 @@ IDD_TAB_DEBUG 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
|
||||||
GROUPBOX "Debug flags",IDC_STATIC,7,3,140,144
|
GROUPBOX "Debug flags",IDC_STATIC,7,7,140,140
|
||||||
CONTROL "Simulate YUV to RGB color conv.",IDC_YUV2RGB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,36,119,9
|
CONTROL "Simulate YUV to RGB color conv.",IDC_YUV2RGB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,24,119,9
|
||||||
CONTROL "Simulate RGB to YUV color conv.",IDC_RGB2YUV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,48,119,9
|
CONTROL "Simulate RGB to YUV color conv.",IDC_RGB2YUV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,36,119,9
|
||||||
CONTROL "Highlight blit to primary",IDC_MARKBLIT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,24,99,10
|
CONTROL "Highlight blit to primary",IDC_MARKBLIT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,126,99,10
|
||||||
CONTROL "Full RECT Blit",IDC_FULLRECTBLT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,60,119,10
|
CONTROL "Full RECT Blit",IDC_FULLRECTBLT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,114,119,10
|
||||||
GROUPBOX "debug mode logs",IDC_STATIC,7,154,139,79
|
GROUPBOX "debug mode logs",IDC_STATIC,7,154,139,79
|
||||||
CONTROL "Assert Dialog",IDC_ASSERT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,166,73,11
|
CONTROL "Assert Dialog",IDC_ASSERT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,166,73,11
|
||||||
CONTROL "ddraw Proxy",IDC_DXPROXED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,178,73,9
|
CONTROL "ddraw Proxy",IDC_DXPROXED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,178,73,9
|
||||||
CONTROL "Warning for analytic surface mode",IDC_SURFACEWARN,
|
CONTROL "Warning for analytic surface mode",IDC_SURFACEWARN,
|
||||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,84,127,10
|
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,60,127,10
|
||||||
CONTROL "Analytic surface mode",IDC_ANALYTICMODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,72,127,10
|
CONTROL "Analytic surface mode",IDC_ANALYTICMODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,48,127,10
|
||||||
|
CONTROL "Enable capability mask",IDC_CAPMASK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,72,127,10
|
||||||
|
CONTROL "Suppress ddraw Blt to primary",IDC_NODDRAWBLT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,24,127,10
|
||||||
|
CONTROL "Suppress ddraw Flip",IDC_NODDRAWFLIP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,36,127,10
|
||||||
|
CONTROL "Suppress GDI Blt",IDC_NOGDIBLT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,48,127,10
|
||||||
|
GROUPBOX "Visual flags",IDC_STATIC,153,7,140,139
|
||||||
|
END
|
||||||
|
|
||||||
|
IDD_PALETTE DIALOGEX 0, 0, 169, 167
|
||||||
|
STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
|
||||||
|
CAPTION "DxWnd Palette"
|
||||||
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
|
BEGIN
|
||||||
|
CONTROL "",IDC_PALETTECOLORS,"Static",SS_WHITEFRAME | SS_CENTERIMAGE,2,2,163,163
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
@ -653,6 +669,14 @@ BEGIN
|
|||||||
TOPMARGIN, 7
|
TOPMARGIN, 7
|
||||||
BOTTOMMARGIN, 233
|
BOTTOMMARGIN, 233
|
||||||
END
|
END
|
||||||
|
|
||||||
|
IDD_PALETTE, DIALOG
|
||||||
|
BEGIN
|
||||||
|
LEFTMARGIN, 2
|
||||||
|
RIGHTMARGIN, 167
|
||||||
|
TOPMARGIN, 2
|
||||||
|
BOTTOMMARGIN, 165
|
||||||
|
END
|
||||||
END
|
END
|
||||||
#endif // APSTUDIO_INVOKED
|
#endif // APSTUDIO_INVOKED
|
||||||
|
|
||||||
@ -779,6 +803,25 @@ END
|
|||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Italian (Italy) resources
|
||||||
|
|
||||||
|
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ITA)
|
||||||
|
#ifdef _WIN32
|
||||||
|
LANGUAGE LANG_ITALIAN, SUBLANG_ITALIAN
|
||||||
|
#pragma code_page(1252)
|
||||||
|
#endif //_WIN32
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Bitmap
|
||||||
|
//
|
||||||
|
|
||||||
|
IDB_PALETTE BITMAP "res\\palette24.bmp"
|
||||||
|
#endif // Italian (Italy) resources
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
// English (U.K.) resources
|
// English (U.K.) resources
|
||||||
|
|
||||||
|
Binary file not shown.
@ -219,6 +219,10 @@
|
|||||||
Name="Source Files"
|
Name="Source Files"
|
||||||
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||||
>
|
>
|
||||||
|
<File
|
||||||
|
RelativePath=".\dib.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\dxTabCtrl.cpp"
|
RelativePath=".\dxTabCtrl.cpp"
|
||||||
>
|
>
|
||||||
@ -335,6 +339,14 @@
|
|||||||
/>
|
/>
|
||||||
</FileConfiguration>
|
</FileConfiguration>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\PaletteDialog.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\PaletteDialog.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\StatusDialog.cpp"
|
RelativePath=".\StatusDialog.cpp"
|
||||||
>
|
>
|
||||||
@ -438,6 +450,10 @@
|
|||||||
Name="Header Files"
|
Name="Header Files"
|
||||||
Filter="h;hpp;hxx;hm;inl"
|
Filter="h;hpp;hxx;hm;inl"
|
||||||
>
|
>
|
||||||
|
<File
|
||||||
|
RelativePath=".\cdib.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\dxTabCtrl.h"
|
RelativePath=".\dxTabCtrl.h"
|
||||||
>
|
>
|
||||||
@ -563,6 +579,10 @@
|
|||||||
RelativePath=".\res\idr_main.ico"
|
RelativePath=".\res\idr_main.ico"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\res\palette24.bmp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\res\run+33.ico"
|
RelativePath=".\res\run+33.ico"
|
||||||
>
|
>
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#include "TargetDlg.h"
|
#include "TargetDlg.h"
|
||||||
#include "SystemTray.h"
|
#include "SystemTray.h"
|
||||||
#include "StatusDialog.h"
|
#include "StatusDialog.h"
|
||||||
|
#include "PaletteDialog.h"
|
||||||
#include "TimeSliderDialog.h"
|
#include "TimeSliderDialog.h"
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
@ -62,6 +63,7 @@ BEGIN_MESSAGE_MAP(CDxwndhostView, CListView)
|
|||||||
ON_COMMAND(ID_RUN, OnRun)
|
ON_COMMAND(ID_RUN, OnRun)
|
||||||
ON_COMMAND(ID_TRAY_RESTORE, OnTrayRestore)
|
ON_COMMAND(ID_TRAY_RESTORE, OnTrayRestore)
|
||||||
ON_COMMAND(ID_VIEW_STATUS, OnViewStatus)
|
ON_COMMAND(ID_VIEW_STATUS, OnViewStatus)
|
||||||
|
ON_COMMAND(ID_VIEW_PALETTE, OnViewPalette)
|
||||||
ON_COMMAND(ID_VIEW_TIMESLIDER, OnViewTimeSlider)
|
ON_COMMAND(ID_VIEW_TIMESLIDER, OnViewTimeSlider)
|
||||||
//}}AFX_MSG_MAP
|
//}}AFX_MSG_MAP
|
||||||
END_MESSAGE_MAP()
|
END_MESSAGE_MAP()
|
||||||
@ -156,6 +158,8 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg)
|
|||||||
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_DisableHAL) t->flags3 |= DISABLEHAL;
|
||||||
|
if(dlg->m_ForcesHEL) t->flags3 |= FORCESHEL;
|
||||||
|
if(dlg->m_ColorFix) t->flags3 |= COLORFIX;
|
||||||
if(dlg->m_LockSysColors) t->flags3 |= LOCKSYSCOLORS;
|
if(dlg->m_LockSysColors) t->flags3 |= LOCKSYSCOLORS;
|
||||||
if(dlg->m_ForceYUVtoRGB) t->flags3 |= YUV2RGB;
|
if(dlg->m_ForceYUVtoRGB) t->flags3 |= YUV2RGB;
|
||||||
if(dlg->m_ForceRGBtoYUV) t->flags3 |= RGB2YUV;
|
if(dlg->m_ForceRGBtoYUV) t->flags3 |= RGB2YUV;
|
||||||
@ -214,6 +218,10 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg)
|
|||||||
if(dlg->m_FullRectBlt) t->flags2 |= FULLRECTBLT;
|
if(dlg->m_FullRectBlt) t->flags2 |= FULLRECTBLT;
|
||||||
if(dlg->m_NoPaletteUpdate) t->flags2 |= NOPALETTEUPDATE;
|
if(dlg->m_NoPaletteUpdate) t->flags2 |= NOPALETTEUPDATE;
|
||||||
if(dlg->m_SurfaceWarn) t->flags3 |= SURFACEWARN;
|
if(dlg->m_SurfaceWarn) t->flags3 |= SURFACEWARN;
|
||||||
|
if(dlg->m_CapMask) t->flags3 |= CAPMASK;
|
||||||
|
if(dlg->m_NoDDRAWBlt) t->flags3 |= NODDRAWBLT;
|
||||||
|
if(dlg->m_NoDDRAWFlip) t->flags3 |= NODDRAWFLIP;
|
||||||
|
if(dlg->m_NoGDIBlt) t->flags3 |= NOGDIBLT;
|
||||||
if(dlg->m_AnalyticMode) t->flags3 |= ANALYTICMODE;
|
if(dlg->m_AnalyticMode) t->flags3 |= ANALYTICMODE;
|
||||||
t->initx = dlg->m_InitX;
|
t->initx = dlg->m_InitX;
|
||||||
t->inity = dlg->m_InitY;
|
t->inity = dlg->m_InitY;
|
||||||
@ -280,6 +288,8 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg)
|
|||||||
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_DisableHAL = t->flags3 & DISABLEHAL ? 1 : 0;
|
||||||
|
dlg->m_ForcesHEL = t->flags3 & FORCESHEL ? 1 : 0;
|
||||||
|
dlg->m_ColorFix = t->flags3 & COLORFIX ? 1 : 0;
|
||||||
dlg->m_LockSysColors = t->flags3 & LOCKSYSCOLORS ? 1 : 0;
|
dlg->m_LockSysColors = t->flags3 & LOCKSYSCOLORS ? 1 : 0;
|
||||||
dlg->m_ForceRGBtoYUV = t->flags3 & RGB2YUV ? 1 : 0;
|
dlg->m_ForceRGBtoYUV = t->flags3 & RGB2YUV ? 1 : 0;
|
||||||
dlg->m_ForceYUVtoRGB = t->flags3 & YUV2RGB ? 1 : 0;
|
dlg->m_ForceYUVtoRGB = t->flags3 & YUV2RGB ? 1 : 0;
|
||||||
@ -342,6 +352,10 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg)
|
|||||||
dlg->m_FullRectBlt = t->flags2 & FULLRECTBLT ? 1 : 0;
|
dlg->m_FullRectBlt = t->flags2 & FULLRECTBLT ? 1 : 0;
|
||||||
dlg->m_NoPaletteUpdate = t->flags2 & NOPALETTEUPDATE ? 1 : 0;
|
dlg->m_NoPaletteUpdate = t->flags2 & NOPALETTEUPDATE ? 1 : 0;
|
||||||
dlg->m_SurfaceWarn = t->flags3 & SURFACEWARN ? 1 : 0;
|
dlg->m_SurfaceWarn = t->flags3 & SURFACEWARN ? 1 : 0;
|
||||||
|
dlg->m_CapMask = t->flags3 & CAPMASK ? 1 : 0;
|
||||||
|
dlg->m_NoDDRAWBlt = t->flags3 & NODDRAWBLT ? 1 : 0;
|
||||||
|
dlg->m_NoDDRAWFlip = t->flags3 & NODDRAWFLIP ? 1 : 0;
|
||||||
|
dlg->m_NoGDIBlt = t->flags3 & NOGDIBLT ? 1 : 0;
|
||||||
dlg->m_AnalyticMode = t->flags3 & ANALYTICMODE ? 1 : 0;
|
dlg->m_AnalyticMode = t->flags3 & ANALYTICMODE ? 1 : 0;
|
||||||
dlg->m_InitX = t->initx;
|
dlg->m_InitX = t->initx;
|
||||||
dlg->m_InitY = t->inity;
|
dlg->m_InitY = t->inity;
|
||||||
@ -1302,6 +1316,13 @@ void CDxwndhostView::OnViewStatus()
|
|||||||
pDlg->ShowWindow(SW_SHOW);
|
pDlg->ShowWindow(SW_SHOW);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CDxwndhostView::OnViewPalette()
|
||||||
|
{
|
||||||
|
CPaletteDialog *pDlg = new CPaletteDialog();
|
||||||
|
BOOL ret = pDlg->Create(CPaletteDialog::IDD, this);
|
||||||
|
pDlg->ShowWindow(SW_SHOW);
|
||||||
|
}
|
||||||
|
|
||||||
void CDxwndhostView::OnViewTimeSlider()
|
void CDxwndhostView::OnViewTimeSlider()
|
||||||
{
|
{
|
||||||
CTimeSliderDialog *pDlg = new CTimeSliderDialog();
|
CTimeSliderDialog *pDlg = new CTimeSliderDialog();
|
||||||
|
@ -83,6 +83,7 @@ protected:
|
|||||||
afx_msg void OnHookStop();
|
afx_msg void OnHookStop();
|
||||||
afx_msg void OnTrayRestore();
|
afx_msg void OnTrayRestore();
|
||||||
afx_msg void OnViewStatus();
|
afx_msg void OnViewStatus();
|
||||||
|
afx_msg void OnViewPalette();
|
||||||
afx_msg void OnViewTimeSlider();
|
afx_msg void OnViewTimeSlider();
|
||||||
afx_msg void OnExit();
|
afx_msg void OnExit();
|
||||||
//}}AFX_MSG
|
//}}AFX_MSG
|
||||||
|
BIN
host/palette.bmp
Normal file
BIN
host/palette.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 246 B |
Binary file not shown.
Before Width: | Height: | Size: 1.2 KiB |
BIN
host/res/palette24.bmp
Normal file
BIN
host/res/palette24.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 822 B |
Loading…
x
Reference in New Issue
Block a user