Меню Рубрики

Windows api свернуть окно

Windows api свернуть окно

Развернутое окно (maximized window)- окно, которое имеет стиль WS_MAXIMIZE. По умолчанию, Windows увеличивает развернутое окно так, чтобы оно заполнило экран или, в случае дочернего окна, рабочую область родительского окна. Хотя размеры окна могут быть установлены в тех же самых размерах развернутого окна, развернутое окно немного отличается. Windows автоматически перемещает строку заголовка окна в верхнюю часть экрана или в верхнюю часть рабочей области родительского окна. Windows также отключает опцию установки размеров рамки окна и возможность позиционирования окна в строке заголовка (так, чтобы пользователь не мог перемещать окно, перемещая строку заголовка).

Свернутое окно (minimized window) — окно, которое имеет стиль WS_MINIMIZE. По умолчанию, Windows уменьшает свернутое окно до размера его кнопки панели задач и перемещает свернутое окно в панель задач. Восстановленное окно (restored window) — окно, которое было возвращено к его прежним размерам и в позицию до свертывания или до развертывания. Если прикладная программа определяет стиль WS_MAXIMIZE или WS_MINIMIZE в функции CreateWindowEx, окно первоначально развернуто или свернуто. После создания окна, прикладная программа может использовать функцию CloseWindow, чтобы свернуть окно. Функция ArrangeIconicWindows упорядочивает пиктограммы на рабочем столе, или она упорядочивает свернутые дочерние окна в родительском окне. Функция OpenIcon восстанавливает свернутое окно в его предыдущих размерах и позиции.

Функция ShowWindow может свертывать, развертывать, или восстанавливать окно. Она может также устанавливать видимость окна и состояние активности. Функция SetWindowPlacement включает те же самые функциональные возможности, что и ShowWindow, но она может отменять свертывание, развертывание и восстановление позиции окна назначенные по умолчанию.

Функции IsZoomed и IsIconic определяют соответственно, развернуто ли или свернуто данное окно. Функция GetWindowPlacement восстанавливает свернутые, развернутые и восстановленные позиции окна, а также определяет состояние показа окна.

Когда Windows принимает команду, чтобы развернуть или восстановить свернутое окно, Windows посылает окну сообщение WM_QUERYOPEN. Если оконная процедура возвращает значение ЛОЖЬ(FALSE), Windows игнорирует команду Maximize (Развернуть) или Restore(Восстановить).

Windows автоматически устанавливает размер и позицию развернутого окна по определенным системой значениям по умолчанию для развернутого окна. Чтобы отменить эти значения по умолчанию, прикладная программа может или вызывать функцию SetWindowPlacement или обработать сообщение WM_GETMINMAXINFO, которое получаемое окном, когда Windows собирается развернуть его. WM_GETMINMAXINFO включает в себя указатель на структуру MINMAXINFO, содержащую значения Windows, используемые для установки развернутого размера и позиции. Замена этих значений отменяет значения по умолчанию.

Источник

Win32 API. Окна
Страница 21. Свернутое, развернутое и восстановленное окно

Свернутое, развернутое и восстановленное окно

Развернутое окно (maximized window)- окно, которое имеет стиль WS_MAXIMIZE. По умолчанию, Windows увеличивает развернутое окно так, чтобы оно заполнило экран или, в случае дочернего окна, рабочую область родительского окна. Хотя размеры окна могут быть установлены в тех же самых размерах развернутого окна, развернутое окно немного отличается. Windows автоматически перемещает строку заголовка окна в верхнюю часть экрана или в верхнюю часть рабочей области родительского окна. Windows также отключает опцию установки размеров рамки окна и возможность позиционирования окна в строке заголовка (так, чтобы пользователь не мог перемещать окно, перемещая строку заголовка).

Свернутое окно (minimized window) — окно, которое имеет стиль WS_MINIMIZE. По умолчанию, Windows уменьшает свернутое окно до размера его кнопки панели задач и перемещает свернутое окно в панель задач. Восстановленное окно (restored window) — окно, которое было возвращено к его прежним размерам и в позицию до свертывания или до развертывания. Если прикладная программа определяет стиль WS_MAXIMIZE или WS_MINIMIZE в функции CreateWindowEx, окно первоначально развернуто или свернуто. После создания окна, прикладная программа может использовать функцию CloseWindow, чтобы свернуть окно. Функция ArrangeIconicWindows упорядочивает пиктограммы на рабочем столе, или она упорядочивает свернутые дочерние окна в родительском окне. Функция OpenIcon восстанавливает свернутое окно в его предыдущих размерах и позиции.

Функция ShowWindow может свертывать, развертывать, или восстанавливать окно. Она может также устанавливать видимость окна и состояние активности. Функция SetWindowPlacement включает те же самые функциональные возможности, что и ShowWindow, но она может отменять свертывание, развертывание и восстановление позиции окна назначенные по умолчанию.

Функции IsZoomed и IsIconic определяют соответственно, развернуто ли или свернуто данное окно. Функция GetWindowPlacement восстанавливает свернутые, развернутые и восстановленные позиции окна, а также определяет состояние показа окна.

Когда Windows принимает команду, чтобы развернуть или восстановить свернутое окно, Windows посылает окну сообщение WM_QUERYOPEN. Если оконная процедура возвращает значение ЛОЖЬ(FALSE), Windows игнорирует команду Maximize (Развернуть) или Restore(Восстановить).

Windows автоматически устанавливает размер и позицию развернутого окна по определенным системой значениям по умолчанию для развернутого окна. Чтобы отменить эти значения по умолчанию, прикладная программа может или вызывать функцию SetWindowPlacement или обработать сообщение WM_GETMINMAXINFO, которое получаемое окном, когда Windows собирается развернуть его. WM_GETMINMAXINFO включает в себя указатель на структуру MINMAXINFO, содержащую значения Windows, используемые для установки развернутого размера и позиции. Замена этих значений отменяет значения по умолчанию.

Источник

Windows api свернуть окно

Здравствуйте. Мне надо свернуть и развернуть чужое приложение. И проблема в том, что приложение нормально не разворачивается.
Всякие PostMessage(wnd, WM_SYSCOMMAND, SC_RESTORE, 0), ShowWindowAsync( wnd, SW_SHOWNORMAL ) и SetForegroundWindow( wnd ) я уже перепробовал в разных комбинациях.
Есть ли возможность узнать какое по счету нужное окно в alt-tab панели и столько раз послать alt-tab?
Или можно как-то программно кликнуть по значку окна в панели задач?

Возможно есть еще какие-то способы восстановить окно в то состояние, что было до сворачивания? Что можете посоветовать?

От: theTosh
Дата: 03.07.09 12:23
Оценка: -1

Здравствуйте, Andreww, Вы писали:

A>Здравствуйте. Мне надо свернуть и развернуть чужое приложение. И проблема в том, что приложение нормально не разворачивается.
A>Всякие PostMessage(wnd, WM_SYSCOMMAND, SC_RESTORE, 0), ShowWindowAsync( wnd, SW_SHOWNORMAL ) и SetForegroundWindow( wnd ) я уже перепробовал в разных комбинациях.
A>Есть ли возможность узнать какое по счету нужное окно в alt-tab панели и столько раз послать alt-tab?
A>Или можно как-то программно кликнуть по значку окна в панели задач?

A>Возможно есть еще какие-то способы восстановить окно в то состояние, что было до сворачивания? Что можете посоветовать?

Свернуть: ShowWindow(HWND,SW_SHOWMINIMIZED)
Так ваще спрятать: ShowWindow(HWND,SW_HIDE)
Развернуть, как было: ShowWindow(HWND,SW_RESTORE)

От: Andreww
Дата: 03.07.09 16:46
Оценка:

Здравствуйте, theTosh, Вы писали:

T>Здравствуйте, Andreww, Вы писали:

A>>Здравствуйте. Мне надо свернуть и развернуть чужое приложение. И проблема в том, что приложение нормально не разворачивается.
A>>Всякие PostMessage(wnd, WM_SYSCOMMAND, SC_RESTORE, 0), ShowWindowAsync( wnd, SW_SHOWNORMAL ) и SetForegroundWindow( wnd ) я уже перепробовал в разных комбинациях.
A>>Есть ли возможность узнать какое по счету нужное окно в alt-tab панели и столько раз послать alt-tab?
A>>Или можно как-то программно кликнуть по значку окна в панели задач?

A>>Возможно есть еще какие-то способы восстановить окно в то состояние, что было до сворачивания? Что можете посоветовать?

T>Свернуть: ShowWindow(HWND,SW_SHOWMINIMIZED)
T>Так ваще спрятать: ShowWindow(HWND,SW_HIDE)
T>Развернуть, как было: ShowWindow(HWND,SW_RESTORE)

Спасибо, но ShowWindow(HWND,SW_RESTORE) не помогло.

Точнее разворачивает, но не так, как оно было до сворачивания. ( до сворачивания игра была в полном окне, после разворачивания — в оконном режиме ). Клик же по иконке на панели задач или выбор в alt-tab панели разворачивает игру именно так, как она была свернута.

Так что вопрос в силе.

От: theTosh
Дата: 03.07.09 17:55
Оценка:

Здравствуйте, Andreww, Вы писали:

T>>Свернуть: ShowWindow(HWND,SW_SHOWMINIMIZED)
T>>Так ваще спрятать: ShowWindow(HWND,SW_HIDE)
T>>Развернуть, как было: ShowWindow(HWND,SW_RESTORE)

A>Спасибо, но ShowWindow(HWND,SW_RESTORE) не помогло.

A>Точнее разворачивает, но не так, как оно было до сворачивания. ( до сворачивания игра была в полном окне, после разворачивания — в оконном режиме ). Клик же по иконке на панели задач или выбор в alt-tab панели разворачивает игру именно так, как она была свернута.

A>Так что вопрос в силе.

Вызови перед минимизацией GetWindowPlacement() и посмотри, какие у него flags и showCmd. Может это поможет.

От: Andreww
Дата: 06.07.09 16:46
Оценка:

Здравствуйте, theTosh, Вы писали:

T>Вызови перед минимизацией GetWindowPlacement() и посмотри, какие у него flags и showCmd. Может это поможет.

flags — 0
showCmd — SW_SHOWNORMAL
и перед минимизацие, и после RESTORE. А вот rcNormalPosition разные.

От: theTosh
Дата: 06.07.09 17:11
Оценка:

Здравствуйте, Andreww, Вы писали:

T>>Вызови перед минимизацией GetWindowPlacement() и посмотри, какие у него flags и showCmd. Может это поможет.

A>flags — 0
A>showCmd — SW_SHOWNORMAL
A>и перед минимизацие, и после RESTORE. А вот rcNormalPosition разные.

А в то время, когда окно минимизировано showCmd какое? Ты уверен, что нужное окно дёргаешь? Класс окна какой?

Вот еще попробуй для восстановления функцию OpenIcon().

От: Аноним
Дата: 06.10.09 18:03
Оценка:

Здравствуйте, theTosh, Вы писали:

T>Здравствуйте, Andreww, Вы писали:

T>>>Вызови перед минимизацией GetWindowPlacement() и посмотри, какие у него flags и showCmd. Может это поможет.

A>>flags — 0
A>>showCmd — SW_SHOWNORMAL
A>>и перед минимизацие, и после RESTORE. А вот rcNormalPosition разные.

T>А в то время, когда окно минимизировано showCmd какое? Ты уверен, что нужное окно дёргаешь? Класс окна какой?

T>Вот еще попробуй для восстановления функцию OpenIcon().

А что делать, если я знаю только hwnd главной формы, у которой в свою очередь может быть открыто какое-нибудь модальное окно?
Как это реализовано при переключении по Alt+Tab?

От: Аноним
Дата: 07.10.09 13:54
Оценка:

А>А что делать, если я знаю только hwnd главной формы, у которой в свою очередь может быть открыто какое-нибудь модальное окно?
А>Как это реализовано при переключении по Alt+Tab?

Проблема решена, т.к. приложение написано на Delphi, то главным окном является TApplication, при отправке ему сообщений всё нормально проходит)

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Windows api windows update
  • Windows api creating window
  • Windows api console functions
  • Windows apache не стартует
  • Windows apache включить mod rewrite