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 71657df..3345144 100644 Binary files a/dll/dxwnd.vs2008.suo and b/dll/dxwnd.vs2008.suo differ 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 ae3a3aa..566bd40 100644 Binary files a/host/dxwndhost.aps and b/host/dxwndhost.aps differ diff --git a/host/dxwndhost.rc b/host/dxwndhost.rc index 4d09648..f827a00 100644 Binary files a/host/dxwndhost.rc and b/host/dxwndhost.rc differ diff --git a/host/dxwndhost.vs2008.suo b/host/dxwndhost.vs2008.suo index aef3c02..e4f13b1 100644 Binary files a/host/dxwndhost.vs2008.suo and b/host/dxwndhost.vs2008.suo differ diff --git a/host/dxwndhostView.cpp b/host/dxwndhostView.cpp index abf2f4d..b7d636e 100644 --- a/host/dxwndhostView.cpp +++ b/host/dxwndhostView.cpp @@ -458,6 +458,8 @@ void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) if(dlg->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 4c865d7..cb0ccec 100644 Binary files a/host/resource and b/host/resource differ