2011-02-11 6 views
3

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

Как это сделать с помощью Windows API в приложении на C++?

+0

Я бы просто хотел спросить, есть ли WM_Destroy для выхода, что свести к минимуму? –

+0

Вы хотите сделать так, чтобы ваша программа минимизировала себя в области уведомлений, когда пользователь нажимает кнопку «Свернуть»? –

+0

да, что я хочу знать в C++ –

ответ

3

Когда пользователь минимизирует окно (либо с помощью окна на строке заголовка, или путем выбора «Минимизировать» вариант из меню системы), приложение получит WM_SYSCOMMAND message. Параметр 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; 
} 
+0

Программное обеспечение, использующее Visual Studio 2010. –

+0

Я получил его Серый спасибо за помощь –

0

Я думаю, что вы ищете WM_SIZE. Когда вы получите это, проверьте wParam, чтобы получить специфику. Вот страница MSDN.

WM_SIZE

+1

Неправильно. Вы не хотите слушать «WM_SIZE» для обнаружения, когда приложение было сведено к минимуму. –

+0

Из любопытства, получит ли он оба или WM_SYSCOMMAND именно так? – kailoon

+0

Да, вы получили бы это для обоих. Хотя ваш ответ несколько неполный. Вы действительно ищете 'wParam', равный' SIZE_MINIMIZED'. Но основной проблемой обработки 'WM_SIZE' является то, что вы не можете переопределить реализацию по умолчанию. Сообщение не отправляется до * после *, окно минимизировано. –

0

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

0

Это то, что должно быть определено IsIconic, но оно не работает последовательно для меня. (О, для последовательного определения этого ...)