在SDL 2中获取Contiunous Window Resize事件

时间:2015-08-30 09:02:16

标签: c++ sdl-2

我使用以下结构来获取调整大小的SDL窗口的新宽度和高度。但是使用这种结构,我只能在完成调整大小后才能获得新数据,即完成拖动并释放鼠标按钮。如何连续获取新数据,就在我拖动窗口的时候。

if (sdl_set->GetMainEvent()->type == SDL_WINDOWEVENT)
{
  if (sdl_set->GetMainEvent()->window.event == SDL_WINDOWEVENT_RESIZED)
  {
    ScreenWidth = sdl_set->GetMainEvent()->window.data1;
    ScreenHeight = sdl_set->GetMainEvent()->window.data2;
    cout << "Window Resized!" << endl;
  }
}

2 个答案:

答案 0 :(得分:7)

static int resizingEventWatcher(void* data, SDL_Event* event) {
  if (event->type == SDL_WINDOWEVENT &&
      event->window.event == SDL_WINDOWEVENT_RESIZED) {
    SDL_Window* win = SDL_GetWindowFromID(event->window.windowID);
    if (win == (SDL_Window*)data) {
      printf("resizing.....\n");
    }
  }
  return 0;
}

int main() {
    SDL_Window* win = ...
    ...
    SDL_AddEventWatch(resizingEventWatcher, win);
    ...
}

使用SDL的EventWatch可以解决它。

答案 1 :(得分:-1)

如果你在Windows上,你尝试过使用windows api吗?

我知道这不是一个真正的修复,但如果你没有制作跨平台应用程序,你应该试一试。

使用HWND查找SDL窗口并返回窗口大小。