私はSDL2アプリケーションを作成しましたが、タスクバーに表示するのではなく、システムトレイに最小化します。ウィンドウをシステムトレイに最小化する
SDL_MinimizeWindow
私がしたいことはしません、それはタスクバーのアイコンを残します。 SDLでこれを達成する方法はありますか?
私はSDL2アプリケーションを作成しましたが、タスクバーに表示するのではなく、システムトレイに最小化します。ウィンドウをシステムトレイに最小化する
SDL_MinimizeWindow
私がしたいことはしません、それはタスクバーのアイコンを残します。 SDLでこれを達成する方法はありますか?
コーディーは、Shell_NotifyIcon
が通知領域(システムトレイ)アイコンを作成するために必要な機能であるため、これを行うための純粋にSDL2の方法はありません。
私はアイコンを取得するために使用されるコードは
SDL_Window *window = SDL_CreateWindow("Test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 200, 200, SDL_WINDOW_HIDDEN);
SDL_SysWMinfo info;
SDL_VERSION(&info.version);
NOTIFYICONDATA icon;
if (SDL_GetWindowWMInfo(window, &info))
{
icon.uCallbackMessage = WM_USER + 1;
icon.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE;
icon.hIcon = LoadIcon(NULL, IDI_INFORMATION);
icon.cbSize = sizeof(icon);
icon.hWnd = info.info.win.window;
strcpy_s(icon.szTip, "Test tip");
bool success = Shell_NotifyIcon(NIM_ADD, &icon);
}
これは、非表示のウィンドウを作成し、(デフォルトの情報アイコンを使用して)アイコンをです。 SDLからこれと対話する
、あなたはどのようにについての情報が含まれていますが、SDL_SYSWMEVENT
のためにテストする必要があり、メインイベントループで、この後SDL_EventState(SDL_SYSWMEVENT, SDL_ENABLE);
を次のようにこれが行われ、プラットフォーム固有のウィンドウ管理イベントを有効にする必要がありますユーザーは通知領域アイコンと対話しています。また、これは、最小のイベントを探し、タスクバーから削除するウィンドウを隠します。これは次のスニペットで実現します
SDL_Event e;
while (SDL_PollEvent(&e) != 0)
{
switch (e.type)
{
case SDL_SYSWMEVENT:
if (e.syswm.msg->msg.win.msg == WM_USER + 1)
{
if (LOWORD(e.syswm.msg->msg.win.lParam) == WM_LBUTTONDBLCLK)
{
SDL_ShowWindow(window);
SDL_RestoreWindow(window);
}
}
break;
case SDL_QUIT:
running = false;
break;
case SDL_WINDOWEVENT:
if (e.window.event == SDL_WINDOWEVENT_MINIMIZED)
SDL_HideWindow(window);
break;
}
}
通知アイコンを探しています。私はSDL2を知らないので、これをラップするかわかりません。 Win32では、これらを操作するために 'Shell_NotifyIcon'関数を使います。 –
ありがとう、@CodyGray –