SDL不仅是用来写游戏的,其实他的官方网站给他的定义是游戏和GUI界面,也就是说它其实就是一个实现图形用户界面的库。那么肯定可以有多窗口啦。 其实多窗口实现的方式很简单:你只要定义多个窗口,然后每个窗口再给一个Renderer就可以了。然后在循环的时候再调用各自的Renderer函数就可以了。
这里有一个例子给你看一下:
#include <SDL2/SDL.h>
#include <thread>
#include <iostream>
using namespace std;
void runWindow(int argc,char** argv){
SDL_Window* win = SDL_CreateWindow("MultiWindow", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 700, 700, SDL_WINDOW_SHOWN);
SDL_Renderer* render = SDL_CreateRenderer(win, -1, 0);
SDL_Event event;
bool isQuit = false;
SDL_SetRenderDrawColor(render ,255,255,255,255);
while(!isQuit){
SDL_RenderClear(render);
while(SDL_PollEvent(&event)){
if(event.type == SDL_QUIT)
isQuit = true;
}
SDL_RenderPresent(render);
}
}
int main(int argc, char** args){
SDL_Init(SDL_INIT_EVERYTHING);
SDL_Window* win1 = SDL_CreateWindow("MultiWindow1", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 700, 700, SDL_WINDOW_SHOWN);
SDL_Window* win2 = SDL_CreateWindow("MultiWindow2", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 700, 700, SDL_WINDOW_SHOWN);
SDL_Renderer* render1 = SDL_CreateRenderer(win1, -1, 0);
SDL_Renderer* render2 = SDL_CreateRenderer(win2, -1, 0);
SDL_Event event;
bool isQuit = false;
SDL_SetRenderDrawColor(render2 ,255,255,255,255);
SDL_SetRenderDrawColor(render1 ,0,255,0,255);
while(!isQuit){
SDL_RenderClear(render1);
SDL_RenderClear(render2);
while(SDL_PollEvent(&event)){
if(event.window.event == SDL_WINDOWEVENT_CLOSE)
isQuit = true;
}
SDL_RenderPresent(render1);
SDL_RenderPresent(render2);
SDL_Delay(30);
}
SDL_Quit();
return 0;
}最后的结果是这样: 需要注意的是这里的事件处理,我们使用的是event.window。