SDL2常用函數&結構分析:SDL_Window&SDL_CreateWindow
SDL_Window
SDL_Window
:結構體,描述了一個窗體對象,表示的是會呈現在設備上一個窗體,所有圖像的載體。一般通過SDL_CreateWindow
函數創建,和SDL_DestroyWindow
銷燬。
SDL_CreateWindow
函數原型:
SDL_Window* SDL_CreateWindow(const char* title,
int x,
int y,
int w,
int h,
Uint32 flags)
參數列表含義:
參數 | 含義 |
---|---|
title | 窗口的標題,採用UTF-8編碼 |
x | 窗口的x座標,是中間(SDL_WINDOWPOS_CENTERED)還是不指定(SDL_WINDOWPOS_UNDEFINED) |
y | 窗口的y座標, SDL_WINDOWPOS_CENTERED, or SDL_WINDOWPOS_UNDEFINED |
w | 窗口的寬度,以像素爲單位 |
h | 窗口的高度,以像素爲單位 |
flags | 0,或一個或多個SDL_WindowFlags, |
SDL_WindowFlags列表:
flags | 含義 |
---|---|
SDL_WINDOW_FULLSCREEN | 全屏窗口 |
SDL_WINDOW_FULLSCREEN_DESKTOP | 當前桌面分辨率的全屏窗口 |
SDL_WINDOW_OPENGL | 窗口可用於OpenGL上下文 |
SDL_WINDOW_VULKAN | 可用於Vulkan實例的窗口 |
SDL_WINDOW_HIDDEN | 隱藏窗口 |
SDL_WINDOW_BORDERLESS | |
SDL_WINDOW_RESIZABLE | 窗口可以調整大小 |
SDL_WINDOW_MINIMIZED | 窗口最小化 |
SDL_WINDOW_MAXIMIZED | 窗口最大化 |
SDL_WINDOW_INPUT_GRABBED | 窗口可以捕獲鍵盤輸入焦點 |
SDL_WINDOW_ALLOW_HIGHDPI | 如果支持,則應在高DPI模式下創建窗口(> = SDL 2.0.1) |
如果使用SDL_WINDOW_ALLOW_HIGHDPI
標誌創建窗口,則其大小(以像素爲單位)可能與具有高DPI支持的平臺(例如iOS和Mac OS X)上的屏幕座標大小不同。 使用SDL_GetWindowSize()
可以獲得當前window大小,使用SDL_GL_GetDrawableSize()
或SDL_GetRendererOutputSize()
查詢可繪製的大小(以像素爲單位)。
如果窗口設置爲全屏,則不會使用寬度和高度參數w和h。 但是,無效的大小參數(例如,太大)可能仍然失敗。 對於窗口創建的所有平臺,窗口大小實際上限制爲16384 x 16384。
返回值:成功,則返回創建的窗口,失敗時爲NULL。調用SDL_GetError()可以獲得本次異常信息。
示例代碼
使用SDL2創建一個應用窗口
#include "SDL.h"
#include <stdio.h>
int main(int argc, char* argv[]) {
SDL_Window *window; // 申明SDL_Window指針
SDL_Init(SDL_INIT_VIDEO); // 初始化SDL2系統
// 創建一個應用窗口
window = SDL_CreateWindow(
"An SDL2 window", // 窗口title
SDL_WINDOWPOS_UNDEFINED, // x
SDL_WINDOWPOS_UNDEFINED, // y
640, // 寬
480, // 高
SDL_WINDOW_OPENGL // flags - see below
);
// 檢查窗體是否創建成功,如果不成功window 爲NULL
if (window == NULL) {
// 如果窗體沒有創建成功,後面的程序已經沒有執行的必要了。
printf("Could not create window: %s\n", SDL_GetError());
return 1;
}
// The window is open: could enter program loop here (see SDL_PollEvent())
SDL_Delay(3000); // 暫停執行3秒
// 關閉並回收窗體
SDL_DestroyWindow(window);
// 退出
SDL_Quit();
return 0;
}