您可以使用以下示例在窗口中创建窗口.该示例将生成两个窗口,其中subWindow是内部mainWindow.子窗口可以移出主窗口.如果您希望子窗口"卡在"主窗口内,您可以使用它SDL_WindowEvent来查看窗口移动的时间,然后使用它将其重新放回原位SDL_SetWindowPosition()
SDL2据我所知,你不能这样做.但是一些(如果不是全部)事件类型具有windowID成员变量.SDL_GetWindowID()在您的SDL_Windows 上使用它可以找到哪个窗口在事件发生时具有焦点.
#include <SDL2/SDL.h>
#include <iostream>
int main()
{
SDL_Init( SDL_INIT_EVERYTHING );
// Set postion and size for main window
int mainSizeX = 600;
int mainSizeY = 600;
int mainPosX = 100;
int mainPosY = 100;
// Set postion and size for sub window based on those of main window
int subSizeX = mainSizeX / 2;
int subSizeY = mainSizeY / 2;
int subPosX = mainPosX + mainSizeX / 4;
int subPosY = mainPosY + mainSizeY / 4;
// Set up main window
SDL_Window* mainWindow = SDL_CreateWindow( "Main Window", mainPosX, mainPosY, mainSizeX, mainSizeY, 0 );
SDL_Renderer* mainRenderer = SDL_CreateRenderer( mainWindow, -1, SDL_RENDERER_ACCELERATED );
SDL_SetRenderDrawColor( mainRenderer , 255, 0, 0, 255 );
// Set up sub window
SDL_Window* subWindow = SDL_CreateWindow( "Sub Window" , subPosX, subPosY, subSizeX, subSizeY, 0 );
SDL_Renderer* subRenderer = SDL_CreateRenderer( subWindow, -1, SDL_RENDERER_ACCELERATED );
SDL_SetRenderDrawColor( subRenderer , 0, 255, 0, 255 );
// Render empty ( red ) background in mainWindow
SDL_RenderClear( mainRenderer );
SDL_RenderPresent( mainRenderer );
// Render empty ( green ) background in subWindow
SDL_RenderClear( subRenderer );
SDL_RenderPresent( subRenderer );
std::cin.ignore();
}
Run Code Online (Sandbox Code Playgroud)
此示例将呈现一个绿色窗口,其宽度和高度的一半位于红色窗口的中间.