# 画面設計書 5-MinMaxCloseControl（ウィンドウ制御）

## 概要

本ドキュメントは、Windows Terminal のウィンドウ制御ボタン群 MinMaxCloseControl の画面設計書である。最小化・最大化・閉じるの3つのキャプションボタンを提供するコントロールで、TitlebarControl の子コンポーネントである。

### 本画面の処理概要

**業務上の目的・背景**：MinMaxCloseControl は Windows のウィンドウ管理操作（最小化、最大化/復元、閉じる）のためのカスタムキャプションボタンを提供する。Windows Terminal はカスタムタイトルバーを使用するため、標準のウィンドウ制御ボタンの代わりにこのコントロールが必要となる。

**画面へのアクセス方法**：TitlebarControl の右端（Grid.Column=2）に常時表示される。

**主要な操作・処理内容**：
1. 最小化ボタン（MinimizeButton）クリックでウィンドウを最小化
2. 最大化ボタン（MaximizeButton）クリックでウィンドウを最大化/復元
3. 閉じるボタン（CloseButton）クリックでウィンドウを閉じる
4. ホバー・プレス時のビジュアルステート変更
5. 最大化状態に応じたグリフ切替（最大化/復元アイコン）

**画面遷移**：
- 親：TitlebarControl

**権限による表示制御**：特になし

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 63 | 最大化の設定 | 主機能 | 最大化ボタンによりウィンドウを最大化/元に戻す |
| 64 | ウィンドウを閉じる | 主機能 | 閉じるボタンによりウィンドウを閉じる |

## 画面種別

コンポーネント / 操作

## URL/ルーティング

該当なし

## 入出力項目

| 項目名 | 入出力 | 型 | 説明 |
|--------|--------|------|------|
| MinimizeClick | 出力 | イベント | 最小化ボタンクリックイベント |
| MaximizeClick | 出力 | イベント | 最大化ボタンクリックイベント |
| CloseClick | 出力 | イベント | 閉じるボタンクリックイベント |
| Focused | 入力/出力 | bool | フォーカス状態 |

## 表示項目

| 項目名 | 表示位置 | 説明 |
|--------|----------|------|
| MinimizeButton | StackPanel 1番目 | 最小化ボタン（Glyph: E921、幅46px） |
| MaximizeButton | StackPanel 2番目 | 最大化/復元ボタン（Glyph: E922/E923、幅46px） |
| CloseButton | StackPanel 3番目 | 閉じるボタン（Glyph: E8BB、幅46px、赤色ホバー） |

## イベント仕様

### 1-最小化（_MinimizeClick）

MinimizeButton のクリックで _MinimizeClick が呼び出され、MinimizeClick イベントが発火する。

### 2-最大化/復元（_MaximizeClick）

MaximizeButton のクリックで _MaximizeClick が呼び出され、MaximizeClick イベントが発火する。ウィンドウ状態に応じてグリフが MaximizeGlyph（E922）と RestoreGlyph（E923）の間で切り替わる（VisualState: WindowStateNormal / WindowStateMaximized）。

### 3-閉じる（_CloseClick）

CloseButton のクリックで _CloseClick が呼び出され、CloseClick イベントが発火する。ホバー時は赤色背景（#C42B1C）、白色前景に変更される。

### 4-ホバー・プレスのビジュアルステート

各ボタンは Normal / Unfocused / PointerOver / Pressed / Disabled の5つのビジュアルステートを持つ。PointerOverからNormalへの遷移はアニメーション付き（0.15秒、0.1秒）。

## データベース更新仕様

該当なし

## メッセージ仕様

| メッセージID | 種別 | メッセージ内容 | 表示条件 |
|-------------|------|---------------|---------|
| WindowMinimizeButtonToolTip | ToolTip | 最小化 | MinimizeButtonホバー時 |
| MaximizeToolTip | ToolTip | 最大化/元に戻す | MaximizeButtonホバー時 |
| WindowCloseButtonToolTip | ToolTip | 閉じる | CloseButtonホバー時 |

## 例外処理

該当なし

## 備考

- StackPanel ベースのコントロール（Horizontal方向）
- 各ボタンの幅は46px、高さは通常時40px（CaptionButtonHeightWindowed）、最大化時32px（CaptionButtonHeightMaximized）
- 閉じるボタンのホバー色は #C42B1C（赤色）で、前景は白色
- Light/Dark/HighContrast の3テーマに対応
- HighContrastテーマでは異なるグリフコード（EF2D/EF2E/EF2F/EF2C）を使用
- CaptionButton スタイルはリソースディクショナリで一元定義
- ボタンは IsTabStop=False でキーボードフォーカスを受け取らない

---

## コードリーディングガイド

本画面を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: データ構造を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | MinMaxCloseControl.h | `src/cascadia/TerminalApp/MinMaxCloseControl.h` | SetWindowVisualState、HoverButton、PressButton、ReleaseButtons メソッド（18-22行目）。MinimizeClick/MaximizeClick/CloseClick イベント（34-36行目） |

#### Step 2: エントリーポイントを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | MinMaxCloseControl.xaml | `src/cascadia/TerminalApp/MinMaxCloseControl.xaml` | StackPanel内に3つのButton。CaptionButtonスタイル定義（163-267行目）。各ボタンのリソース定義（272-401行目） |

**主要処理フロー**:
1. **136行目**: CaptionButtonGlyph のデフォルト値（E8BB = 閉じるボタン）
2. **138-141行目**: 各グリフ文字列の定義（MinimizeGlyph, MaximizeGlyph, RestoreGlyph, CloseGlyph）
3. **159-161行目**: ボタン高さ定義（通常時40px、最大化時32px）
4. **188-260行目**: VisualStateManager による5状態のスタイル遷移

### プログラム呼び出し階層図

```
TitlebarControl
  └─ MinMaxCloseControl (StackPanel)
       ├─ MinimizeButton
       │    ├─ _MinimizeClick -> MinimizeClick イベント
       │    └─ CaptionButton スタイル (Glyph: E921)
       ├─ MaximizeButton
       │    ├─ _MaximizeClick -> MaximizeClick イベント
       │    └─ CaptionButton スタイル (Glyph: E922/E923)
       │         └─ WindowStateMaximized -> RestoreGlyph
       └─ CloseButton
            ├─ _CloseClick -> CloseClick イベント
            └─ CaptionButton スタイル (Glyph: E8BB)
                 └─ PointerOver -> 赤背景 (#C42B1C)
```

### データフロー図

```
[入力]                    [処理]                    [出力]

ユーザー操作 ─────> ボタンClick             ──> MinimizeClick /
(クリック)            └─> _MinimizeClick          MaximizeClick /
                     └─> _MaximizeClick          CloseClick イベント
                     └─> _CloseClick

WindowVisualState ─> SetWindowVisualState   ──> グリフ切替
                     └─> MaximizeGlyph/RestoreGlyph

Focused状態 ──────> VisualState切替         ──> 前景色変更
                     └─> Normal/Unfocused         (CaptionButtonForegroundUnfocused)
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| MinMaxCloseControl.xaml | `src/cascadia/TerminalApp/MinMaxCloseControl.xaml` | テンプレート | XAML レイアウト・スタイル定義 |
| MinMaxCloseControl.h | `src/cascadia/TerminalApp/MinMaxCloseControl.h` | ソース | クラス宣言 |
| MinMaxCloseControl.cpp | `src/cascadia/TerminalApp/MinMaxCloseControl.cpp` | ソース | 実装 |
| TitlebarControl.xaml | `src/cascadia/TerminalApp/TitlebarControl.xaml` | テンプレート | 親コンポーネント |
