/// <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); }
/// <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); } }