//初始化SDL2和创建一个窗口,并且将屏幕绘制成大红色 #include <iostream> extern "C" { #include <SDL.h> } //Refresh Event #define REFRESH_EVENT (SDL_USEREVENT + 1) #define BREAK_EVENT (SDL_USEREVENT + 2) bool thread_exit = false; int threadFunc(void *opaque) { thread_exit = false; while (!thread_exit) { SDL_Event event; event.type = REFRESH_EVENT; SDL_PushEvent(&event); SDL_Delay(40); } thread_exit = true; //Break SDL_Event event; event.type = BREAK_EVENT; //发送一个事件 SDL_PushEvent(&event); return 0; } int main(int argc, char* argv[]) { SDL_Window *windowScreen = NULL; //窗口 SDL_Surface *windowSurface = NULL;//窗口表面 SDL_Thread *refresh_thread; //SDL线程 SDL_Event event; //SDL事件 //初始化SDL2 if (SDL_Init(SDL_INIT_VIDEO) == -1) { std::cout << SDL_GetError() << std::endl; return -1; } /* 创建窗口 *第一个参数是窗口的标题 *第二、三个参数指明了窗口的位置信息 *第四、五个参数是窗口的大小(宽、高) *第六个参数是窗口的状态 *SDL_WINDOW_SHOWN--显示窗口 *SDL_WINDOW_BORDERLESS--显示无边框窗口 */ windowScreen = SDL_CreateWindow("title", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 240, 400, SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE); if (!windowScreen) { std::cout << SDL_GetError() << std::endl; return -1; } //创建线程 refresh_thread = SDL_CreateThread(threadFunc, NULL, NULL); if (refresh_thread == NULL) { std::cout << SDL_GetError() << std::endl; return -1; } //事件(消息)循环 while (true) { //等待一个事件(类似于WIN32里的GetMessage) SDL_WaitEvent(&event); if (event.type == REFRESH_EVENT) { /*填充窗口 *第一个参数是填充的目标表面 *第二个是填充的矩形区域(NULL则表示默认全部填充) *第三个参数是填充矩形用的颜色 */ SDL_FillRect(windowSurface, NULL, SDL_MapRGB(windowSurface->format, 0xFF, 0x00, 0x00)); //将窗口表面加载到窗口 SDL_UpdateWindowSurface(windowScreen); } else if (event.type == SDL_QUIT) { thread_exit = true; } else if (event.type == SDL_WINDOWEVENT) { // 获取窗口的表面 windowSurface = SDL_GetWindowSurface(windowScreen); if (!windowSurface) { std::cout << SDL_GetError() << std::endl; return -1; } } else if (event.type == BREAK_EVENT) { break; } } SDL_FreeSurface(windowSurface); SDL_DestroyWindow(windowScreen); SDL_Quit(); return 0; } /*配置 1.VC++目录 include lib dll 2.链接器->输入->附加依赖项 SDL2.lib SDL2main.lib 3.链接器->系统->子系统 窗口 (/SUBSYSTEM:WINDOWS) 控制台 (/SUBSYSTEM:CONSOLE) 4.C++->代码生成->运行库 /MD 编译 cl /MD /c c.cpp 链接 link /SUBSYSTEM:CONSOLE c.obj SDL2.lib SDL2main.lib */