public SkinableWindowBorder(TopLevelWindow Window, WindowBorderSkin skin, bool IsExecluded)
        {
            _parent = Window;

            TopBorder = new SkinBorder(this);
            LeftBorder = new SkinBorder(this);
            RightBorder = new SkinBorder(this);
            BottomBorder = new SkinBorder(this);

            TitleBackgroundControl = new LayeredControl(TopBorder);
            TitleControl = new LayeredLabel(TopBorder);

            IconControl = new LayeredIcon(TopBorder);
            IconControl.Size = new Size(16, 16);

            MinimizeButton = new MinimizeButton(TopBorder);
            MaximizeButton = new MaximizeButton(TopBorder);
            CloseButton = new CloseButton(TopBorder);
            HelpButton = new HelpButton(TopBorder);

            if (Window.SizeBox)
            {
                TopBorder.LeftCornerCursor = Cursors.SizeNWSE;
                TopBorder.RightCornerCursor = Cursors.SizeNESW;
                TopBorder.TopCursor = Cursors.SizeNS;
                LeftBorder.NormalCursor = Cursors.SizeWE;
                RightBorder.NormalCursor = Cursors.SizeWE;
                BottomBorder.NormalCursor = Cursors.SizeNS;
                BottomBorder.LeftCornerCursor = Cursors.SizeNESW;
                BottomBorder.RightCornerCursor = Cursors.SizeNWSE;
            }

            _windowEventHandler = new WindowEventHandler(this, Parent);
            _settingsUpdater = new SettingsUpdater(IsExecluded, this);
            _processExitHandler = new ProcessExitHandler(this, Parent.Process);
            _skinWindowButtonsHandler = new SkinWindowButtonsHandler(this);
            _controlsChangeHandler = new SkinWindowControlsChangeHandler(this);

            Skin = skin;
        }
        protected virtual void Dispose(bool disposing)
        {
            if(!_disposed){
                OnDisposed(this);

                WindowEventHandler.Dispose();

                _processExitHandler.Dispose();
                _skinWindowButtonsHandler.Dispose();
                _settingsUpdater.Dispose();

                TopBorder.Dispose();
                LeftBorder.Dispose();
                RightBorder.Dispose();
                BottomBorder.Dispose();

                TopBorder = null;
                LeftBorder = null;
                RightBorder = null;
                BottomBorder = null;

                MinimizeButton = null;
                MaximizeButton = null;
                CloseButton = null;
                HelpButton = null;

                TitleControl = null;
                TitleBackgroundControl = null;

                IconControl = null;

                _skin = null;

                _parent = null;

                _processExitHandler = null;
                _settingsUpdater = null;
                _skinWindowButtonsHandler = null;
                _windowEventHandler = null;
                _controlsChangeHandler = null;

                _disposed = true;
            }
        }