SDL2常用函數&結構分析:SDL_Window&SDL_CreateWindow

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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章