# quoilam/countdown architecture

> Architecture diagram of the GitHub repository quoilam/countdown, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/quoilam/countdown
- Repository: https://github.com/quoilam/countdown

## Overview

Countdown is a small Win32 desktop application that displays a days-remaining countdown and the current time over a supplied bitmap, placing its window on the Windows desktop. The workflow starts in `main.cpp`, initializes and creates the window, then runs the message loop; window messages initialize resources, trigger drawing, and clean up on exit. The countdown is calculated against a fixed 2022 date. The graph reflects the sampled runtime source; Windows API behavior is represented only where it provides an external interaction.

Main entry points: [`Core/Core.cpp`](https://github.com/quoilam/countdown/blob/main/Core/Core.cpp) (Core initialization), [`MainWindow/MainWindowProcDetail.cpp`](https://github.com/quoilam/countdown/blob/main/MainWindow/MainWindowProcDetail.cpp) (Window message handler), [`MainWindow/SetMainWindow.cpp`](https://github.com/quoilam/countdown/blob/main/MainWindow/SetMainWindow.cpp) (Desktop placement), [`main.cpp`](https://github.com/quoilam/countdown/blob/main/main.cpp) (Application entry)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_startup["Startup and lifecycle"]
  node_entry["Application entry<br/>[main.cpp]"]
  node_core["Core initialization<br/>[Core.cpp]"]
  node_globals["Shared runtime state<br/>[Premiere.cpp]"]
  node_message_loop["Message loop<br/>[Core.cpp]"]
end

subgraph group_window["Desktop window"]
  node_window_class["Window registration<br/>[SetMainWindow.cpp]"]
  node_window_create["Window creation<br/>[SetMainWindow.cpp]"]
  node_window_proc["Window message handler"]
  node_window_init["Window initialization"]
  node_desktop_embed["Desktop placement<br/>[SetMainWindow.cpp]"]
  node_debug_output["Debug output<br/>[Exception.cpp]"]
  node_cleanup["Window cleanup"]
end

subgraph group_rendering["Countdown rendering"]
  node_paint["Countdown drawing"]
  node_timer["Redraw timer thread"]
  node_background["Background bitmap<br/>[R-C.bmp]"]
end

node_windows(("Windows desktop and APIs"))
node_clock(("System clock"))
node_display(("Desktop display"))

node_entry -->|"initializes"| node_core
node_entry -->|"starts"| node_message_loop
node_core -->|"sets dimensions"| node_globals
node_core -->|"registers via"| node_window_class
node_core -->|"creates via"| node_window_create
node_message_loop -->|"retrieves messages"| node_windows
node_windows -->|"dispatches messages"| node_window_proc
node_window_create -->|"creates and shows"| node_windows
node_window_proc -->|"handles create"| node_window_init
node_window_proc -->|"handles paint"| node_paint
node_window_proc -->|"handles destroy"| node_cleanup
node_window_init -->|"places window"| node_desktop_embed
node_desktop_embed -->|"uses shell APIs"| node_windows
node_desktop_embed -->|"reports errors"| node_debug_output
node_window_init -->|"loads bitmap"| node_background
node_window_init -->|"starts thread"| node_timer
node_timer -->|"invalidates window"| node_windows
node_paint -->|"copies bitmap"| node_background
node_paint -->|"reads local time"| node_clock
node_paint -->|"draws frame"| node_display
node_cleanup -->|"releases resources"| node_windows

click node_entry "https://github.com/quoilam/countdown/blob/main/main.cpp"
click node_core "https://github.com/quoilam/countdown/blob/main/Core/Core.cpp"
click node_globals "https://github.com/quoilam/countdown/blob/main/Premiere/Premiere.cpp"
click node_message_loop "https://github.com/quoilam/countdown/blob/main/Core/Core.cpp"
click node_window_class "https://github.com/quoilam/countdown/blob/main/MainWindow/SetMainWindow.cpp"
click node_window_create "https://github.com/quoilam/countdown/blob/main/MainWindow/SetMainWindow.cpp"
click node_window_proc "https://github.com/quoilam/countdown/blob/main/MainWindow/MainWindowProcDetail.cpp"
click node_window_init "https://github.com/quoilam/countdown/blob/main/MainWindow/MainWindowProcDetail.cpp"
click node_desktop_embed "https://github.com/quoilam/countdown/blob/main/MainWindow/SetMainWindow.cpp"
click node_debug_output "https://github.com/quoilam/countdown/blob/main/ToolFunc/Exception.cpp"
click node_paint "https://github.com/quoilam/countdown/blob/main/MainWindow/MainWindowProcDetail.cpp"
click node_timer "https://github.com/quoilam/countdown/blob/main/MainWindow/MainWindowProcDetail.cpp"
click node_cleanup "https://github.com/quoilam/countdown/blob/main/MainWindow/MainWindowProcDetail.cpp"
click node_background "https://github.com/quoilam/countdown/blob/main/R-C.bmp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_entry,node_core,node_globals,node_message_loop toneBlue
class node_window_class,node_window_create,node_window_proc,node_window_init,node_desktop_embed,node_debug_output,node_cleanup toneAmber
class node_paint,node_timer,node_background,node_windows toneMint
class node_clock,node_display toneIndigo
```

## Components

### Startup and lifecycle

- [Application entry](https://github.com/quoilam/countdown/blob/main/main.cpp): `main.cpp`
- [Core initialization](https://github.com/quoilam/countdown/blob/main/Core/Core.cpp): `Core/Core.cpp`
- [Shared runtime state](https://github.com/quoilam/countdown/blob/main/Premiere/Premiere.cpp): `Premiere/Premiere.cpp`
- [Message loop](https://github.com/quoilam/countdown/blob/main/Core/Core.cpp): `Core/Core.cpp`

### Desktop window

- [Window registration](https://github.com/quoilam/countdown/blob/main/MainWindow/SetMainWindow.cpp): `MainWindow/SetMainWindow.cpp`
- [Window creation](https://github.com/quoilam/countdown/blob/main/MainWindow/SetMainWindow.cpp): `MainWindow/SetMainWindow.cpp`
- [Window message handler](https://github.com/quoilam/countdown/blob/main/MainWindow/MainWindowProcDetail.cpp): `MainWindow/MainWindowProcDetail.cpp`
- [Window initialization](https://github.com/quoilam/countdown/blob/main/MainWindow/MainWindowProcDetail.cpp): `MainWindow/MainWindowProcDetail.cpp`
- [Desktop placement](https://github.com/quoilam/countdown/blob/main/MainWindow/SetMainWindow.cpp): `MainWindow/SetMainWindow.cpp`
- [Debug output](https://github.com/quoilam/countdown/blob/main/ToolFunc/Exception.cpp): `ToolFunc/Exception.cpp`
- [Window cleanup](https://github.com/quoilam/countdown/blob/main/MainWindow/MainWindowProcDetail.cpp): `MainWindow/MainWindowProcDetail.cpp`

### Countdown rendering

- [Countdown drawing](https://github.com/quoilam/countdown/blob/main/MainWindow/MainWindowProcDetail.cpp): `MainWindow/MainWindowProcDetail.cpp`
- [Redraw timer thread](https://github.com/quoilam/countdown/blob/main/MainWindow/MainWindowProcDetail.cpp): `MainWindow/MainWindowProcDetail.cpp`
- [Background bitmap](https://github.com/quoilam/countdown/blob/main/R-C.bmp): `R-C.bmp`

### Other components

- **Windows desktop and APIs**
- **System clock**
- **Desktop display**

## Connections

- Application entry → Core initialization: initializes
- Application entry → Message loop: starts
- Core initialization → Shared runtime state: sets dimensions
- Core initialization → Window registration: registers via
- Core initialization → Window creation: creates via
- Message loop → Windows desktop and APIs: retrieves messages
- Windows desktop and APIs → Window message handler: dispatches messages
- Window creation → Windows desktop and APIs: creates and shows
- Window message handler → Window initialization: handles create
- Window message handler → Countdown drawing: handles paint
- Window message handler → Window cleanup: handles destroy
- Window initialization → Desktop placement: places window
- Desktop placement → Windows desktop and APIs: uses shell APIs
- Desktop placement → Debug output: reports errors
- Window initialization → Background bitmap: loads bitmap
- Window initialization → Redraw timer thread: starts thread
- Redraw timer thread → Windows desktop and APIs: invalidates window
- Countdown drawing → Background bitmap: copies bitmap
- Countdown drawing → System clock: reads local time
- Countdown drawing → Desktop display: draws frame
- Window cleanup → Windows desktop and APIs: releases resources
