diff --git a/dlls/gdiplus/gdiplus_private.h b/dlls/gdiplus/gdiplus_private.h index dbeebe3380e..a8c49d3c2dc 100644 --- a/dlls/gdiplus/gdiplus_private.h +++ b/dlls/gdiplus/gdiplus_private.h @@ -91,6 +91,7 @@ struct GpPen{ struct GpGraphics{ HDC hdc; HWND hwnd; + BOOL owndc; SmoothingMode smoothing; CompositingQuality compqual; InterpolationMode interpolation; diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c index 2a98ee51b1b..af3968c0472 100644 --- a/dlls/gdiplus/graphics.c +++ b/dlls/gdiplus/graphics.c @@ -924,6 +924,7 @@ GpStatus WINGDIPAPI GdipCreateFromHDC2(HDC hdc, HANDLE hDevice, GpGraphics **gra (*graphics)->hdc = hdc; (*graphics)->hwnd = WindowFromDC(hdc); + (*graphics)->owndc = FALSE; (*graphics)->smoothing = SmoothingModeDefault; (*graphics)->compqual = CompositingQualityDefault; (*graphics)->interpolation = InterpolationModeDefault; @@ -947,6 +948,7 @@ GpStatus WINGDIPAPI GdipCreateFromHWND(HWND hwnd, GpGraphics **graphics) return ret; (*graphics)->hwnd = hwnd; + (*graphics)->owndc = TRUE; return Ok; } @@ -1081,7 +1083,7 @@ GpStatus WINGDIPAPI GdipDeleteGraphics(GpGraphics *graphics) if(!graphics) return InvalidParameter; if(graphics->busy) return ObjectBusy; - if(graphics->hwnd) + if(graphics->owndc) ReleaseDC(graphics->hwnd, graphics->hdc); GdipDeleteRegion(graphics->clip);