下载SDL库

下载地址:

 https://github.com/libsdl-org/SDL/releases/download/release-2.28.1/SDL2-devel-2.28.1-VC.zip

vs2022配置SDL库

将下载好的SDL库保存到适当的位置

打开vs2022,创建一个空项目

右键项目名,点击“属性”

​ 

 设置包含目录和库目录,点击“编辑”

 添加SDL库中的include目录的路径

设置“附加依赖库”,添加“lib\x64”目录下后缀为lib的文件

 

 创建一个窗口

新建一个源文件,引入头文件

#include<SDL.h>
int main(int argc,char* argv[]){ //main函数必须有参数
    return 0;
}

初始化SDL(如果不初始化,则无法调用任何SDL函数),失败将打印错误信息

if(SDL_Init(SDL_INIT_VIDEO)<0){
    SDL_Log("SDL无法初始化,错误:%s\n",SDL_GetError());
}

创建窗口

SDL_Window* window=NULL;
//SDL_CreateWindow(String,int,int,int,int,SDL_WindowFlags)
//SDL_CreateWindow的传入参数依次为:标题,x坐标,y坐标(排除标题栏),宽,高,标志
window=SDL_CreateWindow("标题",0,0,640,480,SDL_WINDOW_SHOW);
if (window == NULL){
    SDL_Log("窗口创建失败! 错误: %s\n", SDL_GetError());
}

获取窗口表面并绘制

SDL_Surface* screenSurface = NULL;
screenSurface = SDL_GetWindowSurface( window );
//填充为白色
SDL_FillRect( screenSurface, NULL, SDL_MapRGB( screenSurface->format, 0xFF, 0xFF, 0xFF ) );
//绘制后需要更新
SDL_UpdateWindowSurface( window );
//让窗口停留3000毫秒
SDL_Delay(3000);
      

销毁窗口

SDL_DestroyWindow(window);
SDL_Quit();

 完整代码

#include<SDL.h>

//Screen dimension constants
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;

int main(int argc, char* argv[]) {
    //The window we'll be rendering to
    SDL_Window* window = NULL;

    //The surface contained by the window
    SDL_Surface* screenSurface = NULL;

    //Initialize SDL
    if (SDL_Init(SDL_INIT_VIDEO) < 0){
        SDL_Log("SDL could not initialize! SDL_Error: %s\n", SDL_GetError());
    }
    else{
        //Create window
        window = SDL_CreateWindow("title", SDL_WINDOWPOS_UNDEFINED,                       SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
        if (window == NULL){
            SDL_Log("Window could not be created! SDL_Error: %s\n", SDL_GetError());
        }
        else{
            //Get window surface
            screenSurface = SDL_GetWindowSurface(window);

            //Fill the surface white
            SDL_FillRect(screenSurface, NULL, SDL_MapRGB(screenSurface->format, 0xFF, 0xFF, 0xFF));

            //Update the surface
            SDL_UpdateWindowSurface(window);

            //Hack to get window to stay up
            SDL_Event e; 
            bool quit = false; 
            while (quit == false) {
                while (SDL_PollEvent(&e)) { 
                    if (e.type == SDL_QUIT) quit = true; 
                } 
            }
            
        }
        //Destroy window
        SDL_DestroyWindow(window);

        //Quit SDL subsystems
        SDL_Quit();

        return 0;
    }
}

效果展示

 参考文章

Lazy Foo' Productions - Hello SDL: Your First Graphics Window

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐