c++ - X11 XMoveWindow with SDL 1.2 不移动窗口

标签 c++ linux sdl x11 xlib

我正在研究双屏设置。屏幕一个位于另一个的顶部。我在 SDL 中创建一个窗口,其大小等于两个屏幕的总和。该窗口出现在底部屏幕的左上角。我希望它位于主屏幕的左上角。当我尝试使用 XMoveWindow 移动它时,它会移动其中的图像而不是移动窗口。我正在渲染 OpenGL 场景。 我正在使用 Linux 和 SDL 1.2,我知道存在问题,但我无法转移到 SDL2。

知道发生了什么吗?

我有一个用

创建的 SDL 窗口
SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER | SDL_INIT_NOPARACHUTE);

SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
screen = SDL_SetVideoMode(w, h, 32, SDL_HWACCEL | SDL_OPENGL | SDL_GL_DOUBLEBUFFER);

但是当我运行程序时,窗口保持在原位,并且其中的图像已移动 200,-200。

#include <SDL/SDL.h>
#include <SDL/SDL_syswm.h>
#include <GL/gl.h>
#include <X11/Xlib.h>

void move()
{
    SDL_SysWMinfo info;
    SDL_VERSION(&info.version);


    if (SDL_GetWMInfo(&info))
    {
        // Put the window at origin!!!!!
        cout << "xmovewindow: " << XMoveWindow(info.info.x11.display, info.info.x11.window, 200, -200) << endl;
        // prints "xmovewindow: 1"
    }
}

住手!

最佳答案

我也在努力实现这个目标,似乎只有一个肮脏的方法。

您必须使用 SDL_SetVideoMode() ,它允许执行此操作,如 SDL documentation 中所述。 .

试试这个:

SDL_putenv(const_cast<char*>("SDL_VIDEO_CENTERED="));
SDL_putenv(const_cast<char*>("SDL_VIDEO_WINDOW_POS=100,50"));
SDL_SetVideoMode(width, height, bpp, flags);

但是如果视频模式已经相同、宽度和高度相同,则这不会产生任何效果!

关于c++ - X11 XMoveWindow with SDL 1.2 不移动窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32363160/

相关文章:

c++ - 如何在对象的生命周期内保持 Boost upgradable_lock?

c++ - 使用 tmx-parser 和 SDL 的 2d tile 渲染

c - SDL2_gfx 函数不起作用

c++ - STL用户定义的二进制操作

c++ - span 是否传播 const?

linux - 从命令行参数将变量设置为最后一个参数

Linux查找和删除文件但重定向要删除的文件名

linux - Postgres : Pipeline to psql

android - SDL 构建系统 - 当我链接到 `gnuSTL_shared` 时,我在运行时得到 "Error: Cannot load library: ..."

c++ - 在此示例中使用取消引用运算符 (c++)