1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- using System;
- using HandyControl.Tools.Interop;
- namespace HandyControl.Data;
- internal class GlowDrawingContext : DisposableObject
- {
- private readonly GlowBitmap _windowBitmap;
- internal InteropValues.BLENDFUNCTION Blend;
- internal GlowDrawingContext(int width, int height)
- {
- ScreenDC = InteropMethods.GetDC(IntPtr.Zero);
- if (ScreenDC == IntPtr.Zero) return;
- WindowDC = InteropMethods.CreateCompatibleDC(ScreenDC);
- if (WindowDC == IntPtr.Zero) return;
- BackgroundDC = InteropMethods.CreateCompatibleDC(ScreenDC);
- if (BackgroundDC == IntPtr.Zero) return;
- Blend.BlendOp = 0;
- Blend.BlendFlags = 0;
- Blend.SourceConstantAlpha = 255;
- Blend.AlphaFormat = 1;
- _windowBitmap = new GlowBitmap(ScreenDC, width, height);
- InteropMethods.SelectObject(WindowDC, _windowBitmap.Handle);
- }
- internal bool IsInitialized =>
- ScreenDC != IntPtr.Zero && WindowDC != IntPtr.Zero &&
- BackgroundDC != IntPtr.Zero && _windowBitmap != null;
- internal IntPtr ScreenDC { get; }
- internal IntPtr WindowDC { get; }
- internal IntPtr BackgroundDC { get; }
- internal int Width => _windowBitmap.Width;
- internal int Height => _windowBitmap.Height;
- protected override void DisposeManagedResources() => _windowBitmap.Dispose();
- protected override void DisposeNativeResources()
- {
- if (ScreenDC != IntPtr.Zero) InteropMethods.ReleaseDC(IntPtr.Zero, ScreenDC);
- if (WindowDC != IntPtr.Zero) InteropMethods.DeleteDC(WindowDC);
- if (BackgroundDC != IntPtr.Zero) InteropMethods.DeleteDC(BackgroundDC);
- }
- }
|