【问题标题】:X11 XMoveWindow with SDL 1.2 does NOT move window带有 SDL 1.2 的 X11 XMoveWindow 不移动窗口
【发布时间】:2016-05-01 21:29:22
【问题描述】:

我正在处理双屏设置。屏幕一个在另一个之上。我在 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"
    }
}

停下来!

【问题讨论】:

    标签: c++ linux sdl x11 xlib


    【解决方案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);
    

    但是如果视频模式已经相同,相同的宽度和相同的高度,这将无效!

    【讨论】:

      猜你喜欢
      • 2015-07-14
      • 1970-01-01
      • 2010-11-04
      • 2017-11-28
      • 1970-01-01
      • 1970-01-01
      • 2016-03-29
      • 1970-01-01
      相关资源
      最近更新 更多