DeferWindowPos и ​​SWP_SHOWWINDOW / SWP_HIDEWINDOW - PullRequest
1 голос
/ 19 мая 2010

Я пишу приложение для виртуального рабочего стола, которое использует функции API DeferWindowPos. Текущий метод, который я использую, это перемещение окон за пределы экрана, если они не на текущем виртуальном рабочем столе. Однако я знаю, что хочу также скрыть окна, которые находятся за пределами экрана, чтобы они не появлялись на панели задач. Я попытался это также передать SWP_SHOWWINDOW / SWP_HIDEWINDOW в вызовы DeferWindowPos (). Я прочитал несколько сайтов по этому поводу, и один из них предположил, что если пройдены SWP_SHOWWINDOW / SWP_HIDEWINDOW, то окно будет только показывать или скрывать, а не изменять положение. Кто-нибудь может это подтвердить, или я что-то не так делаю?

Ответы [ 3 ]

0 голосов
/ 19 мая 2010

В дополнение к rtfm, DeferWindowPos в конечном итоге собирается вызвать SetWindowPos. SetWindowPos всегда проверяет свои параметры, передавая их WindowProc через WM_WINDOWPOSCHANGING, поэтому, если вы не подключаете все окна WindowProc как часть вашего менеджера виртуальных рабочих столов, перемещение их за пределы экрана приведет к сбою для любых окон где разработчики делают что-то «умное» или необычное - например, прижимают к краю рабочего пространства.

0 голосов
/ 30 января 2014

Я тоже заметил это утверждение в документации:

Если в каком-либо из окон в структуре положения с несколькими окнами установлен флаг SWP_HIDEWINDOW или SWP_SHOWWINDOW, ни одно из окон не будет переставлено.

... после того, как я уже переписал некоторый код для использования DWP, поэтому я решил попробовать его запустить. Это работало просто отлично, хотя я использовал SWP_SHOWWINDOW или SWP_HIDEWINDOW для каждого вызова DWP.

Это было в Windows 7 64-bit, поэтому YMMV.

0 голосов
/ 19 мая 2010

Вам необходимо прочитать документацию , в которой четко указано

Если в каком-либо из окон в структуре положения с несколькими окнами установлен флаг SWP_HIDEWINDOW или SWP_SHOWWINDOW, ни одно из окон не будет переставлено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...