Вожможно ли сделать сворачивание в трей при закрытии программы на C (Windows)? У меня есть программа, которая должна работать всё время, пока включен ПК, но не очень удобно, когда она висит в панеле. Возможно ли сделать сворачивание в трей при закрытии программы? И если да, то как?

29 Мая 2021 в 20:06
416 +1
2
Ответы
1

Да, можно реализовать сворачивание программы в трей при закрытии на C для Windows. Для этого необходимо использовать функцию Shell_NotifyIcon из Windows API.

Пример кода:

#include <windows.h>
#define TRAY_ICON_ID 1
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_CREATE:
{
// Инициализация иконки в трее
NOTIFYICONDATA nid;
ZeroMemory(&nid, sizeof(NOTIFYICONDATA));
nid.cbSize = sizeof(NOTIFYICONDATA);
nid.hWnd = hwnd;
nid.uID = TRAY_ICON_ID;
nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
nid.uCallbackMessage = WM_USER;
nid.hIcon = LoadIcon(NULL, IDI_APPLICATION);
lstrcpy(nid.szTip, "Название программы");
Shell_NotifyIcon(NIM_ADD, &nid);
}
break;
case WM_USER:
{
if (LOWORD(lParam) == WM_LBUTTONUP)
{
// Возвращаем программу обратно на экран при нажатии на иконку в трее
// Например, показываем окно с помощью функции ShowWindow(hwnd, SW_SHOW);
}
}
break;
case WM_CLOSE:
{
// Сворачиваем программу в трей при закрытии
ShowWindow(hwnd, SW_HIDE);
return 0;
}
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return 0;
}
int main()
{
// Создание и регистрация окна
WNDCLASS wc = {0};
wc.lpfnWndProc = WindowProc;
wc.hInstance = GetModuleHandle(NULL);
wc.lpszClassName = "TrayApp";
RegisterClass(&wc);
// Создание окна
HWND hwnd = CreateWindow(wc.lpszClassName, "TrayApp", 0, 0, 0, 0, 0, 0, 0, wc.hInstance, 0);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}

Этот код создаст окно программы, которое будет сворачиваться в трей при закрытии. При нажатии на иконку в трее окно будет возвращаться на экран. Не забудьте установить обработчик для WM_USER, чтобы обрабатывать нажатия на иконку в трее.

17 Апр 2024 в 17:50
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир