带SDL 1.2的X11 XMoveWindow不会移动窗口

时间:2015-09-02 21:09:56

标签: c++ linux sdl x11 xlib

我正在进行双屏幕设置。屏幕一个放在另一个上面。我在SDL中创建了一个窗口,它是两个屏幕组合的大小。窗口出现在BOTTOM屏幕的左上角。我希望它位于TOP屏幕的左上角。当我尝试使用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"
    }
}

HALP!

1 个答案:

答案 0 :(得分:0)

我也在努力实现这一点,似乎只有一种肮脏的方式。

你必须使用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);

但如果视频模式已经与相同的高度和相同的高度相同,则无效!