簡體   English   中英

SDL2 為假全屏切換 SDL_WINDOW_RESIZABLE 狀態

[英]SDL2 toggle SDL_WINDOW_RESIZABLE state for fake fullscreen

要在沒有模式集的情況下在 SDL2 中創建“假”全屏窗口,您可以使用類似的方法創建一個無邊框的最大化窗口。

int idx = SDL_GetWindowDisplayIndex(g_displayWindow);
SDL_Rect bounds;
SDL_GetDisplayBounds(idx, &bounds);
//SDL_SetWindowResizable(g_displayWindow, SDL_FALSE);
SDL_SetWindowBordered(g_displayWindow, SDL_FALSE);
SDL_SetWindowPosition(g_displayWindow, bounds.x, bounds.y);
SDL_SetWindowSize(g_displayWindow, bounds.w, bounds.h);

對於不可調整大小的窗口,這非常有效。 在使用 SDL_WINDOW_RESIZABLE 創建的窗口上,屏幕底部和右邊緣(在 Windows 上)有一個令人討厭的灰色邊框。 不幸的是,沒有 SDL_SetWindowResizable 函數(從 SDL 2.0.4 開始)。 我們如何在不重新創建窗口的情況下擺脫調整大小的邊框?

SDL_WINDOW_FULLSCREEN_DESKTOP 和 SDL_WINDOW_FULLSCREEN 都做了一個我想避免的模式集——它需要更長的時間,更難 alt-tab 退出,如果游戲在調試器中遇到斷點,它可以鎖定整個系統。

這就是我提出的 - 測試和在Windows上工作。

void SDL_SetWindowResizable(SDL_Window *win, SDL_bool resizable)
{
    SDL_SysWMinfo info;
    SDL_VERSION(&info.version);
    SDL_GetWindowWMInfo(g_displayWindow, &info);

#if WIN32
    HWND hwnd = info.info.win.window;
    DWORD style = GetWindowLong(hwnd, GWL_STYLE);
    if (resizable)
        style |= WS_THICKFRAME;
    else
        style &= ~WS_THICKFRAME;
    SetWindowLong(hwnd, GWL_STYLE, style);
#endif
}

SDL_SetWindowResizable()函數是在 2016 年 10 月發布的 SDL 2.0.5 中添加的。宣布 SDL 2.0.5

假設您的 SDL_Window 指針(您從SDL_CreateWindow() )名為window ,請使用:

/* To disable resizing: */
SDL_SetWindowResizable(window, SDL_FALSE);

/* To enable resizing: */
SDL_SetWindowResizable(window, SDL_TRUE);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM