gpt4 book ai didi

c++ - 如何居中全屏窗口

转载 作者:行者123 更新时间:2023-11-30 05:45:59 34 4
gpt4 key购买 nike

我有一个 16:9 显示器,我想在其中显示处于 4:3 模式的全屏 SDL 窗口。SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN) 将窗口设置到屏幕的左侧屏幕并在右侧留下一个大黑条。

我想将窗口居中并在左侧和右侧设置黑条。

似乎 SDL_SetWindowPosition(window, x, y) 在全屏模式下对窗口没有影响。我可以在 SDL2 中将全屏窗口居中吗?

最佳答案

有两种情况:(1) 根据窗口大小显示渲染器和纹理。(2) 基于像素的屏幕和表面显示。

对于 (1),这是一个基于为渲染器设置视口(viewport)的简单解决方案。(没有测试,只是一个指南)

void SDL_SetRendererViewportRatio_4_3(SDL_Window *window,
SDL_Renderer *renderer
SDL_Rect *viewport) {
Uint8 r, g, b, a;
SDL_GetRenderDrawColor(renderer, &r, &g, &b, &a);
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
SDL_RenderClear(renderer);
SDL_RenderPresent(renderer);
SDL_SetRenderDrawColor(renderer, r, g, b, a);
int w, h;
SDL_GetWindowSize(window, &w, &h);
if (w * 3 > h * 4) {
viewport->w = h * 4 / 3;
viewport->h = h;
} else {
viewport->w = w;
viewport->h = w * 3 / 4;
}
viewport->x = (w - viewport->w) / 2;
viewport->y = (h - viewport->h) / 2;
SDL_RenderSetViewport(renderer, viewport);
}

请注意,只要窗口大小发生变化,您就应该调用此函数。

对于(2)我猜你应该自己计算表面坐标并画大黑条。更难的是我无法证明简单的解决方案。

关于c++ - 如何居中全屏窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29125249/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com