# 画面設計書 90-TopmostWindowTest

## 概要

本ドキュメントは、IntegrationTestAppアプリケーションにおけるTopmostWindowTest（最前面ウィンドウテスト）ウィンドウの画面設計について記載します。

### 本画面の処理概要

このウィンドウは、Avaloniaフレームワークの最前面ウィンドウ（Topmost）機能をテストするための専用ウィンドウです。ウィンドウの現在位置をリアルタイムで表示し、Moveボタンによる位置変更機能を提供します。Topmostプロパティの動作検証や、複数ウィンドウのZ順序テストに使用されます。

**業務上の目的・背景**：
Avaloniaフレームワークの最前面ウィンドウ機能の統合テストを実行するためのテストウィンドウです。Topmostウィンドウが他のウィンドウより常に前面に表示されるか、位置変更が正しく動作するかを検証するために使用されます。プラットフォーム固有のウィンドウ管理動作のテストにも活用されます。

**画面へのアクセス方法**：
IntegrationTestAppメインウィンドウのWindowPageから、またはプログラムから直接TopmostWindowTestをインスタンス化して表示します。コンストラクタでnameパラメータを指定してウィンドウ名を設定します。

**主要な操作・処理内容**：
1. ウィンドウの現在位置（Position）をリアルタイム表示
2. Moveボタンによる位置変更（X+100、Y+100）
3. 位置変更時のPositionChangedイベントでテキスト更新

**画面遷移**：
- 遷移元：IntegrationTestApp WindowPage
- 遷移先：なし（単独のテストウィンドウ）

**権限による表示制御**：
特に権限による表示制御はありません。テスト用途のため全ての機能が常に利用可能です。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 42 | Window | 主機能 | 最前面ウィンドウテスト、位置の制御 |

## 画面種別

テスト / インタラクティブ

## URL/ルーティング

独立したウィンドウ（コードから直接表示）

## 入出力項目

| 項目名 | 入出力 | 型 | 説明 |
|--------|--------|-----|------|
| MoveButton | 入力 | Button | 位置を(+100, +100)移動 |

## 表示項目

| 項目名 | データ型 | 説明 |
|--------|----------|------|
| CurrentPosition | TextBox | 現在のウィンドウ位置（PixelPoint形式、読み取り専用） |
| MoveButton | Button | "Move"テキストのボタン（中央配置） |

## イベント仕様

### 1-コンストラクタ

ウィンドウ初期化時に発生するイベントです。

- **トリガー**：TopmostWindowTestのインスタンス化時（nameパラメータ必須）
- **処理内容**：
  1. Name = name（引数で渡されたウィンドウ名を設定）
  2. InitializeComponent()でXAMLリソースを読み込み
  3. PositionChangedイベントハンドラを登録
  4. CurrentPositionテキストボックスに位置を表示

### 2-PositionChanged

ウィンドウ位置が変更された際のイベントです。

- **トリガー**：ウィンドウの移動時（Moveボタン押下またはドラッグ）
- **処理内容**：
  1. CurrentPosition.Text = $"{Position}"で位置を更新

### 3-Button_OnClick

Moveボタンのクリックイベントです。

- **トリガー**：MoveButtonのクリック
- **処理内容**：
  1. Position += new PixelPoint(100, 100)で位置を移動

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

本画面はデータベースを使用しません。

## メッセージ仕様

本画面はシステムメッセージを表示しません。位置はテキストボックスで表示されます。

## 例外処理

本画面はテストアプリケーションのため、例外時の特別な処理は行いません。

## 備考

- 初期サイズは640x480ピクセルに固定
- コンストラクタでnameパラメータが必須（ウィンドウ識別用）
- PositionはPixelPoint型で、画面座標系の位置を表す
- Topmostプロパティは呼び出し側で設定（このウィンドウ自体はTopmost設定を持たない）

---

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

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

### 推奨読解順序

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

このウィンドウは非常にシンプルで、外部データ構造への依存はありません。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | TopmostWindowTest.axaml.cs | `samples/IntegrationTestApp/TopmostWindowTest.axaml.cs` | 行1-20で全体構造を確認 |

**読解のコツ**: コンストラクタがnameパラメータを要求する点が特徴です。

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

コンストラクタでのイベント登録を確認します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | TopmostWindowTest.axaml.cs | `samples/IntegrationTestApp/TopmostWindowTest.axaml.cs` | 行9-14でコンストラクタを確認 |

**主要処理フロー**:
- **行9**: public TopmostWindowTest(string name)（nameパラメータ必須）
- **行11**: Name = name（ウィンドウ名設定）
- **行12**: InitializeComponent()
- **行13**: PositionChangedイベント登録

#### Step 3: XAMLレイアウトを理解する

シンプルなUIレイアウトを確認します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | TopmostWindowTest.axaml | `samples/IntegrationTestApp/TopmostWindowTest.axaml` | 行1-17で全体構造を確認 |

**主要処理フロー**:
- **行7-9**: ウィンドウサイズ640x480
- **行11-14**: CurrentPositionテキストボックス（Grid.Column="1" Grid.Row="3"だが実際はGrid定義なし）
- **行15**: MoveButton（中央配置、Click="Button_OnClick"）

#### Step 4: ボタンクリックハンドラを理解する

位置変更ロジックを確認します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 4-1 | TopmostWindowTest.axaml.cs | `samples/IntegrationTestApp/TopmostWindowTest.axaml.cs` | 行16-19でButton_OnClickを確認 |

**主要処理フロー**:
- **行18**: Position += new PixelPoint(100, 100)

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

```
TopmostWindowTest (Window)
    │
    ├─ コンストラクタ(string name)
    │      ├─ Name = name
    │      ├─ InitializeComponent()
    │      └─ PositionChanged += ...
    │
    ├─ PositionChanged
    │      └─ CurrentPosition.Text = $"{Position}"
    │
    └─ Button_OnClick
           └─ Position += new PixelPoint(100, 100)
```

### データフロー図

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

ウィンドウ表示   ─▶ PositionChanged          ─▶ CurrentPosition表示
                        │
                        ▼
Moveボタン       ─▶ Position += (100, 100)   ─▶ ウィンドウ移動
                        │
                        ▼
                   PositionChanged           ─▶ CurrentPosition更新
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| TopmostWindowTest.axaml | `samples/IntegrationTestApp/TopmostWindowTest.axaml` | テンプレート | 最前面ウィンドウテストのUIレイアウト |
| TopmostWindowTest.axaml.cs | `samples/IntegrationTestApp/TopmostWindowTest.axaml.cs` | ソース | 位置制御、ボタンクリックハンドラ |
| MainWindow.axaml | `samples/IntegrationTestApp/MainWindow.axaml` | テンプレート | メインウィンドウ（遷移元） |
