IT干货网

sdl之如何使用 SDL 创建子窗口

tintown 2025年12月25日 编程设计 33 0

如何在 SDL 中创建一个插入主窗口的新窗口?所以它可以是有重点的,有单独的绘图上下文和单独的处理事件。

请您参考如下方法:

窗中窗

您可以使用下面的示例在窗口中创建一个窗口。该示例将生成两个窗口,其中 subWindow在里面 mainWindow.子窗口可以移出主窗口。如果您希望子窗口“卡住”在主窗口内,您可以使用 SDL_WindowEvent 查看窗口何时移动,然后使用 SDL_SetWindowPosition() 将其强制放回原位

单独的事件处理

您不能在 SDL2 中执行此操作据我所知。但是some ,如果不是全部,事件类型有 windowID成员变量。将此与 SDL_GetWindowID() 一起使用在您的 SDL_Window s 查找事件发生时哪个窗口具有焦点。

示例代码

#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(); 
} 

此示例将渲染一个绿色窗口,其宽度和高度为红色窗口中间的一半。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!