SDL_Tray * SDL_CreateTray(SDL_Surface *icon, const char *tooltip);
| SDL_Surface * | icon | アイコンとして使用するサーフェイス. NULLも可 |
| const char * | tooltip | マウスカーソルを重ねたとき表示されるツールチップに表示されるUTF-8文字列. 対応していない環境もある. NULLも可 |
多くの環境では常駐させる必要がない場合はシステムトレイを使用しないことを推奨している. ユーザにインターフェースの乱雑さを感じさせないためにも不要なトレイアイコンの生成は避けること.
トレイアイコンの使用にはビデオサブシステムが必要である.
#include <SDL3/SDL.h>
#include <SDL3/SDL_main.h>
void callback_quit(void *userdata, SDL_TrayEntry *invoker)
{
SDL_Event e;
e.type = SDL_EVENT_QUIT;
SDL_PushEvent(&e);
}
int main(int argc, char *argv[])
{
SDL_Tray *tray;
SDL_TrayMenu *menu;
SDL_TrayEntry *entry;
SDL_Event e;
SDL_Init(SDL_INIT_VIDEO);
// システムトレイにアイコンを生成する
// 通常はNULLではなくSDL_Surfaceを渡す
tray = SDL_CreateTray(NULL, "My tray");
// トレイのコンテキストメニューを生成する
menu = SDL_CreateTrayMenu(tray);
// コンテキストメニューのボタンを生成する
entry = SDL_InsertTrayEntryAt(menu, -1, "終了", SDL_TRAYENTRY_BUTTON);
// ボタンのコールバックを生成する
SDL_SetTrayEntryCallback(entry, callback_quit, NULL);
// メインループを実行する...
while (SDL_WaitEvent(&e)) {
if (e.type == SDL_EVENT_QUIT) {
break;
}
}
// 破棄するのはトレイのみでよい
// 残りは自動的に破棄される
SDL_DestroyTray(tray);
SDL_Quit();
return 0;
}