运行时获取窗口尺寸、动态修改标题、理解 HIGHDPI 下逻辑像素与物理像素的关系。
窗口尺寸在运行时可能因用户拖拽而改变(XGE_INIT_RESIZABLE)。你的绘制代码必须每帧查询当前尺寸,而非缓存初始化时的值。XGE 提供了一组轻量查询函数。
| 函数 | 返回值 | 说明 |
|---|---|---|
int xgeGetWidth(void) | 逻辑宽度 | 窗口客户区宽度(逻辑像素) |
int xgeGetHeight(void) | 逻辑高度 | 窗口客户区高度(逻辑像素) |
void xgeSetTitle(const char*) | — | 动态修改窗口标题(UTF-8) |
void xgeQuit(void) | — | 请求关闭窗口 / 退出主循环 |
| 标志 | 窗口行为 |
|---|---|
XGE_INIT_WINDOW (0x0000) | 标准带标题栏窗口 |
XGE_INIT_FULLSCREEN (0x0001) | 独占全屏,隐藏任务栏 |
XGE_INIT_NOFRAME (0x0002) | 无标题栏、无边框 |
XGE_INIT_RESIZABLE (0x0004) | 用户可拖拽边缘调整大小 |
XGE_INIT_HIGHDPI (0x0008) | 帧缓冲按 DPI 缩放 |
在 Retina / 4K 显示器上,操作系统使用 DPI 缩放(如 150%、200%)。启用 XGE_INIT_HIGHDPI 后:
xgeGetWidth() 返回逻辑像素(如 1280)xgePlatformRuntimeGet() 可获取 fDpiScale 值gcc -O2 -I. -o ch05.exe ch05_main.c build\xge.lib -lm -lws2_32 -liphlpapi -lgdi32 -luser32 -lshell32 -lopengl32 -lole32 -lwinmm -lavrt
.\ch05.exe
#include "xge.h"
#include <stdio.h>
static int onFrame(void* pUser) {
int w = xgeGetWidth();
int h = xgeGetHeight();
xgeClear(0x0C181CFF);
// 始终在窗口中心绘制圆形
float cx = w * 0.5f;
float cy = h * 0.5f;
float r = (w < h ? w : h) * 0.3f; // 半径 = 短边 30%
xgeShapeCircleFill(cx, cy, r, 0x4FD8C2FF);
xgeShapeCircleStroke(cx, cy, r + 10, 3.0f, 0xFFB454FF);
// 标题栏显示实时尺寸
char buf[64];
snprintf(buf, sizeof(buf), "%dx%d | FPS: %d",
w, h, xgeGetFPS());
xgeSetTitle(buf);
// ESC 退出
if (xgeKeyPressed(XGE_KEY_ESCAPE))
xgeQuit();
return XGE_OK;
}
int main(void) {
xge_desc_t d = {0};
d.iWidth = 1024;
d.iHeight = 768;
d.sTitle = "Resize Me";
d.iFlags = XGE_INIT_WINDOW | XGE_INIT_RESIZABLE | XGE_INIT_HIGHDPI;
xgeInit(&d);
xgeRun(onFrame, NULL);
xgeUnit();
return 0;
}可构建的权威源码为 examples/tutorial_capture/ch05_main1.c。它在固定教学画布中绘制居中的主圆、轮廓与十字基准;实际窗口尺寸、帧缓冲尺寸和 DPI 缩放仍应通过下方运行时查询 API 获取。

可调整大小的窗口,青绿色圆形始终居中,琥珀色描边。标题栏实时显示尺寸和 FPS。拖拽窗口边缘时圆形自动适应。
xge_platform_runtime_t rt;
xgePlatformRuntimeGet(&rt);
printf("逻辑尺寸: %dx%d\n", rt.iWindowWidth, rt.iWindowHeight);
printf("帧缓冲: %dx%d\n", rt.iFramebufferWidth, rt.iFramebufferHeight);
printf("DPI 缩放: %.2f\n", rt.fDpiScale);xgeGetWidth() 的结果,用户随时可能调整窗口。xgeSetTitle 在 Windows 上有微小开销(Win32 SendMessage)。如果标题不变,避免每帧调用。xgePlatformRuntimeGet 获取 DPI 缩放值并打印。