Я создал приложение SDL2 и хотел бы, чтобы оно сворачивалось в панель задач, а не отображалось на панели задач.
SDL_MinimizeWindow
не выполняет то, что я хочу, оставляет значок на панели задач. Есть ли способ добиться этого с помощью SDL?
Я создал приложение SDL2 и хотел бы, чтобы оно сворачивалось в панель задач, а не отображалось на панели задач.
SDL_MinimizeWindow
не выполняет то, что я хочу, оставляет значок на панели задач. Есть ли способ добиться этого с помощью SDL?
Не существует чисто SDL2-способа сделать это, как сказал Коди, Shell_NotifyIcon
- это функция, необходимая для создания значка в области уведомлений (на панели задач).
Код, который я использовал для получения значка,
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_EventState(SDL_SYSWMEVENT, SDL_ENABLE);
После этого в основном цикле событий вы должны проверить SDL_SYSWMEVENT
, который содержит информацию о том, как пользователь взаимодействовал со значком в области уведомлений. Это также ищет событие сворачивания и скрывает окно, которое удаляет его с панели задач. Это достигается в следующем фрагменте
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;
}
}
Shell_NotifyIcon
. - person Cody Gray   schedule 03.01.2017