116 lines
3.7 KiB
Markdown
116 lines
3.7 KiB
Markdown
# CLAUDE.md
|
|
|
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
|
|
## Project Overview
|
|
|
|
EzUI is a Windows desktop UI framework built on Direct2D. It provides a C++ API for creating modern Windows applications with custom controls, layouts, and styling.
|
|
|
|
## Build Commands
|
|
|
|
The project uses CMake for building. Prebuilt libraries exist in `lib/` for both x64 and x86 architectures.
|
|
|
|
### Build Static Library (EzUI)
|
|
|
|
```bash
|
|
# Generate and build Debug x64
|
|
cmake -G "Visual Studio 17 2022" -A x64 -S . -B build/x64
|
|
cmake --build build/x64 --config Debug
|
|
|
|
# Generate and build Release x64
|
|
cmake -G "Visual Studio 17 2022" -A x64 -S . -B build/x64
|
|
cmake --build build/x64 --config Release
|
|
|
|
# Or use build.bat to build all configurations at once
|
|
build.bat
|
|
```
|
|
|
|
### Build Demos
|
|
|
|
```bash
|
|
# Build demos (from demo/ directory)
|
|
cd demo
|
|
mkdir build && cd build
|
|
cmake ..
|
|
cmake --build . --config Debug/Release
|
|
```
|
|
|
|
Key demo projects in `demo/`:
|
|
- `helloWorld` - Basic controls demo
|
|
- `QQ` - QQ-style login UI demo
|
|
- `kugou` - Kugou music player demo
|
|
- `TableViewDemo` - TableView control demo
|
|
|
|
## Architecture
|
|
|
|
### Core Classes
|
|
|
|
- **Window** ([include/EzUI/Window.h](include/EzUI/Window.h)) - Top-level window, inherits from Object, manages HWND, handles message loop
|
|
- **Control** ([include/EzUI/Control.h](include/EzUI/Control.h)) - Base class for all UI elements, contains m_controls (child collection), Style/HoverStyle/ActiveStyle/DisabledStyle
|
|
- **Application** ([include/EzUI/Application.h](include/EzUI/Application.h)) - Manages message loop, resource loading, high DPI
|
|
|
|
### Layout System
|
|
|
|
- **HLayout** - Horizontal layout container
|
|
- **VLayout** - Vertical layout container
|
|
- Uses DockStyle (None, Horizontal, Vertical, Fill) for child control positioning
|
|
- Layout state machine: None → Pend → Layouting → None
|
|
|
|
### Rendering
|
|
|
|
- **DXRender** (Direct2D) handles all graphics
|
|
- Paint pipeline: OnPaintBefore → OnBackgroundPaint → OnForePaint → OnBorderPaint → OnChildPaint
|
|
- Uses PushLayer/PopLayer for clipping regions
|
|
- Color uses BGRA format internally
|
|
|
|
### Control Hierarchy
|
|
|
|
```
|
|
Object
|
|
├── Control (base for all widgets)
|
|
│ ├── Window (top-level, owns HWND)
|
|
│ ├── BorderlessWindow
|
|
│ ├── LayeredWindow
|
|
│ ├── PopupWindow
|
|
│ ├── Label
|
|
│ ├── Button
|
|
│ ├── TextBox
|
|
│ ├── ComboBox
|
|
│ ├── CheckBox
|
|
│ ├── RadioButton
|
|
│ ├── PictureBox
|
|
│ ├── ProgressBar
|
|
│ ├── Menu
|
|
│ ├── ScrollBar / HScrollBar / VScrollBar
|
|
│ ├── HLayout / VLayout
|
|
│ ├── HListView / VListView / TileListView / PagedListView
|
|
│ ├── TreeView
|
|
│ ├── TableView
|
|
│ └── TabLayout
|
|
└── IFrame (container frame)
|
|
```
|
|
|
|
### Event System
|
|
|
|
Events defined in [include/EzUI/EzUI.h](include/EzUI/EzUI.h):
|
|
- Mouse: OnMouseDown, OnMouseUp, OnMouseMove, OnMouseEnter, OnMouseLeave, OnMouseWheel, OnMouseDoubleClick
|
|
- Keyboard: OnKeyDown, OnKeyUp, OnKeyChar
|
|
- Focus: OnFocus, OnKillFocus
|
|
- Paint: OnPaint
|
|
- Layout: OnMove, OnSize
|
|
|
|
ControlState enum: None, Static, Disabled, Checked, Hover, Active
|
|
|
|
### Key Patterns
|
|
|
|
1. **Thread Safety**: Use `BeginInvoke()` and `Invoke()` for cross-thread UI updates (uses hidden message window)
|
|
2. **Memory Management**: Controls can be parented - parent deletes children. Use `Attach()` / `Detach()` for resource management
|
|
3. **Styling**: ControlStyle supports inheritance. Use SetStyleSheet() for CSS-like styling
|
|
4. **XML Loading**: Window::LoadXml() loads UI from XML files
|
|
|
|
### File Organization
|
|
|
|
- `include/EzUI/` - Public headers
|
|
- `sources/` - Implementation files
|
|
- `lib/` - Prebuilt static libraries (EzUI_Debug/Release_{Win32,x64}.lib)
|