Как я могу определить, когда мое приложение свернуто?
У меня есть программа с возможностью включить минимизацию в области уведомлений панели задач. Чтобы это работало, мне нужен надежный способ определения, когда пользователь свернул приложение.
Как я могу сделать это, используя Windows API в приложении C++?
4 ответа
Когда пользователь свернет окно (используя поле в строке заголовка или выбрав опцию "Свернуть" в системном меню), ваше приложение получит WM_SYSCOMMAND
сообщениеwParam
параметр этого сообщения будет содержать значение SC_MINIMIZE
, который указывает конкретный тип системной команды, которая запрашивается. В этом случае вас не волнует lParam
,
Так что вам нужно настроить карту сообщений, которая прослушивает WM_SYSCOMMAND
сообщение с wParam
установлен в SC_MINIMIZE
, После получения такого сообщения вы должны выполнить свой код, чтобы свернуть приложение в область уведомлений панели задач и вернуть 0 (указывая, что вы обработали сообщение).
Я не уверен, какой графический интерфейс вы используете. Пример кода может выглядеть очень по-разному для разных наборов инструментов. Вот что вы можете использовать в прямом приложении Win32 C:
switch (message)
{
case WM_SYSCOMMAND:
if ((wParam & 0xFFF0) == SC_MINIMIZE)
{
// shrink the application to the notification area
// ...
return 0;
}
break;
}
Это то, что IsIconic должен определить, но он не работает последовательно для меня. (О, для последовательного способа определить это...)
Я думаю, что вы ищете WM_SIZE. Когда вы получите это, проверьте wParam, чтобы получить подробности. Вот страница MSDN.
Для полноты есть также GetWindowPlacement. Состояние окна отображается вshowCmd
член структуры WINDOWPLACEMENT, и если окно свернуто, оно имеет значение 2 или SW_SHOWMINIMIZED.
Вы можете проверить размер области, возвращаемой из GetClientRect - если ноль минимизирован, работает для меня, но может работать не во всех случаях.