Example #1
0
        /// <summary>
        /// ウィンドウ透過をON/OFF
        /// </summary>
        public void EnableTransparent(bool enable)
        {
            if (!IsActive)
            {
                return;
            }

            if (enable)
            {
                // 現在のウィンドウ情報を記憶
                StoreWindowSize();

                // 枠無しウィンドウにする
                EnableBorderless(true);

                switch (TransparentType)
                {
                case TransparentTypes.Alpha:
                    EnableTransparentByDWM();
                    break;

                case TransparentTypes.ColorKey:
                    EnableTransparentBySetLayered();
                    break;
                }
            }
            else
            {
                // 現在の指定ではなく、透過にした時点の指定に基づいて無効化
                switch (_currentTransparentType)
                {
                case TransparentTypes.Alpha:
                    DisableTransparentByDWM();
                    break;

                case TransparentTypes.ColorKey:
                    DisableTransparentBySetLayered();
                    break;
                }

                // 枠ありウィンドウにする
                EnableBorderless(false);

                // 操作の透過をやめる
                EnableClickThrough(false);
            }

            _currentTransparentType = TransparentType;

            // ウィンドウ枠の分サイズが変わった際、Unityにリサイズイベントを発生させないとサイズがずれる
            ResetSize();

            // ウィンドウ再描画
            WinApi.ShowWindow(hWnd, WinApi.SW_SHOW);
        }
Example #2
0
        /// <summary>
        /// ウィンドウ透過をON/OFF
        /// </summary>
        public void EnableTransparent(bool enable)
        {
            if (!IsActive)
            {
                return;
            }

            bool maximized = IsMaximized;

            // 最大化状態ならば、一度通常ウィンドウに戻してから透過・枠有無を変更する
            if (maximized)
            {
                Restore();
            }

            if (enable)
            {
                // 現在のウィンドウ情報を記憶
                StoreWindowSize();

                // 枠無しウィンドウにする
                EnableBorderless(true);

                switch (TransparentType)
                {
                case TransparentTypes.Alpha:
                    EnableTransparentByDWM();
                    break;

                case TransparentTypes.ColorKey:
                    EnableTransparentBySetLayered();
                    break;
                }
            }
            else
            {
                // 現在の指定ではなく、透過にした時点の指定に基づいて無効化
                switch (_currentTransparentType)
                {
                case TransparentTypes.Alpha:
                    DisableTransparentByDWM();
                    break;

                case TransparentTypes.ColorKey:
                    DisableTransparentBySetLayered();
                    break;
                }

                // 枠ありウィンドウにする
                EnableBorderless(false);

                // 操作の透過をやめる
                EnableClickThrough(false);
            }

            // 戻す方法を決めるため、透明化が変更された時のタイプを記録しておく
            _currentTransparentType = TransparentType;

            // 呼ぶ前に最大化状態だったならば、再度最大化
            if (maximized)
            {
                // ウィンドウ再描画は最大化時に行われる
                Maximize();
            }
            else
            {
                // ウィンドウ枠の分サイズが変わった際、Unityにリサイズイベントを発生させないとサイズがずれる
                ResetSize();

                // ウィンドウ再描画
                WinApi.ShowWindow(hWnd, WinApi.SW_SHOW);
            }
        }