Как я могу определить, когда мое приложение свернуто?

У меня есть программа с возможностью включить минимизацию в области уведомлений панели задач. Чтобы это работало, мне нужен надежный способ определения, когда пользователь свернул приложение.

Как я могу сделать это, используя 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.

WM_SIZE

Для полноты есть также GetWindowPlacement. Состояние окна отображается вshowCmdчлен структуры WINDOWPLACEMENT, и если окно свернуто, оно имеет значение 2 или SW_SHOWMINIMIZED.

Вы можете проверить размер области, возвращаемой из GetClientRect - если ноль минимизирован, работает для меня, но может работать не во всех случаях.

Другие вопросы по тегам