SDL_GetWindowFlags() 返回看似随机的值
SDL_GetWindowFlags() returns seemingly random values
我需要我的 SDL2 程序知道窗口是否全屏,我想我可以使用 SDL_GetWindowFlags() 获取该信息。默认情况下,我使用两个标志初始化我的窗口:SDL_WINDOW_SHOWN 和 SDL_WINDOW_BORDERLESS,分别等于 16 和 4。所以我预计该函数返回 20,但我得到 532。有时还有 1556,在重新初始化窗口几次后,甚至在运行时更改为 532。但是,532 在运行时永远不会更改为 1556。
这些标志如何工作?
bool init( int windowflags )
{
bool success = true;
if( SDL_Init( SDL_INIT_VIDEO ) < 0 )
{
printf( "Video initialization failed: %sn", SDL_GetError() );
success = false;
}
else
{
gWindow = SDL_CreateWindow( "VIRGULE", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, WIN_W, WIN_H, SDL_WINDOW_SHOWN + windowflags );
if( gWindow == NULL )
{
printf( "Window could not be created: %sn", SDL_GetError() );
success = false;
}
else
{
gRenderer = SDL_CreateRenderer( gWindow, -1, SDL_RENDERER_ACCELERATED + SDL_RENDERER_TARGETTEXTURE );
if( gRenderer == NULL )
{
printf( "Renderer could not be created: %sn", SDL_GetError() );
success = false;
}
else
{
gTexture = SDL_CreateTexture( gRenderer, SDL_PIXELFORMAT_UNKNOWN, SDL_TEXTUREACCESS_TARGET, SCR_W, SCR_H );
if( gTexture == NULL )
{
printf( "Texture creation failed: %sn", SDL_GetError() );
success = false;
}
}
}
}
printf( "%in", SDL_GetWindowFlags( gWindow ) );
//this is either prints 1556 or 532
return success;
}
看起来您的标志值正在根据SDL_WINDOW_INPUT_FOCUS
和SDL_WINDOW_MOUSE_FOCUS
的状态而变化。但没关系。标志值一直在变化。您不必担心标志的总价值。您只需要知道您正在监视的标志位的值。SDL_WINDOW_SHOWN
和 SDL_WINDOW_BORDERLESS
标志在532
和1556
时仍会设置(如果以二进制形式查看)。
只需获取位标志的值:
int flags = SDL_GetWindowFlags( gWindow );
int window_shown = ( flags & SDL_WINDOW_SHOWN ) ? true : false;
int window_borderless = ( flags & SDL_WINDOW_BORDERLESS ) ? true : false;
int window_fullscreen = ( flags & SDL_WINDOW_FULLSCREEN ) ? true : false;
下面是一个函数,可用于查看根据值设置了哪些标志:
void show_flags(int flags);
int main()
{
show_flags(20);
show_flags(532);
show_flags(1556);
return 0;
}
void show_flags(int flags) {
printf("nFLAGS ENABLED: ( %d )n", flags);
printf("=======================n");
if(flags & SDL_WINDOW_FULLSCREEN) printf("SDL_WINDOW_FULLSCREENn");
if(flags & SDL_WINDOW_OPENGL) printf("SDL_WINDOW_OPENGLn");
if(flags & SDL_WINDOW_SHOWN) printf("SDL_WINDOW_SHOWNn");
if(flags & SDL_WINDOW_HIDDEN) printf("SDL_WINDOW_HIDDENn");
if(flags & SDL_WINDOW_BORDERLESS) printf("SDL_WINDOW_BORDERLESSn");
if(flags & SDL_WINDOW_RESIZABLE) printf("SDL_WINDOW_RESIZABLEn");
if(flags & SDL_WINDOW_MINIMIZED) printf("SDL_WINDOW_MINIMIZEDn");
if(flags & SDL_WINDOW_MAXIMIZED) printf("SDL_WINDOW_MAXIMIZEDn");
if(flags & SDL_WINDOW_INPUT_GRABBED) printf("SDL_WINDOW_INPUT_GRABBEDn");
if(flags & SDL_WINDOW_INPUT_FOCUS) printf("SDL_WINDOW_INPUT_FOCUSn");
if(flags & SDL_WINDOW_MOUSE_FOCUS) printf("SDL_WINDOW_MOUSE_FOCUSn");
if(flags & SDL_WINDOW_FULLSCREEN_DESKTOP) printf("SDL_WINDOW_FULLSCREEN_DESKTOPn");
if(flags & SDL_WINDOW_FOREIGN) printf("SDL_WINDOW_FOREIGNn");
}
更多标志可以在这里找到:https://wiki.libsdl.org/SDL_WindowFlags。
输出:
FLAGS ENABLED: ( 20 )
=======================
SDL_WINDOW_SHOWN
SDL_WINDOW_BORDERLESS
FLAGS ENABLED: ( 532 )
=======================
SDL_WINDOW_SHOWN
SDL_WINDOW_BORDERLESS
SDL_WINDOW_INPUT_FOCUS
FLAGS ENABLED: ( 1556 )
=======================
SDL_WINDOW_SHOWN
SDL_WINDOW_BORDERLESS
SDL_WINDOW_INPUT_FOCUS
SDL_WINDOW_MOUSE_FOCUS
相关文章:
- 为什么 Serial.println(<char[]>);返回随机字符?
- 使用std::mt19937从字符串中返回一个随机单词
- C++随机uniform_int_distribution在所有线程中返回相同的值
- 动态数组传递给 main 中用随机值填充的函数,返回值3221226356
- 从基于属性的列表中返回随机对象
- DoModal 主应用程序随机返回 -1 代码
- 增强随机发电机返回相同的值
- 尝试以随机字符(长读取)打印字符串返回结果
- 随机函数在循环中调用时返回相同的数字!C++
- 为什么从函数返回c弦乐会导致随机字符
- C 从向量的子集返回一个随机值
- 打印链表返回随机符号
- 随机返回相同的循环值
- SDL_GetWindowFlags() 返回看似随机的值
- 随机字符作为在样本中使用 libaws 时返回
- matrixxf ::随机始终返回相同的矩阵
- C++随机数生成器,不是随机的,但总是返回相同的数字
- C++ 随机不起作用(始终返回相同的值)
- 函数返回看似随机的数字,而不是返回变量的值
- 从 c++ 通过 activex 读取 Outlook 通讯簿会随机返回未知错误