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

29 Мая 2021 в 20:06
388 +1
1
Ответы
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 Апр в 17:50
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 588 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир