# 画面設計書 4-TitlebarControl（タイトルバー）

## 概要

本ドキュメントは、Windows Terminal のカスタムタイトルバー TitlebarControl の画面設計書である。最小化・最大化・閉じるボタン（MinMaxCloseControl）とドラッグ領域を含むカスタムタイトルバーで、TerminalPage の上部に配置される。

### 本画面の処理概要

**業務上の目的・背景**：TitlebarControl は Windows のデフォルトタイトルバーの代わりに使用されるカスタムタイトルバーである。タブをタイトルバー領域に統合するための基盤を提供し、ウィンドウのドラッグ移動やダブルクリックによる最大化/復元を可能にする。

**画面へのアクセス方法**：TerminalPage の上部に常時表示される。フォーカスモードおよびフルスクリーンモード時には非表示となる。

**主要な操作・処理内容**：
1. ウィンドウのドラッグ移動（DragBar領域）
2. ドラッグバーのダブルクリックによるウィンドウ最大化/復元
3. MinMaxCloseControl による最小化・最大化・閉じる操作
4. コンテンツ領域（ContentRoot）へのタブ行等の表示

**画面遷移**：
- 親：TerminalPage
- 子：MinMaxCloseControl（ウィンドウ制御ボタン群）

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

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 60 | フォーカスモード切替 | 補助機能 | フォーカスモード時にタイトルバーが非表示になる |
| 61 | フルスクリーン切替 | 補助機能 | フルスクリーン時にタイトルバーが非表示になる |
| 64 | ウィンドウを閉じる | 補助機能 | 閉じるボタンによりウィンドウを閉じる（MinMaxCloseControl経由） |

## 画面種別

コンポーネント / ナビゲーション

## URL/ルーティング

該当なし

## 入出力項目

| 項目名 | 入出力 | 型 | 説明 |
|--------|--------|------|------|
| handle | 入力 | uint64_t | ウィンドウハンドル（コンストラクタ引数） |
| Content | 入力/出力 | IInspectable | ContentRootに表示するコンテンツ |
| CaptionButtonWidth | 出力 | float | キャプションボタンの幅 |

## 表示項目

| 項目名 | 表示位置 | 説明 |
|--------|----------|------|
| ContentRoot | Grid.Column=0 | コンテンツ表示領域（タブ行などが配置される） |
| DragBar | Grid.Column=1 | ドラッグ領域（MinWidth=45, ウィンドウ移動用） |
| MinMaxCloseControl | Grid.Column=2 | 最小化・最大化・閉じるボタン群 |
| CardStrokeBorder | Grid.Column=1-2 | 下端のボーダーライン（Height=1） |

## イベント仕様

### 1-ダブルクリック最大化/復元（DragBar_DoubleTapped）

DragBar領域でダブルクリックすると、_OnMaximizeOrRestore メソッドが呼び出され、WM_SYSCOMMAND で SC_MAXIMIZE または SC_RESTORE を送信してウィンドウの最大化/復元を切り替える。

### 2-ウィンドウリサイズ（Root_SizeChanged）

タイトルバーのサイズが変更された際に呼び出される。キャプションボタンの高さを通常時（40px）と最大化時（32px）で切り替える。

### 3-フルスクリーン変更（FullscreenChanged）

フルスクリーン状態が変更された際にタイトルバーの表示/非表示を制御する。

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

該当なし

## メッセージ仕様

該当なし

## 例外処理

該当なし

## 備考

- Grid ベースのコントロール（d:DesignHeight=36, d:DesignWidth=400）
- 3列構成：Content（Auto）、DragBar（*）、MinMaxCloseControl（Auto）
- DragBar の MinWidth=45 でドラッグ可能な最小幅を確保
- GH#10320対応として手動でCardStrokeColorDefaultBrushのボーダーを追加
- _window メンバ変数は non-owning handle

---

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

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

### 推奨読解順序

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | TitlebarControl.h | `src/cascadia/TerminalApp/TitlebarControl.h` | コンストラクタでHWNDを受け取る（12行目）。HoverButton/PressButton/ReleaseButtons メソッドでキャプションボタン制御（14-17行目） |

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | TitlebarControl.xaml | `src/cascadia/TerminalApp/TitlebarControl.xaml` | 3列Gridレイアウト（28-32行目）。ContentRoot、DragBar、MinMaxCloseControl（34-44行目） |

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

```
TerminalPage
  └─ TitlebarControl
       ├─ ContentRoot (ContentPresenter)
       │    └─ TabRowControl (表示タブがタイトルバーにある場合)
       ├─ DragBar (Border)
       │    └─ DragBar_DoubleTapped -> _OnMaximizeOrRestore
       └─ MinMaxCloseControl
            ├─ _MinimizeClick -> MinimizeClick イベント
            ├─ _MaximizeClick -> MaximizeClick イベント
            └─ _CloseClick -> CloseClick イベント
```

### データフロー図

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

HWND ─────────────> TitlebarControl         ──> ウィンドウ操作
(コンストラクタ)      ├─> DragBar操作              (WM_SYSCOMMAND)
                     └─> MinMaxCloseControl

WindowVisualState ─> SetWindowVisualState   ──> ボタン状態更新
                     └─> MinMaxCloseControl       (最大化/復元切替)
```

### 関連ファイル一覧

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