1
0
mirror of https://github.com/DxWnd/DxWnd.reloaded synced 2024-12-30 09:25:35 +01:00

v2_03_76_src

Former-commit-id: de16aed276acc5dbc8558b60cb9f7524446d2868
This commit is contained in:
gho tik 2016-07-13 12:46:31 -04:00 committed by Refael ACkermann
parent 2c28c3a77b
commit 09ac6acd98
32 changed files with 425 additions and 130 deletions

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3a374cec9f980973164610e2661704aa5658ea7e19901b5e61aa72207c7624b3
oid sha256:e285a1e111688d9564456ef3cba3955cbf10fd56e711280c3da2c5028c4b734e
size 660480

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d041afd6e18a75dc3b7316a913318827696603e87d9f8e6a06da4da57ccdbf53
size 643072
oid sha256:45173c58df52cbfe63834fb949adf1dc91809a0fce0acdad63069e1c7a20d71a
size 642560

View File

@ -1,41 +0,0 @@
[target]
title0=Mechwarrior 3 (high res)
path0=D:\Games\Mechwarrior 3 - RIP\Mech3.exe
launchpath0=
module0=
opengllib0=
notes0=
registry0=\n[HKEY_LOCAL_MACHINE\Software]\n[HKEY_LOCAL_MACHINE\Software\MicroProse]\n[HKEY_LOCAL_MACHINE\Software\MicroProse\MechWarrior 3 EP1]\n[HKEY_LOCAL_MACHINE\Software\MicroProse\MechWarrior 3 EP1\1.0]\n"Program"="..\\"\n"Version"="1.0"\n"InstallOptions"=dword:00050707\n\n[HKEY_LOCAL_MACHINE\Software\Microsoft]\n[HKEY_LOCAL_MACHINE\Software\Microsoft\DirectPlay]\n[HKEY_LOCAL_MACHINE\Software\Microsoft\DirectPlay\Applications]\n[HKEY_LOCAL_MACHINE\Software\Microsoft\DirectPlay\Applications\MechWarrior 3 EP1]\n"Guid"="{FA96C421-18DD-11D3-95AF-0060089877F0}"\n"File"="Mech3.exe"\n"CommandLine"="\n"Path"=".\\"\n"CurrentDirectory"=".\\"\n\n[HKEY_CURRENT_USER\Software]\n[HKEY_CURRENT_USER\Software\MicroProse]\n[HKEY_CURRENT_USER\Software\MicroProse\MechWarrior 3]\n[HKEY_CURRENT_USER\Software\MicroProse\MechWarrior 3\1.0]\n"InGameVMode"=dword:0000000a
ver0=0
coord0=0
flag0=136331398
flagg0=1207959552
flagh0=9236
flagi0=1277165574
flagj0=4224
flagk0=65600
flagl0=0
flagm0=0
tflag0=0
dflag0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=-1
swapeffect0=0
maxddinterface0=7
slowratio0=1
title1=Mechwarrior 3 (high res)
module1=
opengllib1=
dflag1=0
[window]
posx=915
posy=519
sizx=320
sizy=200
exportpath=D:\DxWnd\exports.ok\

View File

@ -0,0 +1,31 @@
[target]
title0=Dethkarz
path0=D:\Games\Dethkarz\Dethkarz.exe
launchpath0=
module0=
opengllib0=
notes0=On Win7, FORCECLIPPER is requested\nOn Win10, FORCECLIPPER is not necessary and may cause program crash:\neither unckeck FORCECLIPPER or check HANDLEEXCEPTIONS seems to fix the problem
registry0=
ver0=0
coord0=0
flag0=679477282
flagg0=1207959552
flagh0=8212
flagi0=138416132
flagj0=1073741952
flagk0=65536
flagl0=0
flagm0=0
tflag0=0
dflag0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=3
swapeffect0=0
maxddinterface0=7
slowratio0=2

View File

@ -0,0 +1,31 @@
[target]
title0=End of Twilight
path0=D:\Games\End of Twilight\bin\mol.exe
launchpath0=
module0=
opengllib0=
notes0=
registry0=
ver0=0
coord0=0
flag0=136314914
flagg0=1744830464
flagh0=20
flagi0=138412036
flagj0=4224
flagk0=327680
flagl0=0
flagm0=0
tflag0=0
dflag0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=-1
swapeffect0=0
maxddinterface0=7
slowratio0=2

31
build/exports/GP 500.dxw Normal file
View File

@ -0,0 +1,31 @@
[target]
title0=GP 500
path0=D:\Games\gp500\gp500_win2k.exe
launchpath0=
module0=
opengllib0=
notes0=
registry0=
ver0=0
coord0=0
flag0=681590834
flagg0=1744830464
flagh0=20
flagi0=138412036
flagj0=4224
flagk0=-2147418110
flagl0=0
flagm0=0
tflag0=0
dflag0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=-1
swapeffect0=0
maxddinterface0=7
slowratio0=2

View File

@ -0,0 +1,31 @@
[target]
title0=Hot Chix 'n' Gear Stix (demo)
path0=D:\Games\Hot Chix 'n' Gear Stix\HotChix.exe
launchpath0=
module0=
opengllib0=
notes0=
registry0=
ver0=0
coord0=0
flag0=136314914
flagg0=1749024768
flagh0=20
flagi0=138412036
flagj0=4224
flagk0=65536
flagl0=0
flagm0=0
tflag0=0
dflag0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=-1
swapeffect0=0
maxddinterface0=7
slowratio0=2

View File

@ -0,0 +1,31 @@
[target]
title0=MoonBase Commander
path0=D:\Games\MoonBase Commander\Moonbase.exe
launchpath0=
module0=
opengllib0=
notes0=
registry0=
ver0=0
coord0=0
flag0=-2011168734
flagg0=1744830464
flagh0=20
flagi0=138416132
flagj0=4224
flagk0=65536
flagl0=0
flagm0=0
tflag0=0
dflag0=0
posx0=50
posy0=50
sizx0=640
sizy0=480
maxfps0=0
initts0=0
winver0=0
maxres0=3
swapeffect0=0
maxddinterface0=7
slowratio0=2

View File

@ -0,0 +1,31 @@
[target]
title0=SuperChix'76 (demo)
path0=*\HotChix2.exe
launchpath0=
module0=
opengllib0=
notes0=
registry0=
ver0=0
coord0=0
flag0=203423778
flagg0=1207959552
flagh0=532
flagi0=138412036
flagj0=134221952
flagk0=65536
flagl0=8
flagm0=0
tflag0=0
dflag0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=-1
swapeffect0=0
maxddinterface0=7
slowratio0=4

View File

@ -0,0 +1,31 @@
[target]
title0=Tone Rebellion Leviathan
path0=D:\Games\Tone Rebellion\FLOAT.EXE
launchpath0=
module0=
opengllib0=
notes0=
registry0=
ver0=0
coord0=0
flag0=-2011168734
flagg0=1207959552
flagh0=20
flagi0=138412036
flagj0=4224
flagk0=65536
flagl0=0
flagm0=0
tflag0=0
dflag0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=-1
swapeffect0=0
maxddinterface0=7
slowratio0=2

View File

@ -0,0 +1,31 @@
[target]
title0=Totò Sapore e il magico sapore della pizza
path0=D:\Program Files (x86)\Totò Sapore\Artematica.exe
launchpath0=
module0=
opengllib0=
notes0=
registry0=
ver0=0
coord0=0
flag0=136314914
flagg0=1207959552
flagh0=20
flagi0=134217732
flagj0=4224
flagk0=65536
flagl0=0
flagm0=0
tflag0=0
dflag0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=-1
swapeffect0=0
maxddinterface0=7
slowratio0=2

View File

@ -0,0 +1,31 @@
[target]
title0=Warlords Battlecry 3 (GOG)
path0=D:\Games\Warlords Battlecry 3 (GOG)\Battlecry III.exe
launchpath0=
module0=
opengllib0=
notes0=
registry0=
ver0=0
coord0=0
flag0=136314914
flagg0=1207959552
flagh0=20
flagi0=134217732
flagj0=4224
flagk0=65536
flagl0=0
flagm0=0
tflag0=0
dflag0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=-1
swapeffect0=0
maxddinterface0=7
slowratio0=2

View File

@ -0,0 +1,31 @@
[target]
title0=Yu No (english patch)
path0=D:\Games\Yu no\Classics\YUNO\AI5ENG.EXE
launchpath0=
module0=
opengllib0=
notes0=
registry0=
ver0=0
coord0=0
flag0=681574432
flagg0=1207959552
flagh0=20
flagi0=138412036
flagj0=8392832
flagk0=67436544
flagl0=4
flagm0=0
tflag0=0
dflag0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=-1
swapeffect0=0
maxddinterface0=7
slowratio0=2

19
build/exports/dxwnd.reg Normal file
View File

@ -0,0 +1,19 @@
[HKEY_LOCAL_MACHINE\Software]
[HKEY_LOCAL_MACHINE\Software\MicroProse]
[HKEY_LOCAL_MACHINE\Software\MicroProse\MechWarrior 3 EP1]
[HKEY_LOCAL_MACHINE\Software\MicroProse\MechWarrior 3 EP1\1.0]
"Program"="..\\"
"Version"="1.0"
"InstallOptions"=dword:00050707
[HKEY_LOCAL_MACHINE\Software\Microsoft]
[HKEY_LOCAL_MACHINE\Software\Microsoft\DirectPlay]
[HKEY_LOCAL_MACHINE\Software\Microsoft\DirectPlay\Applications]
[HKEY_LOCAL_MACHINE\Software\Microsoft\DirectPlay\Applications\MechWarrior 3 EP1]
"Guid"="{FA96C421-18DD-11D3-95AF-0060089877F0}"
"File"="Mech3.exe"
"CommandLine"="
"Path"=".\\"
"CurrentDirectory"=".\\"

View File

@ -1158,4 +1158,14 @@ fix: DC leakage caused by CreateCompatibleDC. Fix "Mechwarrior 3" repeated play
add: GUI drag & drop of game executables
fix: RegQueryValueEx bad retcode when Data ptr is NULL
fix: recovered support for Windows XP
fix: fake registry did not read last registry line! Fixed.
fix: fake registry did not read last registry line! Fixed.
v2.03.76
fix: DC handle leakage in several places, this also fixed GDI "emulated devie context" mode.
fix: FillRect wrapper, fixed coordinate remapping with wrong values. Fixes "Imperialism" menu and detailed view.
fix: suppressed "reuse emulated DC" flag: it was no longer referenced in the code.
fix: workaround for occasional DDERR_INVALIDPARAMS error in service GetDisplayMode to detect current video mode.
fix: code cleanup: eliminated CREATEDESKTOP handling, experimental and no longer supported
fix: vdxcore::IsToRemap now detects the NULL dc handle as remappable DC
fix: some logging imperfections
fix: palette log message crashing the program

View File

@ -2052,6 +2052,16 @@ HRESULT WINAPI extSetDisplayMode(int dxversion, LPDIRECTDRAW lpdd,
case 7: ddsd.dwSize=sizeof(LPDDSURFACEDESC2); res=(*pGetDisplayMode7)(lpdd, &ddsd); break;
}
if(res){
OutTraceE("SetDisplayMode: GetDisplayMode err=%x(%s)\n", res, ExplainDDError(res));
// fix for Win10 platform returning DDERR_INVALIDPARAMS
RECT desktop;
ddsd.ddpfPixelFormat.dwRGBBitCount = 32;
(*pGetClientRect)((*pGetDesktopWindow)(), &desktop);
ddsd.dwWidth = desktop.right;
ddsd.dwHeight = desktop.bottom;
}
OutTraceB("SetDisplayMode: detected screen size=(%dx%d)\n", ddsd.dwWidth, ddsd.dwHeight);
if(dxw.Windowize){
@ -2074,7 +2084,7 @@ HRESULT WINAPI extSetDisplayMode(int dxversion, LPDIRECTDRAW lpdd,
case 4: res=(*pSetDisplayMode4)(lpdd, dwwidth, dwheight, dwbpp, ddsd.dwRefreshRate, 0); break;
case 7: res=(*pSetDisplayMode7)(lpdd, dwwidth, dwheight, dwbpp, ddsd.dwRefreshRate, 0); break;
}
if(res) OutTraceE("SetDisplayMode: error=%x\n", res);
if(res) OutTraceE("SetDisplayMode: error=%x(%s)\n", res, ExplainDDError(res));
SetVSyncDelays(dxversion, lpdd);
// set a default palette ???

View File

@ -121,7 +121,7 @@ static char *Flag6Names[32]={
"FIXPITCH", "POWER2WIDTH", "HIDETASKBAR", "ACTIVATEAPP",
"NOSYSMEMPRIMARY", "NOSYSMEMBACKBUF", "CONFIRMONCLOSE", "TERMINATEONCLOSE",
"FLIPEMULATION", "SETZBUFFERBITDEPTHS", "SHAREDDC", "WOW32REGISTRY",
"STRETCHMOVIES", "BYPASSMCI", "FIXPIXELZOOM", "REUSEEMULATEDDC",
"STRETCHMOVIES", "BYPASSMCI", "FIXPIXELZOOM", "---REUSEEMULATEDDC---",
"CREATEDESKTOP", "NOWINDOWHOOKS", "SYNCPALETTE", "VIRTUALJOYSTICK",
"UNACQUIRE", "HOOKGOGLIBS", "BYPASSGOGLIBS", "EMULATERELMOUSE",
};
@ -1359,21 +1359,11 @@ void HookInit(TARGETMAP *target, HWND hwnd)
if(dxw.dwFlags4 & ENABLEHOTKEYS) dxw.MapKeysInit();
}
if(dxw.dwFlags6 & CREATEDESKTOP){
RECT TargetPos;
TargetPos.left = target->posx;
TargetPos.right = target->posx+target->sizx;
TargetPos.top = target->posy;
TargetPos.bottom = target->posy+target->sizy;
if (!hDesktopWindow) hDesktopWindow=CreateVirtualDesktop(&TargetPos);
}
if(IsTraceDW){
char sInfo[1024];
OSVERSIONINFO osinfo;
strcpy(sInfo, "");
if(hwnd) sprintf(sInfo, " hWnd=%x(hdc=%x) dxw.hParentWnd=%x(hdc=%x) desktop=%x(hdc=%x)",
hwnd, GetDC(hwnd), dxw.hParentWnd, GetDC(dxw.hParentWnd), GetDesktopWindow(), GetDC(GetDesktopWindow()));
if(hwnd) sprintf(sInfo, " hWnd=%x ParentWnd=%x desktop=%x", hwnd, dxw.hParentWnd, GetDesktopWindow());
OutTrace("HookInit: path=\"%s\" module=\"%s\" dxversion=%s pos=(%d,%d) size=(%d,%d)%s\n",
target->path, target->module, dxversions[dxw.dwTargetDDVersion],
target->posx, target->posy, target->sizx, target->sizy, sInfo);
@ -1438,14 +1428,6 @@ void HookInit(TARGETMAP *target, HWND hwnd)
}
}
if(dxw.dwFlags6 & CREATEDESKTOP){
if (hDesktopWindow){
OutTraceDW("HookInit: set new parent=%x to main win=%x\n", hDesktopWindow, dxw.hChildWnd);
SetParent(dxw.hChildWnd, hDesktopWindow);
dxw.hParentWnd = hDesktopWindow;
}
}
#ifdef CHECKFORCOMPATIBILITYFLAGS
CheckCompatibilityFlags(); // v2.02.83 Check for change of OS release
#endif

View File

@ -78,6 +78,7 @@ BOOL dxwCore::IsFullScreen()
BOOL dxwCore::IsToRemap(HDC hdc)
{
if(!hdc) return TRUE;
return (Windowize && FullScreen && (OBJ_DC == (*pGetObjectType)(hdc)));
}
@ -483,12 +484,11 @@ void dxwCore::SethWnd(HWND hwnd)
hWnd=hwnd;
hWndFPS=hwnd;
RealHDC=(*pGDIGetDC)(hwnd);
if(hwnd){
(*pGetWindowRect)(hwnd, &WinRect);
OutTraceDW("SethWnd: setting main win=%x hdc=%x pos=(%d,%d)-(%d,%d)\n",
hwnd, RealHDC, WinRect.left, WinRect.top, WinRect.right, WinRect.bottom);
OutTraceDW("SethWnd: setting main win=%x pos=(%d,%d)-(%d,%d)\n",
hwnd, WinRect.left, WinRect.top, WinRect.right, WinRect.bottom);
}
else{
OutTraceDW("SethWnd: clearing main win\n");
@ -1454,13 +1454,13 @@ void dxwCore::ShowBanner(HWND hwnd)
POINT PrevViewPort;
int StretchMode;
hClientDC=(*pGDIGetDC)(hwnd);
(*pGetClientRect)(hwnd, &client);
(*pGDIBitBlt)(hClientDC, 0, 0, client.right, client.bottom, NULL, 0, 0, BLACKNESS);
if(JustOnce || (dwFlags2 & NOBANNER)) return;
JustOnce=TRUE;
hClientDC=(*pGDIGetDC)(hwnd);
(*pGetClientRect)(hwnd, &client);
(*pGDIBitBlt)(hClientDC, 0, 0, client.right, client.bottom, NULL, 0, 0, BLACKNESS);
g_hbmBall = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BANNER));
HDC hdcMem = CreateCompatibleDC(hClientDC);
HBITMAP hbmOld = (HBITMAP)SelectObject(hdcMem, g_hbmBall);
@ -1493,6 +1493,7 @@ void dxwCore::ShowBanner(HWND hwnd)
(*pSetViewportOrgEx)(hClientDC, PrevViewPort.x, PrevViewPort.y, NULL);
SelectObject(hdcMem, hbmOld);
DeleteDC(hdcMem);
(*pGDIReleaseDC)(hwnd, hClientDC);
Sleep(200);
}
@ -1597,7 +1598,8 @@ HDC dxwCore::AcquireEmulatedDC(HWND hwnd)
HDC wdc;
RECT WinRect;
if(!(wdc=(*pGDIGetDC)(hwnd))){
if(RealHDC) (*pGDIReleaseDC)(WindowFromDC(RealHDC), RealHDC); // fixed DC leakage
if(!(wdc=(*pGDIGetDC)(hwnd))){ // potential DC leakage
OutTraceE("GetDC: ERROR err=%d at=%d\n", GetLastError(), __LINE__);
return NULL;
}
@ -1659,14 +1661,16 @@ BOOL dxwCore::ReleaseEmulatedDC(HWND hwnd)
WinRect.left, WinRect.top, WinRect.right, WinRect.bottom,
VirtualPicRect.left, VirtualPicRect.top, VirtualPicRect.right, VirtualPicRect.bottom);
if(!(wdc=(*pGDIGetDC)(hwnd)))
if(!(wdc=(*pGDIGetDC)(hwnd))) // potential DC leakage
OutTraceE("GetDC: ERROR err=%d at=%d\n", GetLastError(), __LINE__);
SetStretchBltMode(wdc, HALFTONE);
SetStretchBltMode(VirtualHDC, HALFTONE);
if(!(*pGDIStretchBlt)(wdc, 0, 0, WinRect.right, WinRect.bottom, VirtualHDC, 0, 0, VirtualPicRect.right, VirtualPicRect.bottom, SRCCOPY))
OutTraceE("StretchBlt: ERROR err=%d at=%d\n", GetLastError(), __LINE__);
//(*pInvalidateRect)(hwnd, NULL, 0);
(*pGDIReleaseDC)(hwnd, wdc); // fixed DC leakage
(*pGDIReleaseDC)(hwnd, VirtualHDC);
VirtualHDC=NULL; // no longer valid
return TRUE;
}

View File

@ -27,7 +27,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "TlHelp32.h"
#define VERSION "2.03.75.fix1"
#define VERSION "2.03.76"
#define DDTHREADLOCK 1
//#define LOCKTHREADS

Binary file not shown.

View File

@ -798,7 +798,7 @@ UINT WINAPI extGetSystemPaletteEntries(HDC hdc, UINT iStartIndex, UINT nEntries,
ret = nEntries;
OutTraceDW("GetSystemPaletteEntries: FIXED ret=%d\n", ret);
}
if(IsDebug) dxw.DumpPalette(nEntries, &lppe[iStartIndex]);
if(IsDebug) dxw.DumpPalette(nEntries, lppe);
return ret;
}
@ -819,7 +819,7 @@ UINT WINAPI extGetPaletteEntries(HPALETTE hpal, UINT iStartIndex, UINT nEntries,
res = nEntries;
OutTraceDW("GDI.GetPaletteEntries: faking missing entries=%d\n", res);
}
if(IsDebug && res) dxw.DumpPalette(res, &lppe[iStartIndex]);
if(IsDebug && res) dxw.DumpPalette(res, lppe);
//mySetPalette(0, nEntries, lppe);
return res;
}
@ -928,19 +928,15 @@ HDC WINAPI extGDICreateCompatibleDC(HDC hdc)
OutTraceDW("GDI.CreateCompatibleDC: hdc=%x\n", hdc);
if(hdc==0){
hdc=(*pGDIGetDC)(dxw.GethWnd());
hdc=(*pGDIGetDC)(dxw.GethWnd()); // potential DC leakage
bSwitchedToMainWin = TRUE;
if(dxw.dwFlags6 & CREATEDESKTOP){
extern HWND hDesktopWindow;
hdc=(*pGDIGetDC)(hDesktopWindow);
}
OutTraceDW("GDI.CreateCompatibleDC: duplicating win HDC hWnd=%x\n", dxw.GethWnd());
}
// eliminated error message for errorcode 0.
SetLastError(0);
RetHdc=(*pGDICreateCompatibleDC)(hdc);
if(bSwitchedToMainWin) (*pGDIReleaseDC)(dxw.GethWnd(),hdc);
if(bSwitchedToMainWin) (*pGDIReleaseDC)(dxw.GethWnd(),hdc); // fixed DC leakage
LastError=GetLastError();
if(LastError == 0){
OutTraceDW("GDI.CreateCompatibleDC: returning HDC=%x\n", RetHdc);
@ -2644,6 +2640,8 @@ int WINAPI extAddFontResourceW(LPCWSTR lpszFontFile)
BOOL WINAPI extGDISetPixelFormat(HDC hdc, int iPixelFormat, const PIXELFORMATDESCRIPTOR *ppfd)
{
BOOL res;
BOOL bRemappedDC = FALSE;
OutTraceDW("SetPixelFormat: hdc=%x PixelFormat=%d Flags=%x PixelType=%x(%s) ColorBits=%d RGBdepth=(%d,%d,%d) RGBshift=(%d,%d,%d)\n",
hdc, iPixelFormat,
ppfd->dwFlags, ppfd->iPixelType, ppfd->iPixelType?"PFD_TYPE_COLORINDEX":"PFD_TYPE_RGBA", ppfd->cColorBits,
@ -2658,10 +2656,12 @@ BOOL WINAPI extGDISetPixelFormat(HDC hdc, int iPixelFormat, const PIXELFORMATDES
//}
if(dxw.IsDesktop(WindowFromDC(hdc))){
HDC oldhdc = hdc;
hdc=(*pGDIGetDC)(dxw.GethWnd());
hdc=(*pGDIGetDC)(dxw.GethWnd()); // potential DC leakage
bRemappedDC = TRUE;
OutTraceDW("SetPixelFormat: remapped desktop hdc=%x->%x hWnd=%x\n", oldhdc, hdc, dxw.GethWnd());
}
res=(*pGDISetPixelFormat)(hdc, iPixelFormat, ppfd);
if(bRemappedDC) (*pGDIReleaseDC)(dxw.GethWnd(), hdc); // fixed DC leakage
dxw.ActualPixelFormat.dwRGBBitCount = ppfd->cColorBits;
if(!res) OutTraceE("SetPixelFormat: ERROR err=%d at=%d\n", GetLastError(), __LINE__);
return res;
@ -2670,15 +2670,18 @@ BOOL WINAPI extGDISetPixelFormat(HDC hdc, int iPixelFormat, const PIXELFORMATDES
int WINAPI extGDIGetPixelFormat(HDC hdc)
{
int res;
BOOL bRemappedDC = FALSE;
OutTraceDW("GetPixelFormat: hdc=%x\n", hdc);
if(dxw.IsDesktop(WindowFromDC(hdc))){
HDC oldhdc = hdc;
hdc=(*pGDIGetDC)(dxw.GethWnd());
hdc=(*pGDIGetDC)(dxw.GethWnd()); // potential DC leakage
bRemappedDC = TRUE;
OutTraceDW("GetPixelFormat: remapped desktop hdc=%x->%x hWnd=%x\n", oldhdc, hdc, dxw.GethWnd());
}
res=(*pGDIGetPixelFormat)(hdc);
if(!res) OutTraceE("GetPixelFormat: ERROR err=%d at=%d\n", GetLastError(), __LINE__);
else OutTraceDW("GetPixelFormat: res=%d\n", res);
if(bRemappedDC)(*pGDIReleaseDC)(dxw.GethWnd(), hdc); // fixed DC leakage
return res;
}

View File

@ -1301,11 +1301,6 @@ HWND WINAPI extGetDesktopWindow(void)
OutTraceDW("GetDesktopWindow: FullScreen=%x\n", dxw.IsFullScreen());
if (dxw.IsFullScreen()){
if(dxw.dwFlags6 & CREATEDESKTOP){
extern HWND hDesktopWindow;
OutTraceDW("GetDesktopWindow: returning desktop emulated hwnd=%x\n", hDesktopWindow);
return hDesktopWindow;
}
OutTraceDW("GetDesktopWindow: returning main window hwnd=%x\n", dxw.GethWnd());
return dxw.GethWnd();
}
@ -1515,14 +1510,6 @@ static HWND WINAPI extCreateWindowCommon(
dwStyle &= ~WS_MAXIMIZE;
}
if(dxw.dwFlags6 & CREATEDESKTOP){
extern HWND hDesktopWindow;
if (dxw.IsRealDesktop(hWndParent)){
OutTraceE("%s: new parent win %x->%x\n", ApiName, hWndParent, hDesktopWindow);
hWndParent=hDesktopWindow;
}
}
// v2.1.92: fixes size & position for auxiliary big window, often used
// for intro movies etc. : needed for ......
// evidently, this was supposed to be a fullscreen window....
@ -1890,12 +1877,18 @@ static int HandleRect(char *ApiName, void *pFun, HDC hdc, const RECT *lprc, HBRU
RECT client;
HWND hwnd;
hwnd=WindowFromDC(hdc);
(*pGetClientRect)(hwnd, &client);
if(rc.left < 0) rc.left=0;
if(rc.top < 0) rc.top=0;
if(rc.right > client.right) rc.right=client.right;
if(rc.bottom > client.bottom) rc.bottom=client.bottom;
OutTraceDW("%s: remapped hdc from hwnd=%x to rect=(%d,%d)-(%d,%d)\n", ApiName, hwnd, rc.left, rc.top, rc.right, rc.bottom);
// v2.03.76 fix: sometimes WindowFromDC returns NULL with unpredictable results
// if NULL, try to bount within the main window rect
if(!hwnd) hwnd=dxw.GethWnd();
// if still NULL, avoid doing changes
if(hwnd){
(*pGetClientRect)(hwnd, &client);
if(rc.left < client.left) rc.left=client.left;
if(rc.top < client.top) rc.top=client.top;
if(rc.right > client.right) rc.right=client.right;
if(rc.bottom > client.bottom) rc.bottom=client.bottom;
OutTraceDW("%s: remapped hdc from hwnd=%x to rect=(%d,%d)-(%d,%d)\n", ApiName, hwnd, rc.left, rc.top, rc.right, rc.bottom);
}
}
res=(*(FillRect_Type)pFun)(hdc, &rc, hbr);
@ -1909,7 +1902,7 @@ int WINAPI extFillRect(HDC hdc, const RECT *lprc, HBRUSH hbr)
int WINAPI extFrameRect(HDC hdc, const RECT *lprc, HBRUSH hbr)
{
return HandleRect("FramelRect", (void *)pFrameRect, hdc, lprc, hbr);
return HandleRect("FrameRect", (void *)pFrameRect, hdc, lprc, hbr);
}
BOOL WINAPI extInvertRect(HDC hdc, const RECT *lprc)
@ -2331,7 +2324,7 @@ BOOL WINAPI extEndPaint(HWND hwnd, const PAINTSTRUCT *lpPaint)
{
BOOL ret;
OutTraceDW("GDI.EndPaint: hwnd=%x lpPaint=%x lpPaint.hdc=%x lpPaint.rcpaint=(%d,%d)-(%d-%d)\n",
OutTraceDW("GDI.EndPaint: hwnd=%x lpPaint=%x lpPaint.hdc=%x lpPaint.rcpaint=(%d,%d)-(%d,%d)\n",
hwnd, lpPaint, lpPaint->hdc, lpPaint->rcPaint.left, lpPaint->rcPaint.top, lpPaint->rcPaint.right, lpPaint->rcPaint.bottom);
// if not fullscreen or not desktop win, just proxy the call

View File

@ -32,9 +32,7 @@ void CTabSysLibs::DoDataExchange(CDataExchange* pDX)
DDX_Radio(pDX, IDC_GDINONE, cTarget->m_DCEmulationMode);
DDX_Check(pDX, IDC_FIXTEXTOUT, cTarget->m_FixTextOut);
DDX_Check(pDX, IDC_NOFILLRECT, cTarget->m_NoFillRect);
DDX_Check(pDX, IDC_REUSEEMULATEDDC, cTarget->m_ReuseEmulatedDC);
DDX_Check(pDX, IDC_FIXCLIPPERAREA, cTarget->m_FixClipperArea);
DDX_Check(pDX, IDC_CREATEDESKTOP, cTarget->m_CreateDesktop);
DDX_Check(pDX, IDC_SYNCPALETTE, cTarget->m_SyncPalette);
DDX_Check(pDX, IDC_NOWINERRORS, cTarget->m_NoWinErrors);

View File

@ -219,9 +219,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
m_NoDDRAWFlip = FALSE;
m_NoGDIBlt = FALSE;
m_NoFillRect = FALSE;
m_ReuseEmulatedDC = FALSE; // ??
m_FixClipperArea = FALSE; // ??
m_CreateDesktop = FALSE;
m_SyncPalette = FALSE;
m_NoWinErrors = FALSE;
m_AnalyticMode = FALSE;

View File

@ -178,9 +178,7 @@ public:
BOOL m_NoDDRAWFlip;
BOOL m_NoGDIBlt;
BOOL m_NoFillRect;
BOOL m_ReuseEmulatedDC;
BOOL m_FixClipperArea;
BOOL m_CreateDesktop;
BOOL m_SyncPalette;
BOOL m_NoWinErrors;
BOOL m_AnalyticMode;

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -722,22 +722,22 @@
>
</File>
</Filter>
<File
RelativePath=".\res\alt-ctrl-shift.png"
>
</File>
<File
RelativePath=".\alt-ctrl-shift.png"
>
</File>
<File
RelativePath=".\alt.png"
RelativePath=".\res\alt-ctrl-shift.png"
>
</File>
<File
RelativePath=".\res\alt.png"
>
</File>
<File
RelativePath=".\alt.png"
>
</File>
<File
RelativePath=".\resource"
>

View File

@ -461,9 +461,7 @@ void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg)
if(dlg->m_NoDDRAWFlip) t->flags3 |= NODDRAWFLIP;
if(dlg->m_NoGDIBlt) t->flags3 |= NOGDIBLT;
if(dlg->m_NoFillRect) t->flags4 |= NOFILLRECT;
if(dlg->m_ReuseEmulatedDC) t->flags6 |= REUSEEMULATEDDC;
if(dlg->m_FixClipperArea) t->flags7 |= FIXCLIPPERAREA;
if(dlg->m_CreateDesktop) t->flags6 |= CREATEDESKTOP;
if(dlg->m_SyncPalette) t->flags6 |= SYNCPALETTE;
if(dlg->m_NoWinErrors) t->flags7 |= NOWINERRORS;
if(dlg->m_AnalyticMode) t->flags3 |= ANALYTICMODE;
@ -733,9 +731,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg)
dlg->m_NoDDRAWFlip = t->flags3 & NODDRAWFLIP ? 1 : 0;
dlg->m_NoGDIBlt = t->flags3 & NOGDIBLT ? 1 : 0;
dlg->m_NoFillRect = t->flags4 & NOFILLRECT ? 1 : 0;
dlg->m_ReuseEmulatedDC = t->flags6 & REUSEEMULATEDDC ? 1 : 0;
dlg->m_FixClipperArea = t->flags7 & FIXCLIPPERAREA ? 1 : 0;
dlg->m_CreateDesktop = t->flags6 & CREATEDESKTOP ? 1 : 0;
dlg->m_SyncPalette = t->flags6 & SYNCPALETTE ? 1 : 0;
dlg->m_NoWinErrors = t->flags7 & NOWINERRORS ? 1 : 0;
dlg->m_AnalyticMode = t->flags3 & ANALYTICMODE ? 1 : 0;
@ -1309,7 +1305,7 @@ void CDxwndhostView::OnExport()
}
}
void CDxwndhostView::OnImport(CString sFilePath)
BOOL CDxwndhostView::OnImport(CString sFilePath)
{
LV_ITEM listitem;
int i;
@ -1317,7 +1313,7 @@ void CDxwndhostView::OnImport(CString sFilePath)
;
if (i==MAXTARGETS) {
MessageBoxLang(DXW_STRING_MAXENTRIES, DXW_STRING_WARNING, MB_OK | MB_ICONEXCLAMATION);
return;
return FALSE;
}
CListCtrl& listctrl = GetListCtrl();
if(LoadConfigItem(&TargetMaps[i], &PrivateMaps[i], 0, (char *)sFilePath.GetString())){
@ -1328,6 +1324,10 @@ void CDxwndhostView::OnImport(CString sFilePath)
listitem.pszText = PrivateMaps[i].title;
listctrl.InsertItem(&listitem);
}
Resize();
SetTarget(TargetMaps);
this->isUpdated=TRUE;
return TRUE;
}
void CDxwndhostView::OnImport()
@ -1382,10 +1382,13 @@ void CDxwndhostView::OnImport()
if(GetPrivateProfileInt("window", "updatepaths", 1, gInitPath))
WritePrivateProfileString("window", "exportpath", folder, gInitPath);
p += lstrlen((LPSTR)p) + 1;
while(*p && (i<MAXTARGETS)){
while(*p){
// "p" - name of each file, NULL to terminate
if(!*p) break;
if(i==MAXTARGETS) break;
if(i==MAXTARGETS) {
MessageBoxLang(DXW_STRING_MAXENTRIES, DXW_STRING_WARNING, MB_OK | MB_ICONEXCLAMATION);
break;
}
strcpy(pathname, folder);
strcat(pathname, p);
if (LoadConfigItem(&TargetMaps[i], &PrivateMaps[i], 0, pathname)){
@ -1617,7 +1620,7 @@ void CDxwndhostView::OnSort()
CListCtrl& listctrl = GetListCtrl();
// find list entries number and ignore the command when less than 2
for(i=0; ; i++) if(strlen(TargetMaps[i].path)==0) break;
for(i=0; i<MAXTARGETS; i++) if(strlen(TargetMaps[i].path)==0) break;
itemcount=i;
if (itemcount<2) return;
@ -2091,6 +2094,7 @@ void CDxwndhostView::OnDelete()
PrivateMaps[i] = PrivateMaps[i + 1]; // V2.1.74 fix
TargetMaps[i] = TargetMaps[i + 1];
}
TargetMaps[i].path[0]=0; // clear last one, in case there were MAXTARGETS entries
Resize();
SetTarget(TargetMaps);
this->isUpdated=TRUE;
@ -2817,7 +2821,14 @@ void CDxwndhostView::OnDropFiles(HDROP dropInfo)
p = (char *)sFile.GetString();
p += (strlen(p)-4);
if(!_strnicmp(p, ".dxw", 4)){
this->OnImport(sFile);
for(UINT i=1; i<=nFilesDropped; i++){
if(!this->OnImport(sFile)) break;
nBuffer = DragQueryFile(dropInfo, i, NULL, 0);
DragQueryFile(dropInfo, i, sFile.GetBuffer(nBuffer+1), nBuffer+1);
p = (char *)sFile.GetString();
p += (strlen(p)-4);
if(_strnicmp(p, ".dxw", 4)) break;
}
}
else {
this->OnAdd(sFile.GetBuffer());

View File

@ -68,7 +68,7 @@ protected:
afx_msg void OnModify();
afx_msg void OnExport();
afx_msg void OnImport();
afx_msg void OnImport(CString);
BOOL OnImport(CString);
afx_msg void OnDelete();
afx_msg void OnExplore();
afx_msg void OnKill();

Binary file not shown.