2015-08-14 3 views
0

Мое приложение может получать сообщение от другого приложения. Если приложение сведено к минимуму, я хочу восстановить его в предыдущем состоянии, не сосредотачиваясь на нем.SW_SHOWNOACTIVATE не работает, если программа сведена к минимуму, нажав кнопку на панели задач

Я делаю это по телефону

::ShowWindow(hWnd, SW_SHOWNOACTIVATE); 

Он хорошо работает, если приложение было сведено к минимуму с помощью кнопки в строке заголовка Минимизация, но если приложение было сведено к минимуму, нажав соответствующую кнопку на панели задач Windows, , то приложение получит фокус.

Можно ли это исправить или обойти?

+0

Так на самом деле это действительно работает, но вы хотите, чтобы он вел себя по-другому? –

+0

Просто быстрая проверка. Вы можете сделать одну кнопку в пользовательском интерфейсе и добавить код для минимизации окна вручную, т. Е. ':: ShowWindow (.., SW_MINIMIZE);' – hypheni

+0

Попробуйте 'PostMessage (hWnd, WM_SYSCOMMAND, SC_RESTORE, 0);' и посмотрите, иначе. –

ответ

0

Перед вызовом функции ShowWindow вы можете сделать следующее: HWND hwndForegroundWindow = GetForegroundWindow(). После этого вы можете восстановить окно переднего плана с помощью SetForegroundWindow(hwndForegroundWindow). Это зависит от того, что вы имеете в виду с фокусом, но переднее окно и фокус - что-то другое (для использования фокуса фокуса используйте GetFocus и SetFocus).

+0

Это может быть обходным путем, но оно все еще приносит окно в z-order top-1. Таким образом, это не работает так же, как когда окно было сведено к минимуму с помощью кнопки «Минимизировать», но по крайней мере последнее активное окно находится сверху. – gkerenyi

+0

Почему бы не установить логическое значение в событиях 'SC_MINIMIZE' или' SW_SIZE' (и не устанавливать его каждый раз, когда окно становится фокусом)? Затем перед вызовом «ShowWindow» вы можете проверить, какое окно имеет фокус и сбрасывать его потом, в вашем окне не было минимизировано таким событием. Я не уверен, что вы имеете в виду с помощью минимизации на панели задач, но посмотрите на события win32 Window Proc. Я уверен, что вы можете прикрепить к ним конкретные случаи. – abort

Смежные вопросы