| File: Windows\Win32\Graphics\Gdi\SaveDcScope.cs | Web Access |
| Project: src\winforms\src\System.Private.Windows.Core\src\System.Private.Windows.Core.csproj (System.Private.Windows.Core) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. namespace Windows.Win32.Graphics.Gdi; /// <summary> /// Helper to scope lifetime of a saved device context state. /// </summary> /// <remarks> /// <para> /// Use in a <see langword="using" /> statement. If you must pass this around, always pass by <see langword="ref" /> /// to avoid duplicating the handle and risking a double restore. /// </para> /// <para> /// The state that is saved includes ICM (color management), palette, path drawing state, and other objects /// that are selected into the DC (bitmap, brush, pen, clipping region, font). /// </para> /// <para> /// Ideally saving the entire DC state can be avoided for simple drawing operations and relying on restoring /// individual state pieces can be done instead (putting back the original pen, etc.). /// </para> /// </remarks> internal readonly ref struct SaveDcScope { public HDC HDC { get; } private readonly int _savedState; /// <summary> /// Saves the device context state using <see cref="PInvokeCore.SaveDC(HDC)"/>. /// </summary> /// <param name="hdc"></param> public SaveDcScope(HDC hdc) { _savedState = PInvokeCore.SaveDC(hdc); HDC = hdc; } public void Dispose() { if (_savedState != 0) { PInvokeCore.RestoreDC(HDC, _savedState); } } }