From 8425298274b916ac68b891af8453e09f052ccf87 Mon Sep 17 00:00:00 2001 From: gho tik Date: Sat, 14 May 2016 12:45:59 -0400 Subject: [PATCH] v2_03_69_src Former-commit-id: 4f4cf2e5e767eebd57c07acb242cb4f7d131fa8f --- Include/dxwnd.h | 2 +- build/dxwnd.dll | 4 +- build/dxwnd.exe | 2 +- .../exports/Microsoft Golf 1998 Edition.dxw | 10 +- build/exports/Microsoft Golf 1999 Edition.dxw | 31 ++ build/exports/Miscrosoft Golf '98 Trial.dxw | 29 -- build/readme-relnotes.txt | 8 +- dll/cpulimit.cpp | 272 ++++++++++-------- dll/dxwnd.cpp | 2 +- dll/dxwnd.vs2008.suo | Bin 694272 -> 694272 bytes dll/shareddc.cpp | 106 ++++--- dll/shareddc.hpp | 2 +- dll/user32.cpp | 9 +- exports.new/Betrayal in Antara.dxw | 29 -- exports.new/Blood 2 the Chosen.dxw | 29 -- exports.new/Bugs Bunny Lost In Time.dxw | 29 -- exports.new/Gooka The Mystery of Janatris.dxw | 29 -- exports.new/NHL 2002.dxw | 30 -- exports.new/No Respect (1.1).dxw | 35 --- exports.new/No Respect.dxw | 32 --- exports.new/Phantasmagoria 2.dxw | 29 -- exports.new/Silver.dxw | 29 -- exports.new/The Hobbit(TM) Demo.dxw | 30 -- exports.new/Urban Chaos.dxw | 30 -- exports.new/Weird War.dxw | 30 -- host/TabSysLibs.cpp | 1 + host/TargetDlg.cpp | 1 + host/TargetDlg.h | 1 + host/dxwndhost.aps | Bin 167724 -> 167912 bytes host/dxwndhost.rc | Bin 115006 -> 115250 bytes host/dxwndhost.vs2008.suo | Bin 201216 -> 202752 bytes host/dxwndhostView.cpp | 2 + host/resource | Bin 40488 -> 40580 bytes 33 files changed, 280 insertions(+), 563 deletions(-) rename exports.new/Microsoft Golf '98 trial.dxw => build/exports/Microsoft Golf 1998 Edition.dxw (85%) create mode 100644 build/exports/Microsoft Golf 1999 Edition.dxw delete mode 100644 build/exports/Miscrosoft Golf '98 Trial.dxw delete mode 100644 exports.new/Betrayal in Antara.dxw delete mode 100644 exports.new/Blood 2 the Chosen.dxw delete mode 100644 exports.new/Bugs Bunny Lost In Time.dxw delete mode 100644 exports.new/Gooka The Mystery of Janatris.dxw delete mode 100644 exports.new/NHL 2002.dxw delete mode 100644 exports.new/No Respect (1.1).dxw delete mode 100644 exports.new/No Respect.dxw delete mode 100644 exports.new/Phantasmagoria 2.dxw delete mode 100644 exports.new/Silver.dxw delete mode 100644 exports.new/The Hobbit(TM) Demo.dxw delete mode 100644 exports.new/Urban Chaos.dxw delete mode 100644 exports.new/Weird War.dxw diff --git a/Include/dxwnd.h b/Include/dxwnd.h index 29dd190..ff4b41e 100644 --- a/Include/dxwnd.h +++ b/Include/dxwnd.h @@ -223,7 +223,7 @@ #define BLOCKPRIORITYCLASS 0x00000020 // blocks attempts to change the process priority class #define CPUSLOWDOWN 0x00000040 // reduces CPU time dedicated to non time critical threads #define CPUMAXUSAGE 0x00000080 // reduces CPU time to non time critical threads that consume more than the given ratio - +#define NOWINERRORS 0x00000100 // suppress some possible window errors returning OK also in case of failure // eighth flags DWORD dxw.dwFlags8: // logging Tflags DWORD: diff --git a/build/dxwnd.dll b/build/dxwnd.dll index fa81315..c451cc5 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3c7dbfc11581e871c2b2611baad8c24e7e904c1264771fbddf1ae438805b6817 -size 651776 +oid sha256:c7943551fe966c9338314466a778a5b8116dbf776047162959a1403ad895a167 +size 652800 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index 553085f..8194b1e 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a0ffb89088ea50da7077abb29aa298d730841a13f2a8b0e9882b088e0a8290c6 +oid sha256:1dfdcf69403a93563f73c0f77084c8c054b570c2c2681aa1323aa5d7d0c70ae0 size 568320 diff --git a/exports.new/Microsoft Golf '98 trial.dxw b/build/exports/Microsoft Golf 1998 Edition.dxw similarity index 85% rename from exports.new/Microsoft Golf '98 trial.dxw rename to build/exports/Microsoft Golf 1998 Edition.dxw index 01114d2..450dddd 100644 --- a/exports.new/Microsoft Golf '98 trial.dxw +++ b/build/exports/Microsoft Golf 1998 Edition.dxw @@ -1,6 +1,6 @@ [target] -title0=Microsoft Golf '98 trial (win) -path0=D:\Games\MSGolf98\MSGOLF98\GAME.EXE +title0=Microsoft Golf 1998 Edition +path0=D:\Games\Microsoft Golf 1998 Edition\game.exe launchpath0= module0= opengllib0= @@ -13,10 +13,11 @@ flagg0=-671088640 flagh0=1302 flagi0=1212547076 flagj0=4224 -flagk0=67436544 -flagl0=4 +flagk0=327680 +flagl0=260 flagm0=0 tflag0=0 +dflag0=0 posx0=50 posy0=50 sizx0=0 @@ -27,3 +28,4 @@ winver0=0 maxres0=-1 swapeffect0=0 maxddinterface0=7 +slowratio0=1 diff --git a/build/exports/Microsoft Golf 1999 Edition.dxw b/build/exports/Microsoft Golf 1999 Edition.dxw new file mode 100644 index 0000000..5f1bda9 --- /dev/null +++ b/build/exports/Microsoft Golf 1999 Edition.dxw @@ -0,0 +1,31 @@ +[target] +title0=Microsoft Golf 1999 Edition +path0=D:\Games\Microsoft Golf 1999 Edition\game.exe +launchpath0= +module0= +opengllib0= +notes0= +registry0=[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Golf '98]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Golf '98\Version 1.0 Demo]\n"AppPath"="D:\\Games\\MSGolf98\\MSGOLF98"\n"InstallType"="1"\n"InstallPath"="D:\\Games\\MSGolf98\\MSGOLF98\\"\n"CDPath"="D:\\Games\\MSGolf98\\MSGOLF98"\n"Launched"="1"\n"PID"=""\n"Path"="D:\\Games\\MSGolf98\\MSGOLF98"\n"VersionType"="TrialVersion"\n"InstalledGroup"="1"\n"LangID"=dword:00000009\n +ver0=0 +coord0=0 +flag0=136314914 +flagg0=-671088640 +flagh0=1302 +flagi0=1212547076 +flagj0=4224 +flagk0=327680 +flagl0=260 +flagm0=0 +tflag0=0 +dflag0=0 +posx0=50 +posy0=50 +sizx0=0 +sizy0=0 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 +swapeffect0=0 +maxddinterface0=7 +slowratio0=1 diff --git a/build/exports/Miscrosoft Golf '98 Trial.dxw b/build/exports/Miscrosoft Golf '98 Trial.dxw deleted file mode 100644 index 8f2599a..0000000 --- a/build/exports/Miscrosoft Golf '98 Trial.dxw +++ /dev/null @@ -1,29 +0,0 @@ -[target] -title0=Miscrosoft Golf '98 Trial -path0=D:\Games\msgolf\Golf '98 Trial\game.exe -launchpath0= -module0= -opengllib0= -notes0= -registry0=[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Golf '98]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Golf '98\Version 1.0 Demo]\n"AppPath"="D:\\Games\\msgolf\\Golf '98 Trial"\n"InstallType"="1"\n"InstalledPath"="D:\\Games\\msgolf\\Golf '98 Trial"\n"CDPath"="D:\\Games\\msgolf\\Golf '98 Trial\\"\n"ITF File Path"="D:\\Games\\msgolf\\Golf '98 Trial\\golf.itf"\n"Launched"="1"\n"PID"=""\n"Path"="D:\\Games\\msgolf\\Golf '98 Trial"\n"VersionType"="TrialVersion"\n"InstalledGroup"="1"\n"LangID"=dword:00000009\n\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games]\n[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games\Golf '98]\n[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games\Golf '98\Version 1.0 Demo]\n"AppPath"="D:\\Games\\msgolf\\Golf '98 Trial"\n"InstallType"="1"\n"InstalledPath"="D:\\Games\\msgolf\\Golf '98 Trial"\n"CDPath"="D:\\Games\\msgolf\\Golf '98 Trial\\"\n"ITF File Path"="D:\\Games\\msgolf\\Golf '98 Trial\\golf.itf"\n"Launched"="1"\n"PID"=""\n"Path"="D:\\Games\\msgolf\\Golf '98 Trial"\n"VersionType"="TrialVersion"\n"InstalledGroup"="1"\n"LangID"=dword:00000009 -ver0=0 -coord0=0 -flag0=2101474 -flagg0=1476395016 -flagh0=1044 -flagi0=1210187780 -flagj0=128 -flagk0=327680 -flagl0=4 -flagm0=0 -tflag0=0 -posx0=50 -posy0=50 -sizx0=880 -sizy0=660 -maxfps0=0 -initts0=0 -winver0=0 -maxres0=-1 -swapeffect0=0 -maxddinterface0=0 diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index 415bbe9..3387529 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -1110,4 +1110,10 @@ fix: GUI placement coordinates are not saved when terminating in minimized or ma v2.03.68 add: options to limit the cpu usage of program threads, either inconditionally ("CPU slow down") or only for CPU consuming threads ("CPU max usage"). -fix: some logging details \ No newline at end of file +fix: some logging details + +v2.03.69 +fix: fixed "CPU max usage" option +fix: WindowFromPoint & WindowFromPointEx hooks +fix: recovered partilly working implementation of "shared dc" mode +add: "Suppress Win errors" option, needed to skip a blocking error and make "Migrosoft Golf '98" starting diff --git a/dll/cpulimit.cpp b/dll/cpulimit.cpp index 38d2474..28cf249 100644 --- a/dll/cpulimit.cpp +++ b/dll/cpulimit.cpp @@ -31,7 +31,6 @@ DWORD WINAPI CpuLimit(LPVOID lpThreadParameter) OutTrace("starting CPULimit dwOwnerPID=%x Ratio=1:%d\n", dwOwnerPID, iSlowDownRatio); if(!dwOwnerPID) return FALSE; if(iSlowDownRatio < 1) return FALSE; - //while(TRUE) return LimitCpuUsage(dwOwnerPID, dwOwnerThread, iSlowDownRatio); } @@ -63,12 +62,13 @@ BOOL SlowCpuSpeed(DWORD dwOwnerPID, DWORD dwOwnerThread, int iSlowDownRatio) // and stop each low-priority thread iThreadIndex = 0; do { - if((te32.th32OwnerProcessID == dwOwnerPID) && (te32.th32ThreadID != dwOwnerThread)){ - if (te32.tpBasePri < THREAD_PRIORITY_TIME_CRITICAL) { - HANDLE hThread = OpenThread(THREAD_SUSPEND_RESUME, FALSE, te32.th32ThreadID); - SuspendThread(hThread); - SuspThreads[iThreadIndex++] = hThread; - } + if( (te32.th32OwnerProcessID == dwOwnerPID) && + (te32.th32ThreadID != dwOwnerThread) && + (te32.tpBasePri < THREAD_PRIORITY_TIME_CRITICAL)) { + + HANDLE hThread = OpenThread(THREAD_SUSPEND_RESUME, FALSE, te32.th32ThreadID); + SuspendThread(hThread); + SuspThreads[iThreadIndex++] = hThread; } } while(Thread32Next(hThreadSnap, &te32) && (iThreadIndex *iNumThreads) *iNumThreads = iThreadIndex; + } + } + } while(Thread32Next(hThreadSnap, &te32) && (*iNumThreads 100) cycle=0; // every 100 cyces forces a thread list refresh - Sleep(DELTA_TIME); + for(iThreadIndex=0; iThreadIndexDeltaUsed > (signed long)iTimeLimit) { +#ifdef DEBUGTRACE + OutTrace("Tid[%d]:%x delta=%d stopped at %d\n", iThreadIndex, t->tid, t->DeltaUsed, __LINE__); +#endif + if ((iResumeCount=SuspendThread(t->hThread))== -1) { + t->tid = NULL; + CloseHandle(t->hThread); + continue; + } + t->Suspended = TRUE; + t->DeltaUsed -= iTimeSlot; + } + } + + Sleep(iSlowDownRatio); for(iThreadIndex=0; iThreadIndexhThread == NULL) continue; // skip terminated ones - if(!GetThreadTimes(t->hThread, &CreationTime, &ExitTime, &KernelTime, &UserTime)) { - //OutTrace("Tid[%d]=%x died at %d\n", iThreadIndex, t->hThread, __LINE__); - //CloseHandle(t->hThread); - t->hThread = NULL; - continue; - } + if (t->tid == NULL) continue; // skip terminated ones + if (t->Suspended) { - t->DeltaUsed -= iTimeSlot; - //OutTrace("Tid[%d]=%x suspended delta=%ld\n", iThreadIndex, t->hThread, t->DeltaUsed); - if(t->DeltaUsed < 0) { - if (ResumeThread(t->hThread)== -1){ - //OutTrace("Tid[%d]=%x died at %d\n", iThreadIndex, t->hThread, __LINE__); - //CloseHandle(t->hThread); - t->hThread = NULL; - continue; - } - t->Suspended = FALSE; +#ifdef DEBUGTRACE + OutTrace("Tid[%d]=%x delta=%d started at %d\n", iThreadIndex, t->tid, t->DeltaUsed, __LINE__); +#endif + if ((iResumeCount=ResumeThread(t->hThread))== -1) { + t->tid = NULL; + CloseHandle(t->hThread); + continue; } + t->Suspended = FALSE; + t->DeltaUsed -= iTimeSlot; } else { - iUserTime = UserTime.dwLowDateTime; - iKernelTime = KernelTime.dwLowDateTime; - t->DeltaUsed = t->DeltaUsed + (iUserTime + iKernelTime) - t->LastUsed; - t->LastUsed = iUserTime + iKernelTime; - //OutTrace("Tid[%d]=%x active delta=%ld\n", iThreadIndex, t->hThread, t->DeltaUsed); - if (t->DeltaUsed > (signed long)iTimeLimit) { - //OutTrace("Tid[%d]=%x stopped last=%ld\n", iThreadIndex, t->hThread, t->DeltaUsed); - if (SuspendThread(t->hThread)== -1) { - //OutTrace("Tid[%d]=%x died at %d\n", iThreadIndex, t->hThread, __LINE__); - //CloseHandle(t->hThread); - t->hThread = NULL; - continue; - } - t->Suspended = TRUE; - t->DeltaUsed -= iTimeSlot; - } + if(!GetThreadTimes(t->hThread, &CreationTime, &ExitTime, &KernelTime, &UserTime)) { + t->tid = NULL; + CloseHandle(t->hThread); + continue; + } + FILETIME tmp = t->LastUsed; + t->LastUsed = FTFTSUM(UserTime, KernelTime); + t->DeltaUsed = t->DeltaUsed + DWDIFF(t->LastUsed, tmp); +#ifdef DEBUGTRACE + OutTrace("Tid[%d]:%x delta=%d measured at %d\n", iThreadIndex, t->tid, t->DeltaUsed, __LINE__); +#endif } - } - } - // should never go here .... - OutTrace("end of cycle\n"); - for(int i=0; itid && t->Suspended) { + ResumeThread(t->hThread); + } + } return TRUE; } + diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp index a80ee03..a7ee597 100644 --- a/dll/dxwnd.cpp +++ b/dll/dxwnd.cpp @@ -27,7 +27,7 @@ along with this program. If not, see . #include "TlHelp32.h" -#define VERSION "2.03.68" +#define VERSION "2.03.69" #define DDTHREADLOCK 1 //#define LOCKTHREADS diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index 128c266df588e9ba2a416035114c402db19b248f..273bf64efdf465af2774a7a8bf2bd9069f7b50a8 100644 GIT binary patch delta 4182 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 delta 3349 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 oEqfO5$gp}`iO2P`iwEzGB diff --git a/dll/shareddc.cpp b/dll/shareddc.cpp index fe33831..a479ec2 100644 --- a/dll/shareddc.cpp +++ b/dll/shareddc.cpp @@ -21,7 +21,6 @@ extern HandleDDThreadLock_Type pReleaseDDThreadLock; extern GetDC_Type pGetDCMethod(); extern ReleaseDC_Type pReleaseDCMethod(); -//void setClippingRegion(HDC, HDC, HWND, bool, const POINT&); /*---------------------------------------------------------------------------------+ | | @@ -192,8 +191,8 @@ HDC dxwSDC::GetPrimaryDC(HDC hdc) origin.y -= mainwin.y; OutTraceB("dxwSDC::GetPrimaryDC: origin=(%d,%d)\n", origin.x, origin.y); - copyDcAttributes(VirtualHDC, hdc, origin); - setClippingRegion(VirtualHDC, hdc, dxw.GethWnd(), FALSE, origin); // no good + copyDcAttributes(VirtualHDC, hdc, origin); + setClippingRegion(VirtualHDC, hdc, origin); return VirtualHDC; } @@ -369,60 +368,77 @@ void dxwSDC::copyDcAttributes(HDC destDC, HDC origDc, POINT origin) typedef struct { HDC compatDc; + POINT origin; HWND rootWnd; } ExcludeClipRectsData_Type; -static BOOL CALLBACK excludeClipRectForOverlappingWindow(HWND hwnd, LPARAM lParam) +static BOOL CALLBACK excludeClipRectsForOverlappingWindows(HWND hwnd, LPARAM lParam) { ExcludeClipRectsData_Type *excludeClipRectsData = (ExcludeClipRectsData_Type *)lParam; - if (hwnd == excludeClipRectsData->rootWnd) return FALSE; - if (!IsWindowVisible(hwnd)) return TRUE; - - RECT windowRect = {}; - GetWindowRect(hwnd, &windowRect); - - HRGN windowRgn = (*pCreateRectRgnIndirect)(&windowRect); - ExtSelectClipRgn(excludeClipRectsData->compatDc, windowRgn, RGN_DIFF); - DeleteObject(windowRgn); - OutTraceB("dxwSDC::excludeClipRect: hwnd=%x rect=(%d,%d)-(%d,%d)\n", hwnd, windowRect.left, windowRect.top, windowRect.right, windowRect.bottom); + if (!IsWindowVisible(hwnd)) return TRUE; // go ahead + if (hwnd == excludeClipRectsData->rootWnd) return FALSE; // stop + if(dxw.IsDesktop(hwnd)) return FALSE; + RECT rect = {}; + (*pGetClientRect)(hwnd, &rect); + OffsetRect(&rect, -excludeClipRectsData->origin.x, -excludeClipRectsData->origin.y); + ExcludeClipRect(excludeClipRectsData->compatDc, rect.left, rect.top, rect.right, rect.bottom); + OutTraceB("dxwSDC::excludeClipRects: hwnd=%x rect=(%d,%d)-(%d,%d)\n", hwnd, rect.left, rect.top, rect.right, rect.bottom); return TRUE; } -static void excludeClipRectsForOverlappingWindows(HWND hwnd, BOOL isMenuWindow, HDC compatDc) +void dxwSDC::setClippingRegion(HDC compatDc, HDC origDc, POINT origin) { - ExcludeClipRectsData_Type excludeClipRectsData = { compatDc, GetAncestor(hwnd, GA_ROOT) }; - if (!isMenuWindow){ - EnumWindows(&excludeClipRectForOverlappingWindow, (LPARAM)(&excludeClipRectsData)); + OutTraceB("dxwSDC::setClippingRegion: compdc=%x origdc=%x origin=(%d,%d)\n", compatDc, origDc, origin.x, origin.y); + HRGN clipRgn = CreateRectRgn(0, 0, 0, 0); + const bool isEmptyClipRgn = (1 != GetRandomRgn(origDc, clipRgn, SYSRGN)); + OutTraceB("dxwSDC::setClippingRegion: isEmptyClipRgn=%x\n", isEmptyClipRgn); + // scale clip region + POINT upleft={0, 0}; + //(*pClientToScreen)(dxw.GethWnd(), &upleft); + (*pClientToScreen)(CurrenthWnd, &upleft); + if(IsDebug){ + OutTraceB("dxwSDC::setClippingRegion: upleft=(%d,%d)\n", upleft.x, upleft.y); } - - HWND menuWindow = FindWindow((LPCSTR)(0x8000), NULL); - while (menuWindow && menuWindow != hwnd){ - excludeClipRectForOverlappingWindow(menuWindow, (LPARAM)(&excludeClipRectsData)); - menuWindow = FindWindowEx(NULL, menuWindow, (LPCSTR)(0x8000), NULL); + OffsetRgn(clipRgn, -upleft.x, -upleft.y); + if(IsDebug){ + RECT RgnBox; + GetRgnBox(clipRgn, &RgnBox); + OutTraceB("dxwSDC::setClippingRegion: RgnBox=(%d,%d)-(%d,%d) size=(%dx%d)\n", + RgnBox.left, RgnBox.top, RgnBox.right, RgnBox.bottom, RgnBox.right-RgnBox.left, RgnBox.bottom-RgnBox.top); } -} - -void dxwSDC::setClippingRegion(HDC compatDc, HDC origDc, HWND hwnd, bool isMenuWindow, const POINT& origin) -{ - HRGN clipRgn = (*pCreateRectRgn)(0, 0, 0, 0); - if (1 == GetClipRgn(origDc, clipRgn)){ - OffsetRgn(clipRgn, origin.x, origin.y); - SelectClipRgn(compatDc, clipRgn); - } - - if ((hwnd) && (dxw.dwFlags7 & FIXCLIPPERAREA)){ - if (isMenuWindow || 1 != GetRandomRgn(origDc, clipRgn, SYSRGN)){ - RECT rect = {}; - (*pGetWindowRect)(hwnd, &rect); - (*pSetRectRgn)(clipRgn, rect.left, rect.top, rect.right, rect.bottom); - } - - excludeClipRectsForOverlappingWindows(hwnd, isMenuWindow, compatDc); - ExtSelectClipRgn(compatDc, clipRgn, RGN_AND); - } - + // end of scaling + SelectClipRgn(compatDc, isEmptyClipRgn ? NULL : clipRgn); DeleteObject(clipRgn); - SetMetaRgn(compatDc); + + HRGN origClipRgn = (*pCreateRectRgn)(0, 0, 0, 0); + if (1 == GetClipRgn(origDc, origClipRgn)) + { + OutTraceB("dxwSDC::setClippingRegion: GetClipRgn==1\n"); + OffsetRgn(origClipRgn, origin.x, origin.y); + ExtSelectClipRgn(compatDc, origClipRgn, RGN_AND); + if(IsDebug){ + RECT RgnBox; + GetRgnBox(origClipRgn, &RgnBox); // for logging only + OutTraceB("dxwSDC::setClippingRegion: OrigRgnBox=(%d,%d)-(%d,%d)\n", RgnBox.left, RgnBox.top, RgnBox.right, RgnBox.bottom); + } + } + DeleteObject(origClipRgn); + + if(dxw.dwFlags7 & FIXCLIPPERAREA){ + // to finish ..... + // on Win10 this part seems unnecessary and giving troubles ..... + if (!isEmptyClipRgn){ + OutTraceB("dxwSDC::setClippingRegion: isEmptyClipRgn FALSE\n"); + HWND hwnd = WindowFromDC(origDc); + if (hwnd && (!dxw.IsDesktop(hwnd))){ + ExcludeClipRectsData_Type excludeClipRectsData = { compatDc, origin, dxw.GethWnd() }; + //ExcludeClipRectsData_Type excludeClipRectsData = { compatDc, origin, GetAncestor(hwnd, GA_ROOT) }; + OutTraceB("dxwSDC::setClippingRegion: compatdc=%x origin=(%d,%d) ancestor=%x\n", + compatDc, origin.x, origin.y, dxw.GethWnd()); + EnumWindows(&excludeClipRectsForOverlappingWindows,(LPARAM)(&excludeClipRectsData)); + } + } + } } diff --git a/dll/shareddc.hpp b/dll/shareddc.hpp index e2ca42e..0ac049a 100644 --- a/dll/shareddc.hpp +++ b/dll/shareddc.hpp @@ -26,7 +26,7 @@ public: // methods private: void copyDcAttributes(HDC, HDC, POINT); - void setClippingRegion(HDC, HDC, HWND, bool, const POINT &); + void setClippingRegion(HDC, HDC, POINT); HDC PrimaryDC; HDC VirtualHDC; diff --git a/dll/user32.cpp b/dll/user32.cpp index 7c77061..a530d97 100644 --- a/dll/user32.cpp +++ b/dll/user32.cpp @@ -2636,6 +2636,7 @@ BOOL WINAPI extDestroyWindow(HWND hWnd) // v2.02.43: "Empire Earth" builds test surfaces that must be destroyed! // v2.03.20: "Prince of Persia 3D" destroys the main window that must be preserved! BOOL res; + OutTraceB("DestroyWindow: hwnd=%x\n", hWnd); if (hWnd == dxw.GethWnd()) { if(dxw.dwFlags6 & NODESTROYWINDOW) { @@ -2651,6 +2652,8 @@ BOOL WINAPI extDestroyWindow(HWND hWnd) } res=(*pDestroyWindow)(hWnd); if(!res)OutTraceE("DestroyWindow: ERROR err=%d\n", GetLastError()); + + if(dxw.dwFlags7 & NOWINERRORS) return TRUE; // v2.03.69: suppress unessential errors return res; } @@ -3132,14 +3135,12 @@ BOOL WINAPI extGetCursorInfo(PCURSORINFO pci) return ret; } -// --- to be hooked .... - HWND WINAPI extWindowFromPoint(POINT Point) { HWND ret; OutTraceDW("WindowFromPoint: point=(%d,%d)\n", Point.x, Point.y); if(dxw.IsFullScreen()){ - dxw.UnmapWindow(&Point); + dxw.MapWindow(&Point); // v2.03.69 fix OutTraceDW("WindowFromPoint: FIXED point=(%d,%d)\n", Point.x, Point.y); } ret = (*pWindowFromPoint)(Point); @@ -3152,7 +3153,7 @@ HWND WINAPI extChildWindowFromPoint(HWND hWndParent, POINT Point) HWND ret; OutTraceDW("ChildWindowFromPoint: hWndParent=%x point=(%d,%d)\n", hWndParent, Point.x, Point.y); if(dxw.IsDesktop(hWndParent) && dxw.IsFullScreen() && dxw.Windowize){ - dxw.UnmapClient(&Point); + dxw.MapClient(&Point); OutTraceDW("ChildWindowFromPoint: FIXED point=(%d,%d)\n", Point.x, Point.y); } ret = (*pChildWindowFromPoint)(hWndParent, Point); diff --git a/exports.new/Betrayal in Antara.dxw b/exports.new/Betrayal in Antara.dxw deleted file mode 100644 index 3e69289..0000000 --- a/exports.new/Betrayal in Antara.dxw +++ /dev/null @@ -1,29 +0,0 @@ -[target] -title0=Betrayal in Antara -path0=D:\Games\Betrayal in Antara\ANTARAR.EXE -launchpath0= -module0= -opengllib0= -notes0= -registry0= -ver0=0 -coord0=0 -flag0=681574434 -flagg0=1207959552 -flagh0=20 -flagi0=138412036 -flagj0=4224 -flagk0=65536 -flagl0=0 -flagm0=0 -tflag0=0 -posx0=50 -posy0=50 -sizx0=800 -sizy0=600 -maxfps0=0 -initts0=0 -winver0=0 -maxres0=-1 -swapeffect0=0 -maxddinterface0=7 diff --git a/exports.new/Blood 2 the Chosen.dxw b/exports.new/Blood 2 the Chosen.dxw deleted file mode 100644 index a50f7bb..0000000 --- a/exports.new/Blood 2 the Chosen.dxw +++ /dev/null @@ -1,29 +0,0 @@ -[target] -title0=Blood 2 the Chosen -path0=D:\Games\Blood2\CLIENT.EXE -launchpath0=D:\Games\Blood2\BLOOD2.EXE -module0= -opengllib0= -notes0= -registry0= -ver0=0 -coord0=0 -flag0=136315042 -flagg0=1207959552 -flagh0=20 -flagi0=138412036 -flagj0=4224 -flagk0=65536 -flagl0=0 -flagm0=0 -tflag0=0 -posx0=50 -posy0=50 -sizx0=1200 -sizy0=900 -maxfps0=0 -initts0=0 -winver0=0 -maxres0=-1 -swapeffect0=0 -maxddinterface0=7 diff --git a/exports.new/Bugs Bunny Lost In Time.dxw b/exports.new/Bugs Bunny Lost In Time.dxw deleted file mode 100644 index ed93a8e..0000000 --- a/exports.new/Bugs Bunny Lost In Time.dxw +++ /dev/null @@ -1,29 +0,0 @@ -[target] -title0=Bugs Bunny Lost In Time -path0=D:\Games\Bugs.Bunny.Lost.In.Time\bin\bugs.exe -launchpath0= -module0= -opengllib0= -notes0= -registry0= -ver0=7 -coord0=0 -flag0=681574434 -flagg0=1209139200 -flagh0=20 -flagi0=138412036 -flagj0=4224 -flagk0=98304 -flagl0=0 -flagm0=0 -tflag0=0 -posx0=50 -posy0=50 -sizx0=800 -sizy0=600 -maxfps0=0 -initts0=0 -winver0=0 -maxres0=-1 -swapeffect0=0 -maxddinterface0=7 diff --git a/exports.new/Gooka The Mystery of Janatris.dxw b/exports.new/Gooka The Mystery of Janatris.dxw deleted file mode 100644 index 793502e..0000000 --- a/exports.new/Gooka The Mystery of Janatris.dxw +++ /dev/null @@ -1,29 +0,0 @@ -[target] -title0=Gooka The Mystery of Janatris -path0=D:\Games\Gooka The Mystery of Janatris\Gooka\gooka2.exe -launchpath0= -module0= -opengllib0= -notes0= -registry0= -ver0=0 -coord0=0 -flag0=136315394 -flagg0=1207959552 -flagh0=20 -flagi0=138412038 -flagj0=4224 -flagk0=268500992 -flagl0=8 -flagm0=0 -tflag0=0 -posx0=50 -posy0=50 -sizx0=800 -sizy0=600 -maxfps0=0 -initts0=0 -winver0=0 -maxres0=-1 -swapeffect0=0 -maxddinterface0=7 diff --git a/exports.new/NHL 2002.dxw b/exports.new/NHL 2002.dxw deleted file mode 100644 index c23311b..0000000 --- a/exports.new/NHL 2002.dxw +++ /dev/null @@ -1,30 +0,0 @@ -[target] -title0=NHL 2002 -path0=D:\Games\NHL 2002\nhl2002.exe -launchpath0= -module0= -opengllib0= -notes0= -registry0= -ver0=7 -coord0=0 -flag0=681574499 -flagg0=1476395008 -flagh0=528 -flagi0=136314884 -flagj0=1073746048 -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 diff --git a/exports.new/No Respect (1.1).dxw b/exports.new/No Respect (1.1).dxw deleted file mode 100644 index 0872656..0000000 --- a/exports.new/No Respect (1.1).dxw +++ /dev/null @@ -1,35 +0,0 @@ -[target] -title0=No Respect (1.1) -path0=D:\Games\No Respect\nr11.exe -launchpath0= -module0= -opengllib0= -notes0= -registry0= -ver0=0 -coord0=0 -flag0=681574434 -flagg0=1207959552 -flagh0=20 -flagi0=138412036 -flagj0=4224 -flagk0=327680 -tflag0=0 -initx0=0 -inity0=0 -minx0=0 -miny0=0 -maxx0=0 -maxy0=0 -posx0=50 -posy0=50 -sizx0=800 -sizy0=600 -maxfps0=0 -initts0=0 -winver0=0 -maxres0=-1 -swapeffect0=0 -flagl0=0 -flagm0=0 -maxddinterface0=7 diff --git a/exports.new/No Respect.dxw b/exports.new/No Respect.dxw deleted file mode 100644 index 8e276d2..0000000 --- a/exports.new/No Respect.dxw +++ /dev/null @@ -1,32 +0,0 @@ -[target] -title0=No Respect -path0=D:\Games\No Respect\NR.EXE -launchpath0= -module0= -opengllib0= -notes0= -registry0= -ver0=0 -coord0=0 -flag0=136314914 -flagg0=1207959552 -flagh0=20 -flagi0=138412036 -flagj0=4224 -flagk0=327680 -tflag0=0 -initx0=0 -inity0=0 -minx0=0 -miny0=0 -maxx0=0 -maxy0=0 -posx0=50 -posy0=50 -sizx0=800 -sizy0=600 -maxfps0=0 -initts0=0 -winver0=0 -maxres0=-1 -swapeffect0=0 diff --git a/exports.new/Phantasmagoria 2.dxw b/exports.new/Phantasmagoria 2.dxw deleted file mode 100644 index d0a3ab1..0000000 --- a/exports.new/Phantasmagoria 2.dxw +++ /dev/null @@ -1,29 +0,0 @@ -[target] -title0=Phantasmagoria 2 -path0=D:\Games\Phantasmagoria 2\SIERRAW.EXE -launchpath0= -module0= -opengllib0= -notes0= -registry0= -ver0=0 -coord0=0 -flag0=681574434 -flagg0=1207959552 -flagh0=20 -flagi0=138412036 -flagj0=4224 -flagk0=65536 -flagl0=0 -flagm0=0 -tflag0=0 -posx0=50 -posy0=50 -sizx0=800 -sizy0=600 -maxfps0=0 -initts0=0 -winver0=0 -maxres0=-1 -swapeffect0=0 -maxddinterface0=7 diff --git a/exports.new/Silver.dxw b/exports.new/Silver.dxw deleted file mode 100644 index 62d92d5..0000000 --- a/exports.new/Silver.dxw +++ /dev/null @@ -1,29 +0,0 @@ -[target] -title0=Silver -path0=D:\Games\Silver\silver.exe -launchpath0= -module0= -opengllib0= -notes0= -registry0= -ver0=0 -coord0=0 -flag0=136314998 -flagg0=1207959552 -flagh0=20 -flagi0=138412036 -flagj0=4224 -flagk0=268500992 -flagl0=0 -flagm0=0 -tflag0=0 -posx0=50 -posy0=50 -sizx0=800 -sizy0=600 -maxfps0=0 -initts0=0 -winver0=0 -maxres0=-1 -swapeffect0=0 -maxddinterface0=7 diff --git a/exports.new/The Hobbit(TM) Demo.dxw b/exports.new/The Hobbit(TM) Demo.dxw deleted file mode 100644 index a624750..0000000 --- a/exports.new/The Hobbit(TM) Demo.dxw +++ /dev/null @@ -1,30 +0,0 @@ -[target] -title0=The Hobbit(TM) Demo -path0=D:\Games\The Hobbit(TM) Demo\MeridianDemo.exe -launchpath0= -module0= -opengllib0= -notes0= -registry0= -ver0=8 -coord0=0 -flag0=136315426 -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 diff --git a/exports.new/Urban Chaos.dxw b/exports.new/Urban Chaos.dxw deleted file mode 100644 index e66ff26..0000000 --- a/exports.new/Urban Chaos.dxw +++ /dev/null @@ -1,30 +0,0 @@ -[target] -title0=Urban Chaos -path0=D:\Games\Urban Chaos\fallen.exe -launchpath0= -module0= -opengllib0= -notes0= -registry0= -ver0=0 -coord0=0 -flag0=136314914 -flagg0=1207959552 -flagh0=20 -flagi0=138412036 -flagj0=4224 -flagk0=65536 -flagl0=0 -flagm0=0 -tflag0=0 -dflag0=0 -posx0=50 -posy0=50 -sizx0=800 -sizy0=600 -maxfps0=0 -initts0=0 -winver0=0 -maxres0=-1 -swapeffect0=0 -maxddinterface0=7 diff --git a/exports.new/Weird War.dxw b/exports.new/Weird War.dxw deleted file mode 100644 index 42b70b6..0000000 --- a/exports.new/Weird War.dxw +++ /dev/null @@ -1,30 +0,0 @@ -[target] -title0=Weird War -path0=D:\Games\Weird War\WeirdWar.exe -launchpath0= -module0= -opengllib0= -notes0= -registry0= -ver0=0 -coord0=0 -flag0=681574434 -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 diff --git a/host/TabSysLibs.cpp b/host/TabSysLibs.cpp index 5825109..f46defc 100644 --- a/host/TabSysLibs.cpp +++ b/host/TabSysLibs.cpp @@ -36,6 +36,7 @@ void CTabSysLibs::DoDataExchange(CDataExchange* pDX) 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); // OpenGL DDX_Check(pDX, IDC_HOOKOPENGL, cTarget->m_HookOpenGL); // duplicated diff --git a/host/TargetDlg.cpp b/host/TargetDlg.cpp index 341ca1e..34148fc 100644 --- a/host/TargetDlg.cpp +++ b/host/TargetDlg.cpp @@ -224,6 +224,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) m_FixClipperArea = FALSE; // ?? m_CreateDesktop = FALSE; m_SyncPalette = FALSE; + m_NoWinErrors = FALSE; m_AnalyticMode = FALSE; m_NoPaletteUpdate = FALSE; m_WireFrame = FALSE; diff --git a/host/TargetDlg.h b/host/TargetDlg.h index a1d532d..0151717 100644 --- a/host/TargetDlg.h +++ b/host/TargetDlg.h @@ -179,6 +179,7 @@ public: BOOL m_FixClipperArea; BOOL m_CreateDesktop; BOOL m_SyncPalette; + BOOL m_NoWinErrors; BOOL m_AnalyticMode; BOOL m_NoPaletteUpdate; BOOL m_LimitResources; diff --git a/host/dxwndhost.aps b/host/dxwndhost.aps index acbfb05b1e8e289436cdf04d23b4e82b9c7787b8..2400950fbfc07125b16de2e5ee889a90a4f43610 100644 GIT binary patch delta 2586 zcmZWpdr*{B6u;*#3%Y9rIxH-UiwHi_9D#h`qw;|diUg4ql|*QeT6FF%Uw#|k%>B-s-|u(M`F;1^ z-S%CEd%F#dgJ6_5EiIbD&ab;T!uC|eVuOmcN;g}eyF)Kykx z-nu$13{A?P?_~!dUnsVXTeThGhB9E&;Q&pD__lI{#u$H&Q}+~Qe$|Qq-FW3@^__rT z3zciN+XIl*qPi~Nt2c-nfk3qw?Vh2T1|CuGPSpY^es=$=1wIlF>jRp8E@m~%)GD@! z0}a|w03m*A7^YE#H0cspcXyH~El$wD;$x3dRCoqzpv!xllyBj-AFipljk+4ZdcceeR90|*0o)QH!@pd$XVM7%3 zkw|kCOv9~%A++CcHk%z|eQ2u*eiQ{uB%N&rhm4(Om@i{YG*rmg6b%J3K92S`UTT3Q zIA;+UaL-@}!V4BKNcy@3UdN1C(ANjki01!B9G@Hm=`)}dYx7|=Sn&NEn1mgZA=tE= zEHGLd*({dI(wKa*W?)zWyuxj{m{|Y~JZ}zm6~I=WJq=xN(>JDP;0YO1U0ZGBJZ~H> zm9gB3r)*%-``Tf+9W0?db1$319IUTz3I-KIGEbX_DTVMU{R!dyLRb==I^8#vULlNS zZlhCivp4;E+cFr+S3A(X3|`~;xp;jUBtyb+<2w)uJS`6s?BpUR4efSV6q##R`{)>C zhOs8Lf*IHYOez7hegP|D4&0Uman+r6INoXJ_bo6Ak5uwu(2U~B>bE5^ z=ES%v9vi$F7#p)wTx_xG&*~WK!XiTTg(Zw#!1^j4AD8_+kkKID_Q~OiVX6hjTvWUf zuTaI*s0dY7<>R$7X?nOx@^X(h`gz~m|C$oaSO+F;=CQi4fqQ?j0B+DeI8Nr_t;C<7c>3g!(m zX)jZ~jibE^+`WC2=d4os@xA!v{&ktvN69$Vw?$*&(eo){)cok5t-?8;CZ#d~T$^!3XG^CXTx!Xq?pRO3BI&X~kDvk|Kvo zvDaU1_qmb47Js#E5l7ELwR&kW$GYV*b5pM-%1+9xLuO$mG^dzb@T!}ebeU=vT+dCs zrUb3^JQ+^m+uC zH}N;Bfu|VWK-b`?ljEIoZVtIk7b)>wj*Fd?Y?8BFl&q$r8tQNjy`)~heyuv__g;f0 g2GLbsr}77T@whI`|kOk=Xrn6`}@83 zeFGopPj~2@K@jO$5NvW(QeRzk%aw!EzJ7;E%P*5$F*(vn;@Qa|@x*_}ejU>l1P zwUZiH)K824p^{Lf{$QIAl2CudenX-s*`WP*iGRh0_grH3GEa81BtX({vRS2>62Hd| zl&+BYuk1$YWr_c#o-dm(H?mOuqdZw|BvxHt@mN|x3xMq@2~ZF0ZcYx&S?E)p zRjqQ+Z8h#tkF-LkqakE;lm&JA`26qbQ3K_>#i}(myQETBt{Up@$>Eu*w&9p8l(P$s z^5B)s=#cpATAG}&+PXe1ea$BFCA;qMWi^gq>0lIg$&n!ORuI*ovBXMBNeRhSt?gSt?durSKr%bk6%0q!t6jH3n6G7ydhPqHG)f3Y z&VzV?_IYqf;G?HJ)(`Rp@AQMUW@{>$yy%8SWEJ_0%;2X;NUI6r&1;rUx*?*;=XvU+{%Lucq;^qn4Jnb-R7}1bc*?fLFN< z75H!*X4i3Mz!wB~VJZiWJrnSoOfc!po`iI7L#0mS6kw0Q?%jAzV1gZo1PhF2VHz2j4=QKxa8B0xR}nPd$x?l{ivQ1B0s(__0%dw~f6@(e4+DEYc8ir4w-X zaWH8I_yKz3#s(U=V8h3vMl)6?mV0@*i@N!;#1HS(Y zm=Xnf^yfqlpKqF+VGq%l*k{JH{-6)VW?wp`>kSpi!PxuYb_#)=w*tDYFF|FU{LD8z^ z(}=}i@X@yL(GmqYA11mLmCk7^&yGzieAl%8=_HD2$xoBJ`Dp9-XyGFHMBzko%QKZp zT=}Vx;{GCDspllUi1$=X{ZVP6zM7T^wyKyuuk+#ll_I>|L}S1MXDi|}DaI&;zvu=` z71Xf{ZJg3aHdKThglD)6ad=g@PfBq}xMgK%Y!>)7MsehyTxv77FYZN~khAxpBCxL# PdpK&|d6!~fH8uSQkyF!t diff --git a/host/dxwndhost.rc b/host/dxwndhost.rc index e3ef612a0c433d2a163134de2055809c8c450650..439449efc3126a13e02b90d929d5c52d7bee372e 100644 GIT binary patch delta 151 zcmdnj#J;J8eS-|s^sp+%C7bs#J+hb0V8~=BW>8?r2GV&9DL_^#kWOaEXDDSTn!NFa z=41nFw#_e`x~?&rPEL$6oE$KPW%~+A#(Tok`2-lXrYo2-3bBTRG*6z~tT~zM1lQyX z%`uZ7M6z+4Fjz3?Fc>lzFj!93|D`#7Up^z(_I0|9OD0YB&|flrSvjNBbiRX(1^{ea BF)IK7 delta 108 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 AZU6uP delta 2635 zcmZuz4N%nA5r4b?yT8YW^f(X>IOT!}R3imEMa1eMY9eUGk65c1`4I7gk1L`hgia4b zy~Ih{lb2!54C9cPIF9)cavlF|nnpBEr;Wy-Ga75B8ST)HO;o63rYWe`eRmcm)Bnx> z|NGwCeYxBJf98|{57+V6&_zM>hXn2P7_d~@)fi=YW1`hOH?HC+PJ!(cEd%k&;> z19?}!f~!pO(+P8|*Z^&tZ;qTh3~8g`m^x@Tsl}Fwx*9 zut|4Bwmdu<&qEe^M*cBkR0rNQIFVM}f*EELTe~9v6Ip6bWX=+rl-@fgxi@OLTpXJt zhrc!jzK!}63qcG$yc1+05yzCo^w~Quo0~F4KkbEGq1ovSN`fwh|p8n2iq22JYGX8f+bZMyeo;C-)t6 z#IYx0t5_`NiE@7L6+adYGMMlSNRl@wPR{d1%WKYL>G4_Rg~UB(Wnxm;S{k#aK#RQ; zB}kT^v#x#>ZI%Yz^**Ek+TYHf$paUW3)0( zUwa)+3#Cpi>eRUn(#U%S?Ood-IS`+F>p3~wS11qOER^r&L>}?-QF>`H&YmR)oayRh zx~pJwRZX+>`lke@9D36(`y5Vrt=9<^5}YdoWqmmot!evC+3rY|Pdj2|p)Yzuct0o^YgvB7AHlCeb52JoUPo=SO{2h8D=bjC?}pTOb|g22PFsU7vKE zXWwN~fPas_?=$^|ev6P2agtes>4@=Hgz6ajTQww8MJ!~2+UDo7-(oU!8|*8LR?346 zCiOL5TLF1GnMyH@=C|S$qhc-e0QGJLt6|*$!$4&oaFMG4GP>5op-`n!_j+(8DeXCC zA@Z3NU%=maitnpToW& z_eRJfZw*+C?pD|W)L#i!vfhM}lg)6zOx-PDkvm3R+UoDtt+C-I90gi*AJfS_fC=<) z4d~=9!DQMu2n&n_ZGaZad4avz(gD^`EHbIP1JW(Fd39$7Vt>8J=r!ykQoX`X&WJ;uql`u_VJo<;aP|ZZ#R83G!60P_iMyi_Ijv?Tv*}1PeI2+-| z`HJH4(U^+v<23Gk4r9Sid=YFypWm>%u5Q62;YLv_7k)MKXg!+gQVqm|Ic)g)cF2|k zeKE$K-FQH!m-b_a(c#B7B%2OZMpYXgjw7sq>ET4?NxWd9j%rLck_Yf(V1qH_spm*- zxPl``58+(;U^ixjs+wN;0-I&;af@LY#^rGG61Hn}aR`4v!#j|Ha1Y(oTLW|Gz`t-k zooQyUW^{3~RYQ}92X*7_eRKkOFJtCdM-O+qg+my*yqJ63Y^EHsROAVlm?`Fnd{HEF znRD^GnE9DZOPE)y`MmDp@gn{eFjvfa`Kncbrn0nM)r-k^_-7oosq03_ z2dk!%^EN|m3$@%vAH7-6wWDsU@Y%SNKdWsKjpVz71>tg92!`z;7JJACqE6I^J)%-HiyFFm8MDSz zQfafMO;sw#L%U8~%#yprPL^yG9y+}YCXKi8SYezEdcTyTGtQeQCDX&+g#7NQ<90Ak za`KoHNs#eaa>5#}!0n=*PA!AP@fs@;=a?PGIw&8IVvjSBZ*71A&|ML`&7kc6-^u-W(6;6}swOFn0zXPX#5&!@I diff --git a/host/dxwndhostView.cpp b/host/dxwndhostView.cpp index d740058..ac99db5 100644 --- a/host/dxwndhostView.cpp +++ b/host/dxwndhostView.cpp @@ -446,6 +446,7 @@ void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) 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; if(dlg->m_ReplacePrivOps) t->flags5 |= REPLACEPRIVOPS; t->posx = dlg->m_PosX; @@ -706,6 +707,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) 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; dlg->m_ReplacePrivOps = t->flags5 & REPLACEPRIVOPS ? 1 : 0; dlg->m_PosX = t->posx; diff --git a/host/resource b/host/resource index 2fc57076764bde35d47a2f8e5696a2fa2694937b..f9845e09a4a38af1f1158e6744cabb3e4d2607e1 100644 GIT binary patch delta 47 zcmZ3nhpA;R(}r`!lN)$hIQ8NwMn8T=+slu@1Bz|1q*p@?O26Tj4?4z|r#ibJ#j Dhm8;U delta 18 acmZqK%d}z-(}r`!lNYqJZ8j(g(E