Files
2026-06-12 16:54:32 +08:00

54 lines
1.9 KiB
Markdown

# demo.c - 多屏幕信息窗口演示程序
## 概述
一个基于GTK+和Xrandr的多屏幕信息演示程序。在所有连接的显示器上依次创建信息窗口,显示屏幕分辨率、位置等信息,支持多轮测试和窗口位置校验。
## 程序结构
### 全局变量
| 变量 | 类型 | 说明 |
|------|------|------|
| `info_windows` | `GtkWidget**` | 各屏幕信息窗口指针数组 |
| `total_screens` | `int` | 连接的显示器总数 |
| `screen_widths/heights` | `int*` | 各屏幕宽高 |
| `screen_x_offsets/y_offsets` | `int*` | 各屏幕坐标偏移 |
| `screen_names` | `char**` | 屏幕接口名(如HDMI-1) |
| `current_test_round` | `int` | 当前测试轮次 |
| `total_test_rounds` | `int` | 总测试轮次 |
| `win_time_delay` | `int` | 窗口创建间隔(ms),默认50 |
## 工作原理
1. **屏幕信息获取**: 使用Xrandr扩展查询所有已连接的输出设备及其CRTC信息
2. **窗口创建**: 每个屏幕创建一个比屏幕尺寸小20像素的窗口,偏移(10,10)
3. **定时创建**: 窗口按`win_time_delay`毫秒间隔依次创建
4. **空格键控制**: 用户按空格键关闭所有窗口,进入下一轮测试
5. **窗口校验**: 每轮结束后校验窗口位置和大小(允许±5像素误差)
6. **日志记录**: 所有操作记录到`screen_demo.log`文件
## 关键函数
| 函数 | 功能 |
|------|------|
| `get_screen_info()` | 通过Xrandr获取所有屏幕信息 |
| `create_info_window()` | 创建单个屏幕的信息窗口 |
| `create_next_window()` | 定时回调,依次创建窗口 |
| `verify_windows()` | 校验窗口位置和大小 |
| `start_next_test_round()` | 开始新一轮测试 |
| `on_key_press()` | 空格键事件处理 |
## 窗口布局
```
窗口位置: (screen_x + 10, screen_y + 10)
窗口大小: (screen_width - 20) x (screen_height - 20)
```
## 调用方式
```bash
./demo
```
## 依赖
- GTK+ 3.x
- X11 + Xrandr扩展