如何使全屏窗口居中
How to center fullscreen window
我有一个16:9的显示屏,我想在那里显示全屏SDL窗口,该窗口处于4:3模式。SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN)
将窗口设置在屏幕的左侧,并在右侧留下一个黑色的大条。
我想把窗户居中,左右两边都有黑条。
当SDL_SetWindowPosition(window, x, y)
处于全屏模式时,它似乎对窗口没有影响。我可以在SDL2中将全屏窗口居中吗?
有两种情况:(1) 根据窗口大小使用渲染器和纹理进行显示。(2) 屏幕和表面基于像素的显示器。
对于(1),这里有一个基于为渲染器设置视图端口的简单解决方案。(没有测试,但有指导原则)
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),我想你应该自己计算表面的坐标并画出大的黑条。更困难的是,我无法证明简单的解决方案。
相关文章:
- 如何在全屏模式下(在OpenGL中)使背景透明
- 在打开多个其他窗口时使用全屏窗口时帧速率非常低
- 如何以编程方式使窗口全屏显示?
- 延迟函数使打开的框架窗口冻结,直到指定的时间过去
- Wxwidgets - 如何添加调整大小事件处理程序以使"X"绘图随窗口调整大小?
- 当焦点丢失时,全屏GLFW窗口消失了
- 无法使我的第一个Windows OpenGL窗口抬起并运行
- 一个人如何将QT(C )UI分为多个小部件子类,并使其显示与同一类中的所有窗口
- q输入对话框使 Unity 任务栏和标题栏在全屏应用程序中可见
- gtkmm - 如何使包含小部件的框展开以填充窗口
- 在单个进程中使Qt顶级窗口被其他非Qt窗口"owned"
- 如何为所有窗口形式声明全球类对象
- C ++可以命名子窗口以使其句柄为静态
- X11,更改分辨率并使窗口全屏显示
- 如何使全屏窗口居中
- 如何使窗口出现在所有内容(甚至是全屏游戏!)之上(甚至是全屏游戏!)c ++ / Qt
- 为什么OpenCV(@Banana Pi,Raspbian)中的全屏窗口分辨率会减慢相机镜头的速度并使其滞后
- Qt和win32,如何使win32窗口全屏禁用所有按键
- q4:使全屏窗口无法绕过(锁屏)
- 采用OpenCV窗口,并使全屏