SDL中文论坛

标题: 提示(Hint) [打印本页]

作者: ancientcc    时间: 2017-1-1 15:01
标题: 提示(Hint)
本帖最后由 ancientcc 于 2017-1-1 19:10 编辑

提示(Hint)表示一种设置。各操作系统存在个和设置相关的环境区,像Windows上的SetEnvironmentVariable/GetEnvironmentVariable,linux中的putenv/setenv。Hint区和环境区可存在同名变量。

设置、读取提示
  1. SDL_bool SDL_SetHintWithPriority(const char *name, const char *value, SDL_HintPriority priority)
  2. SDL_bool SDL_SetHint(const char *name, const char *value)。priority固定为SDL_HINT_NORMAL的SDL_SetHintWithPriority。
复制代码


0SDL_HINT_DEFAULT
1SDL_HINT_NORMALSDL_SetHint时默认使用该优先级
2SDL_HINT_OVERRIDE要想访问环境变量,必须使用此优先级。重载:如果环境区中已有此变量,Hint区将新建此变量,然后使用此中的value。

系统以着一个开环单向链表结构表示已有的提示。结点类型是SDL_Hint,当中的next指向下一个结点。变量SDL_hints指向头结点。以下是SDL_Hint数据结构。
  1. typedef struct SDL_Hint {
  2.         char *name;
  3.         char *value;
  4.         SDL_HintPriority priority;
  5.         SDL_HintWatch *callbacks;
  6.         struct SDL_Hint *next;
  7. } SDL_Hint;

  8. typedef struct SDL_HintWatch {
  9.         SDL_HintCallback callback;
  10.         void *userdata;
  11.         struct SDL_HintWatch *next;
  12. } SDL_HintWatch;
复制代码

priority存放着设置该提示时的最低优先级。callbacks指示该值发生修改(新建不属于修改)时要执行的回调。


  1. const char* SDL_GetHint(const char *name)
  2. SDL_bool SDL_GetHintBoolean(const char *name, SDL_bool default_value)
  3.         const char *hint = SDL_GetHint(name);
  4.         if (!hint) {
  5.                 return default_value;
  6.         }
  7.         if (*hint == '0' || SDL_strcasecmp(hint, "false") == 0) {
  8.                 return SDL_FALSE;
  9.         }
  10.         return SDL_TRUE;
  11. }
复制代码


值是"0"或"false"时,返回SDL_FALSE,否则SDL_TRUE。value[0]='\0'是返回SDL_TRUE。这不符惯常认为,因而除非是表示字符串,强烈建议不要传下value[0]='\0'。

和环境区变量关系
Hint系统不可能修改环境区变量中的值,但可以读取环境区变量。以下是如何读环境区变量。







欢迎光临 SDL中文论坛 (http://www.libsdl.cn/bbs/) Powered by Discuz! X3.3