From 6097e08028d4c514df5abc12fceb6f997aa54496 Mon Sep 17 00:00:00 2001 From: gho tik Date: Fri, 20 Jan 2017 11:49:41 -0500 Subject: [PATCH] v2_04_06_src_fx4 Former-commit-id: 1f32de7896e503fe164bcea0087d3072e521bcae --- Include/dxwnd.h | 2 + build/dxwnd.dll | 4 +- build/dxwnd.exe | 2 +- build/readme-relnotes.txt | 6 +- dll/ddraw.cpp | 2 +- dll/dibdump.cpp | 151 ++++++++++++++++++++++++++++++++++++++ dll/dxwnd.cpp | 2 +- dll/dxwnd.vs2008.suo | Bin 564224 -> 606208 bytes dll/dxwnd.vs2008.vcproj | 4 + dll/gdi32.cpp | 13 +++- dll/user32.cpp | 41 ++++++----- dll/winmm.cpp | 7 ++ host/TabDebug.cpp | 2 + host/TargetDlg.cpp | 2 + host/TargetDlg.h | 2 + host/dxwndhost.aps | Bin 260432 -> 260636 bytes host/dxwndhost.rc | Bin 149808 -> 150264 bytes host/dxwndhost.vs2008.suo | Bin 168960 -> 171008 bytes host/dxwndhostView.cpp | 4 + host/resource | Bin 53466 -> 53554 bytes 20 files changed, 220 insertions(+), 24 deletions(-) create mode 100644 dll/dibdump.cpp diff --git a/Include/dxwnd.h b/Include/dxwnd.h index 3cb96f4..74be92b 100644 --- a/Include/dxwnd.h +++ b/Include/dxwnd.h @@ -268,6 +268,8 @@ #define MARKWING32 0x00010000 // Marks (highlights with colored frames) all WinG32 operations #define DYNAMICZCLEAN 0x00020000 // Performs ZBUFFER cleaning also every time the ZBUFFER is activated #define MARKGDI32 0x00040000 // Marks (highlights with colored frames) the main GDI32 operations +#define DUMPDIBSECTION 0x00080000 // dumps DIBs to BMP files for debugging purposes +#define DUMPDEVCONTEXT 0x00100000 // dumps source HDC to BMP files for debugging purposes // logging Tflags DWORD: #define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general diff --git a/build/dxwnd.dll b/build/dxwnd.dll index d6660b5..5869122 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c4a337db3a9c5cbb7c06069a437f34c28285dcf2548181622789c594c8750bc1 -size 781312 +oid sha256:a035cc2206b5dcd8fed40fafdef29abe8b54f47acfbceb0568cd7d09f17be7d8 +size 782848 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index 7abf7ae..bd86e99 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fb594ca522bdf3bc9956b3e2f18c8582c85728c30a77f6c0879e971bc3417ff2 +oid sha256:fdef6f8a6645074858924bffbe81e345ebafda4269521681fcad76f50d14a589 size 673280 diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index 86cc913..c8f014a 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -1458,10 +1458,14 @@ add: hook for GDI32 GdiAlphaBlend, very rare call that appeared in "RHEM" during v2.04.06/fx3 GUI: add: Expert mode +add: experimental dump od DIB sections and blitted dc for debugging purposes DLL: fix: corrected condition to print two virtual registry log messages fix: improved logic to recover surfaces with DDSCAPS_TEXTURE capability - ref. "Dominant Species" fix: fixed cursor clipping state and toggle key to make it work in all conditions fix: D3D objects hooking with QueryInterface method. Fixes "Wizardry Chronicle" fix: add hook for GDI32 GdiGradientFill and GdiTransparentBlt, present in "RHEM" -fix: log messages for CloseHandle wrapper \ No newline at end of file +fix: log messages for CloseHandle wrapper +fix: log messages for GetPixel wrapper +fix: window position in MoveWindow for ANCHORED mode and big windows +fix: DialogBoxParamA wrapper diff --git a/dll/ddraw.cpp b/dll/ddraw.cpp index 2d39e14..d7822d0 100644 --- a/dll/ddraw.cpp +++ b/dll/ddraw.cpp @@ -4224,7 +4224,7 @@ static HRESULT WINAPI extGetDC(int dxversion, GetDC_Type pGetDC, LPDIRECTDRAWSUR res=(*pGetDC)(lpdds, pHDC); } - OutTraceDDRAW("GetDC: res=%x hdc=%x\n",res, *pHDC); + OutTraceDDRAW("GetDC: res=%x(%s) hdc=%x\n", res, ExplainDDError(res), *pHDC); return res; } diff --git a/dll/dibdump.cpp b/dll/dibdump.cpp new file mode 100644 index 0000000..095f976 --- /dev/null +++ b/dll/dibdump.cpp @@ -0,0 +1,151 @@ +#define _CRT_SECURE_NO_WARNINGS + +#include "dxwnd.h" +#include "dxwcore.hpp" +#include "syslibs.h" +#include "hddraw.h" +#include "dxhook.h" +#include "dxhelper.h" +#include "shareddc.hpp" + +#include "stdio.h" + +void DumpDibSection(const BITMAPINFO *pbmi, UINT iUsage, VOID *pvBits) +{ + static int prog=0; + FILE *fdump; + char path[81]; + BITMAPFILEHEADER hdr; // bitmap file-header + BITMAPV4HEADER pbi; // bitmap info-header + int iScanLineSize; + + if(iUsage != DIB_RGB_COLORS) return; + if(prog==0) CreateDirectory(".\\bmp.out", NULL); + sprintf(path,".\\bmp.out\\dib.%08.8d.bmp", prog); + fdump=fopen(path, "wb"); + if(!fdump) return; + memset((void *)&pbi, 0, sizeof(BITMAPV4HEADER)); + pbi.bV4Size = sizeof(BITMAPV4HEADER); + pbi.bV4Width = pbmi->bmiHeader.biWidth; + pbi.bV4Height = pbmi->bmiHeader.biHeight; + pbi.bV4BitCount = pbmi->bmiHeader.biBitCount; + pbi.bV4SizeImage = ((pbi.bV4Width * pbi.bV4BitCount + 0x1F) & ~0x1F)/8 * pbi.bV4Height; + pbi.bV4Height = - pbi.bV4Height; + pbi.bV4Planes = pbmi->bmiHeader.biPlanes; + pbi.bV4V4Compression = pbmi->bmiHeader.biCompression; + pbi.bV4XPelsPerMeter = 1; + pbi.bV4YPelsPerMeter = 1; + pbi.bV4ClrUsed = pbmi->bmiHeader.biClrUsed; + if(!pbi.bV4ClrUsed) pbi.bV4ClrUsed = 1 << pbi.bV4BitCount; + pbi.bV4ClrImportant = pbmi->bmiHeader.biClrImportant; + pbi.bV4RedMask = 0; + pbi.bV4RedMask = 0; + pbi.bV4GreenMask = 0; + pbi.bV4BlueMask = 0; + pbi.bV4AlphaMask = 0; + pbi.bV4CSType = LCS_CALIBRATED_RGB; + iScanLineSize = ((pbi.bV4Width * pbi.bV4BitCount + 0x1F) & ~0x1F)/8; + OutTrace("DumpDibSection: prog=%d size=%d wxh=(%dx%d) bc=%d sizeimg=%d planes=%d comp=%x ppm=(%dx%d) colors=%d imp=%d\n", + prog, + pbi.bV4Size, pbi.bV4Width, pbi.bV4Height, pbi.bV4BitCount, pbi.bV4SizeImage, + pbi.bV4Planes, pbi.bV4V4Compression, pbi.bV4XPelsPerMeter, pbi.bV4YPelsPerMeter, + pbi.bV4ClrUsed, pbi.bV4ClrImportant); + + prog++; + hdr.bfType = 0x4d42; // 0x42 = "B" 0x4d = "M" + // Compute the size of the entire file. + hdr.bfSize = (DWORD) (sizeof(BITMAPFILEHEADER) + pbi.bV4Size + pbi.bV4ClrUsed * sizeof(RGBQUAD) + pbi.bV4SizeImage); + hdr.bfReserved1 = 0; + hdr.bfReserved2 = 0; + + // Compute the offset to the array of color indices. + hdr.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) + pbi.bV4Size + pbi.bV4ClrUsed * sizeof (RGBQUAD); + + // Copy the BITMAPFILEHEADER into the .BMP file. + fwrite((LPVOID)&hdr, sizeof(BITMAPFILEHEADER), 1, fdump); + + // Copy the BITMAPINFOHEADER array into the file. + fwrite((LPVOID)&pbi, sizeof(BITMAPV4HEADER), 1, fdump); + + // Copy the RGBQUAD array into the file. + if(pbi.bV4ClrUsed) fwrite(&pbmi->bmiColors[0], pbi.bV4ClrUsed * sizeof (RGBQUAD), 1, fdump); + + // Copy the array of color indices into the .BMP file. + //for(int y=0; y<(int)ddsd.dwHeight; y++) + // fwrite((BYTE *)ddsd.lpSurface + (y*ddsd.lPitch), iScanLineSize, 1, fdump); + fwrite((BYTE *)pvBits, pbi.bV4SizeImage, 1, fdump); + + // Close the .BMP file. + fclose(fdump); +} + +void DumpHDC(HDC hdc, int x0, int y0, int w, int h) +{ + FILE *fdump; + static int prog = 0; + char path[81]; + BITMAPFILEHEADER hdr; + BITMAPV4HEADER pbi; // bitmap info-header + + if (w<0) w = -w; + if (h<0) h = -h; + + if(prog==0) CreateDirectory(".\\bmp.out", NULL); + sprintf(path,".\\bmp.out\\hdc.%08.8d.bmp", prog); + fdump=fopen(path, "wb"); + if(!fdump) { + OutTrace("DumpHDC: err=%d\n", GetLastError()); + return; + } + + // this bitmap is not created in the same format of the original HDC: using the GetPixel call to read the pixels + // means that the resulting image will be 32bpp color depth + + memset((void *)&pbi, 0, sizeof(BITMAPV4HEADER)); + pbi.bV4Size = sizeof(BITMAPV4HEADER); + pbi.bV4Width = w; + pbi.bV4Height = h; + pbi.bV4BitCount = 32; + pbi.bV4SizeImage = ((pbi.bV4Width * pbi.bV4BitCount + 0x1F) & ~0x1F)/8 * pbi.bV4Height; + pbi.bV4Height = -pbi.bV4Height; + pbi.bV4Planes = 1; + pbi.bV4V4Compression = BI_BITFIELDS; + pbi.bV4XPelsPerMeter = 1; + pbi.bV4YPelsPerMeter = 1; + pbi.bV4ClrUsed = 0; + pbi.bV4ClrImportant = 0; + pbi.bV4RedMask = 0x000000FF; + pbi.bV4GreenMask = 0x0000FF00; + pbi.bV4BlueMask = 0x00FF0000; + pbi.bV4AlphaMask = 0x00000000; + pbi.bV4CSType = LCS_CALIBRATED_RGB; + int iScanLineSize = ((pbi.bV4Width * pbi.bV4BitCount + 0x1F) & ~0x1F)/8; + OutTrace("DumpDevContext: prog=%08.8d size=%d wxh=(%dx%d) bc=%d sizeimg=%d planes=%d comp=%x ppm=(%dx%d) colors=%d imp=%d\n", + prog, + pbi.bV4Size, pbi.bV4Width, pbi.bV4Height, pbi.bV4BitCount, pbi.bV4SizeImage, + pbi.bV4Planes, pbi.bV4V4Compression, pbi.bV4XPelsPerMeter, pbi.bV4YPelsPerMeter, + pbi.bV4ClrUsed, pbi.bV4ClrImportant); + + prog++; + // Fill in the fields of the file header + hdr.bfType = ((WORD) ('M' << 8) | 'B'); // is always "BM" + hdr.bfSize = (w * h) + sizeof( hdr ); + hdr.bfReserved1 = 0; + hdr.bfReserved2 = 0; + hdr.bfOffBits = (DWORD)(sizeof(hdr) + sizeof(pbi)); + + // Write the file header + fwrite( &hdr, sizeof(hdr), 1, fdump); + // Write the DIB header + fwrite( &pbi, sizeof(pbi), 1, fdump ); + // Write the bits + for(int y=y0; y. #include "TlHelp32.h" -#define VERSION "2.04.06.fx3" +#define VERSION "2.04.06.fx4" #define DDTHREADLOCK 1 diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index 71657df4ffc006b430f41235e264dff8a872472d..3345144926d0f10093d7b3c468a03811cc25aad4 100644 GIT binary patch delta 35105 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 f)-aM8Y>!{z56D7X*%45 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 Mu_iTKIino@1+v_+g#Z8m diff --git a/dll/dxwnd.vs2008.vcproj b/dll/dxwnd.vs2008.vcproj index 4e680ec..49993fb 100644 --- a/dll/dxwnd.vs2008.vcproj +++ b/dll/dxwnd.vs2008.vcproj @@ -293,6 +293,10 @@ RelativePath=".\ddtexture.cpp" > + + diff --git a/dll/gdi32.cpp b/dll/gdi32.cpp index 004b292..60aeeff 100644 --- a/dll/gdi32.cpp +++ b/dll/gdi32.cpp @@ -10,6 +10,8 @@ #include "stdio.h" +extern void DumpDibSection(const BITMAPINFO *, UINT, VOID *); +extern void DumpHDC(HDC, int, int, int, int); static BOOL bGDIRecursionFlag = FALSE; static void Stopper(char *s, int line) @@ -963,6 +965,8 @@ BOOL WINAPI extGDIBitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nH Flux = (IsToScreen ? 1 : 0) + (IsFromScreen ? 2 : 0); if (IsToScreen && (dxw.dwFlags3 & NOGDIBLT)) return TRUE; + if(IsToScreen && (dxw.dwFlags8 & DUMPDEVCONTEXT)) DumpHDC(hdcSrc, nXSrc, nYSrc, nWidth, nHeight); + if(dxw.IsFullScreen()){ //int nWSrc, nHSrc, int nWDest, nHDest; @@ -2930,7 +2934,12 @@ COLORREF WINAPI extGetPixel(HDC hdc, int nXPos, int nYPos) } ret=(*pGetPixel)(hdc, nXPos, nYPos); - if(!ret) OutTraceE("GetPixel ERROR: err=%d\n", GetLastError()); + if(ret==CLR_INVALID) { + OutTraceE("GetPixel ERROR: err=%d\n", GetLastError()); + } + else { + OutTraceDW("GetPixel: color=0x%x\n", ret); + } return ret;} BOOL WINAPI extPlgBlt(HDC hdcDest, const POINT *lpPoint, HDC hdcSrc, int nXSrc, int nYSrc, int nWidth, int nHeight, HBITMAP hbmMask, int xMask, int yMask) @@ -3011,7 +3020,9 @@ HBITMAP WINAPI extCreateDIBSection(HDC hdc, const BITMAPINFO *pbmi, UINT iUsage, } else { OutTraceDW("CreateDIBSection: ret=%x\n", ret); + if(dxw.dwFlags8 & DUMPDIBSECTION) DumpDibSection(pbmi, iUsage, *ppvBits); } + return ret; } diff --git a/dll/user32.cpp b/dll/user32.cpp index 99fb796..61f7a2d 100644 --- a/dll/user32.cpp +++ b/dll/user32.cpp @@ -579,7 +579,8 @@ void dxwFixWindowPos(char *ApiName, HWND hwnd, LPARAM lParam) wp->x = MaxPos.x; wp->y = MaxPos.y; OutTraceDW("%s: SET anchored pos=(%d,%d) size=(%dx%d)\n", ApiName, wp->x, wp->y, wp->cx, wp->cy); - } } + } + } if ((dxw.dwFlags2 & KEEPASPECTRATIO) && dxw.IsFullScreen() && (hwnd==dxw.GethWnd())){ // note: while keeping aspect ration, resizing from one corner doesn't tell @@ -2615,17 +2616,15 @@ BOOL WINAPI extEndPaint(HWND hwnd, const PAINTSTRUCT *lpPaint) HWND WINAPI extCreateDialogIndirectParam(HINSTANCE hInstance, LPCDLGTEMPLATE lpTemplate, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM lParamInit) { HWND RetHWND; - BOOL FullScreen; - FullScreen = dxw.IsFullScreen(); OutTraceDW("CreateDialogIndirectParam: hInstance=%x lpTemplate=(style=%x extstyle=%x items=%d pos=(%d,%d) size=(%dx%d)) hWndParent=%x lpDialogFunc=%x lParamInit=%x\n", hInstance, lpTemplate->style, lpTemplate->dwExtendedStyle, lpTemplate->cdit, lpTemplate->x, lpTemplate->y, lpTemplate->cx, lpTemplate->cy, hWndParent, lpDialogFunc, lParamInit); if(dxw.IsFullScreen() && hWndParent==NULL) hWndParent=dxw.GethWnd(); // v2.03.98: commented out the temporary return to windowed mode to make Red Alert 2 dialog work again! - //dxw.SetFullScreen(FALSE); + //InMainWinCreation++; RetHWND=(*pCreateDialogIndirectParam)(hInstance, lpTemplate, hWndParent, lpDialogFunc, lParamInit); - //dxw.SetFullScreen(FullScreen); + //InMainWinCreation--; // v2.02.73: redirect lpDialogFunc only when it is nor NULL if( lpDialogFunc && @@ -2642,14 +2641,12 @@ HWND WINAPI extCreateDialogIndirectParam(HINSTANCE hInstance, LPCDLGTEMPLATE lpT HWND WINAPI extCreateDialogParam(HINSTANCE hInstance, LPCTSTR lpTemplateName, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM lParamInit) { HWND RetHWND; - BOOL FullScreen; - FullScreen = dxw.IsFullScreen(); OutTraceDW("CreateDialogParam: hInstance=%x lpTemplateName=%s hWndParent=%x lpDialogFunc=%x lParamInit=%x\n", hInstance, sTemplateName(lpTemplateName), hWndParent, lpDialogFunc, lParamInit); if(hWndParent==NULL) hWndParent=dxw.GethWnd(); - //dxw.SetFullScreen(FALSE); + //InMainWinCreation++; RetHWND=(*pCreateDialogParam)(hInstance, lpTemplateName, hWndParent, lpDialogFunc, lParamInit); - //dxw.SetFullScreen(FullScreen); + //InMainWinCreation--; // v2.02.73: redirect lpDialogFunc only when it is nor NULL: fix for "LEGO Stunt Rally" if( lpDialogFunc && @@ -2715,20 +2712,31 @@ BOOL WINAPI extMoveWindow(HWND hwnd, int X, int Y, int nWidth, int nHeight, BOOL RECT screen; DWORD dwStyle; POINT upleft = {0,0}; + char *sStyle; (*pGetClientRect)(dxw.GethWnd(),&screen); (*pClientToScreen)(dxw.GethWnd(),&upleft); if((dwStyle=(*pGetWindowLong)(hwnd, GWL_STYLE)) && WS_CHILDWINDOW){ // Big main child window: see "Reah" X=Y=0; + sStyle="(child) "; } else{ // Regular big main window, usual case. - X=upleft.x; - Y=upleft.y; + X=upleft.x; + Y=upleft.y; + sStyle=""; } nWidth=screen.right; nHeight=screen.bottom; - OutTraceDW("MoveWindow: fixed BIG win pos=(%d,%d) size=(%d,%d)\n", X, Y, nWidth, nHeight); + if (dxw.dwFlags7 & ANCHORED){ + WINDOWPOS MaxPos; + dxw.CalculateWindowPos(hwnd, dxw.iSizX, dxw.iSizY, &MaxPos); + nWidth = MaxPos.cx; + nHeight = MaxPos.cy; + X = MaxPos.x; + Y = MaxPos.y; + } + OutTraceDW("MoveWindow: fixed BIG %swin pos=(%d,%d) size=(%d,%d)\n", sStyle, X, Y, nWidth, nHeight); } } } @@ -3838,18 +3846,17 @@ BOOL WINAPI extCloseDesktop(HDESK hDesktop) INT_PTR WINAPI extDialogBoxParamA(HINSTANCE hInstance, LPCTSTR lpTemplateName, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM dwInitParam) { - BOOL ret, FullScreen; - FullScreen = dxw.IsFullScreen(); + BOOL ret; OutTraceDW("DialogBoxParamA: FullScreen=%x TemplateName=\"%s\" WndParent=%x\n", - FullScreen, sTemplateName(lpTemplateName), hWndParent); + dxw.IsFullScreen(), sTemplateName(lpTemplateName), hWndParent); // attempt to fix "Colonial Project 2" dialog. Doesn't work, but it could be ok..... //if(FullScreen && dxw.IsRealDesktop(hWndParent)){ // OutTraceDW("DialogBoxParamA: remap WndParent=%x->%x\n", hWndParent, dxw.GethWnd()); // hWndParent = dxw.GethWnd(); //} - dxw.SetFullScreen(FALSE); + //InMainWinCreation++; ret = (*pDialogBoxParamA)(hInstance, lpTemplateName, hWndParent, lpDialogFunc, dwInitParam); - dxw.SetFullScreen(FullScreen); + //InMainWinCreation--; OutTraceDW("DialogBoxParamA: ret=%x\n", ret); return ret; } diff --git a/dll/winmm.cpp b/dll/winmm.cpp index cf3a281..40def0e 100644 --- a/dll/winmm.cpp +++ b/dll/winmm.cpp @@ -343,6 +343,13 @@ MCIERROR WINAPI extmciSendCommand(BOOL isAnsi, mciSendCommand_Type pmciSendComma pw->hWnd = dxw.GethWnd(); OutTraceB("mciSendCommand: REDIRECT hwnd=%x\n", pw->hWnd); } + // attempt to stretch "Wizardry Chronicle" intro movie, but it doesn't work ... + //if(1){ + // fdwCommand &= ~MCI_OVLY_WINDOW_DISABLE_STRETCH; + // fdwCommand |= MCI_OVLY_WINDOW_ENABLE_STRETCH; + // fdwCommand |= MCI_ANIM_WINDOW_HWND; + // OutTraceB("mciSendCommand: STRETCH flags=%x hwnd=%x\n", fdwCommand, pw->hWnd); + //} break; case MCI_PUT: RECT client; diff --git a/host/TabDebug.cpp b/host/TabDebug.cpp index faf373f..c9669de 100644 --- a/host/TabDebug.cpp +++ b/host/TabDebug.cpp @@ -32,6 +32,8 @@ void CTabDebug::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_MARKLOCK, cTarget->m_MarkLock); DDX_Check(pDX, IDC_MARKWING32, cTarget->m_MarkWinG32); DDX_Check(pDX, IDC_MARKGDI32, cTarget->m_MarkGDI32); + DDX_Check(pDX, IDC_DUMPDIBSECTION, cTarget->m_DumpDIBSection); + DDX_Check(pDX, IDC_DUMPDEVCONTEXT, cTarget->m_DumpDevContext); DDX_Check(pDX, IDC_NOBLT, cTarget->m_NoBlt); DDX_Check(pDX, IDC_FASTBLT, cTarget->m_FastBlt); DDX_Check(pDX, IDC_GDICOLORCONV, cTarget->m_GDIColorConv); diff --git a/host/TargetDlg.cpp b/host/TargetDlg.cpp index 43f3cb7..e49df32 100644 --- a/host/TargetDlg.cpp +++ b/host/TargetDlg.cpp @@ -181,6 +181,8 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) m_MarkLock = FALSE; m_MarkWinG32 = FALSE; m_MarkGDI32 = FALSE; + m_DumpDIBSection = FALSE; + m_DumpDevContext = FALSE; m_NoSysMemPrimary = FALSE; m_NoSysMemBackBuf = FALSE; m_NoBlt = FALSE; diff --git a/host/TargetDlg.h b/host/TargetDlg.h index 4c24b75..84b7453 100644 --- a/host/TargetDlg.h +++ b/host/TargetDlg.h @@ -135,6 +135,8 @@ public: BOOL m_MarkLock; BOOL m_MarkWinG32; BOOL m_MarkGDI32; + BOOL m_DumpDIBSection; + BOOL m_DumpDevContext; BOOL m_NoSysMemPrimary; BOOL m_NoSysMemBackBuf; BOOL m_NoBlt; diff --git a/host/dxwndhost.aps b/host/dxwndhost.aps index ae3a3aaab56a6a05b00d0d2cabdf1fa13d56a1cf..566bd4064a6bcaa82396395b67700cc60eb1d32b 100644 GIT binary patch delta 2039 zcmZux4@{J07=Qm9XdsAAtWydK30#l}$3$_-xHBXMLXc6WQekVx(NUO|IB`m1;6WYs zVB8qaKZC*D0oTN(Mr@Skk|a?lQ*^TyTO1t9kYAQLHmXYNzSmWy|NbaRr`+Qgx1Rtnkm}WOW<^1kovvl26IUrEnmD6ah zmg#~o@5*#;?J=pncz8mf-F2C2N92(nDdX0aGRAmwlC*t#L@q?2vu~-t76dcvV;2CjHKMGoN;et@ma}yxCoE7SkbhJ35k7zl$Am z2O-YwD%R{&S96X#tNan%+qIPHEiGO3%6!my`G;s9+HLvw$8Z|yeD6f1%WT%FZFhby0 z7uQ0~D^vsdsdQUsoSuI34jqI`C+IS|2(sU#D))^J`IfM zAVtKF6#Eb|HC09oWIHhu6Pg-G8cD&JL$;E4Va?@;5e%0hMub|(5FrbUB9y@)5!%3pfhBH$ z-Vtmp1(zt7Vq)bxTGBOM0Y7}xWx>l8k?Mi(vdBc$#=#fxP)tVBGq%IukEY}~}Okwc7-ify8Y(85|2u`aABykuP`$NY%6zBG(59(X z@_6r$+aQ1Z9D}a2Vgpz-_A)qgiD^?sVZALo@jhqhtaD4=e@4ER^1}}9F|L`f zlyeDV%Zz-kj>CuXTpO_t=?a}NbK^)--i%nK#WRIra6|S4p4pJVAzjB~pmBn0_k2`d(T1wMIz zA5O&;_*%r-{cs8+H(f>FepI=I%6bhZ1bg-dESyBPWPn5U4P>(>(b0{S|A25*s#{py z!m378wSycSqH4p6t-b@Nu%F(9tCRQ@C;kBw!fwG3hh=}FDE4n`=^y4W`WM&!2VjSa AbN~PV delta 1585 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 kSCJoogXtlvX!C9`m_MarkLock) t->flags3 |= MARKLOCK; if(dlg->m_MarkWinG32) t->flags8 |= MARKWING32; if(dlg->m_MarkGDI32) t->flags8 |= MARKGDI32; + if(dlg->m_DumpDIBSection) t->flags8 |= DUMPDIBSECTION; + if(dlg->m_DumpDevContext) t->flags8 |= DUMPDEVCONTEXT; if(dlg->m_NoSysMemPrimary) t->flags6 |= NOSYSMEMPRIMARY; if(dlg->m_NoSysMemBackBuf) t->flags6 |= NOSYSMEMBACKBUF; if(dlg->m_NoBlt) t->flags5 |= NOBLT; @@ -780,6 +782,8 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) dlg->m_MarkLock = t->flags3 & MARKLOCK ? 1 : 0; dlg->m_MarkWinG32 = t->flags8 & MARKWING32 ? 1 : 0; dlg->m_MarkGDI32 = t->flags8 & MARKGDI32 ? 1 : 0; + dlg->m_DumpDIBSection = t->flags8 & DUMPDIBSECTION ? 1 : 0; + dlg->m_DumpDevContext = t->flags8 & DUMPDEVCONTEXT ? 1 : 0; dlg->m_NoSysMemPrimary = t->flags6 & NOSYSMEMPRIMARY ? 1 : 0; dlg->m_NoSysMemBackBuf = t->flags6 & NOSYSMEMBACKBUF ? 1 : 0; dlg->m_NoBlt = t->flags5 & NOBLT ? 1 : 0; diff --git a/host/resource b/host/resource index 4c865d733f62f91bb635db4b10413bf601d80c39..cb0ccec337ae317cf8c3bb5aeeafb0235695637b 100644 GIT binary patch delta 102 zcmcb$ka^Q0<_){LCr2qtOn&FXx7ne`Ol-1(Fq>c~gD*n>gA0QvgA+qAgDZpcWcvW+ yNfX!@Ehjs&NQ0D!!<4u(gfTcX_%rx1ga8#rOlD-3pKQR)GWk-J%;vI1DS80vLK^1) delta 70 zcmV-M0J;CNq66BY1F*V_11|tClMy)`lirXD2}A%z073v&07sLbxD}I-3=ESn0|Wsx clYtK#lOPiWlkQ9ov*3$17LvCHv(%zqE