Всем привет!
Нужно написать сабж. Про OnTop понятно. Для ограничения рабочей области пробовал SystemParametersInfo, но это криво, да и остальные программы на это реагируют не так, как хотелось бы. Надо, чтобы уже максимизированные отодвигались от края, к которому прислонен сабж, а максимизируемые на него (или под него) не залазили! Ну, в общем, поведение сабжа должно быть схожим с таскбаром или панелью офиса, прислоненной к краю экрана.
Если кто знает, как — plz, help!
Здравствуйте beaver, Вы писали:
B>Всем привет! B>Нужно написать сабж. Про OnTop понятно. Для ограничения рабочей области пробовал SystemParametersInfo, но это криво, да и остальные программы на это реагируют не так, как хотелось бы. Надо, чтобы уже максимизированные отодвигались от края, к которому прислонен сабж, а максимизируемые на него (или под него) не залазили! Ну, в общем, поведение сабжа должно быть схожим с таскбаром или панелью офиса, прислоненной к краю экрана. B>Если кто знает, как — plz, help!
Если я тебя правильно понял, то ты хочешь сделать, чтобы окошко граница максимизированных окон примыкали к твоему окну но не перекрывали его? Я думаю можно было бы сделать через
SetWindowsHookEx, т.е ловить WM_WINDOWPOSCHANGED для всех окон.Потом смотреть, если максимзируется то выполнять SetWindowPos для этого окна.
Здравствуйте Soulless, Вы писали:
S>Если я тебя правильно понял, то ты хочешь сделать, чтобы окошко граница максимизированных окон примыкали к твоему окну но не перекрывали его? Я думаю можно было бы сделать через S>SetWindowsHookEx, т.е ловить WM_WINDOWPOSCHANGED для всех окон.Потом смотреть, если максимзируется то выполнять SetWindowPos для этого окна.
Я сделал это через SystemParametersInfo(SPI_(GET/SET)WORKAREA, ...), разместив предварительно сабж за этой будущей границей, там, где мне надо. Заголовка у него нет, так что передвинуть его никак, что и хотелось. Это срабатывает, как и в твоем описании, если приложение _максимизируется_ в данный момент, а надо, чтобы и максимизированные отъезжали. Есть мысль перебрать все запущенные приложения и перемаксимизировать максимизированные (вот это сказанул! ) с помощью SetWindowPos, но нет ли чего-нибудь такого в API, думаю, мелкомягкие-то в любом случае красивее должны были сделать!
Здравствуйте beaver, Вы писали:
B>Здравствуйте Soulless, Вы писали:
S>>Если я тебя правильно понял, то ты хочешь сделать, чтобы окошко граница максимизированных окон примыкали к твоему окну но не перекрывали его? Я думаю можно было бы сделать через S>>SetWindowsHookEx, т.е ловить WM_WINDOWPOSCHANGED для всех окон.Потом смотреть, если максимзируется то выполнять SetWindowPos для этого окна.
B>Я сделал это через SystemParametersInfo(SPI_(GET/SET)WORKAREA, ...), разместив предварительно сабж за этой будущей границей, там, где мне надо. Заголовка у него нет, так что передвинуть его никак, что и хотелось. Это срабатывает, как и в твоем описании, если приложение _максимизируется_ в данный момент, а надо, чтобы и максимизированные отъезжали. Есть мысль перебрать все запущенные приложения и перемаксимизировать максимизированные (вот это сказанул! ) с помощью SetWindowPos, но нет ли чего-нибудь такого в API, думаю, мелкомягкие-то в любом случае красивее должны были сделать!
В MSDN по это вопросу есть статья Extend the Windows 95 Shell with Application Desktop Toolbars
Там в частности сказано
If an appbar is docked on the edge of the screen, moved from one edge of the screen to another, or removed from an edge of the screen, the system automatically resizes and repositions any maximized windows so that they always fill the workarea completely. In addition,when the upper-left corner of the workarea changes, the system shifts all the application windows on the screen so that they always maintain their relative distance from that corner.
Так что даже не знаю что сказать.
В статье есть пример, так что сравни со своим кодом.
если всё равно не будет работать,то надо перебрать все окна,получить их прямоугольники,
сделать SetWindowPos по старым координатам. Я думаю тогда до windows дойдёт чего ты от неё хочешь.
Здравствуйте Soulless, Вы писали:
S>В MSDN по это вопросу есть статья S>Extend the Windows 95 Shell with Application Desktop Toolbars S>Там в частности сказано
S>If an appbar is docked on the edge of the screen, moved from one edge of the screen to another, or removed from an edge of the screen, the system automatically resizes and repositions any maximized windows so that they always fill the workarea completely. In addition,when the upper-left corner of the workarea changes, the system shifts all the application windows on the screen so that they always maintain their relative distance from that corner.
Спасибо!! Похоже, это именно то, что мне нужно! Второй раз в жизни выношу вопрос на форум — и второй раз оперативно и доходчиво мне объясняют, что и как! Да здравствует тот, кто изобрел форумы!!!
(осталось только научиться бегло читать Рихтера на английском, но это уже другая история )
Здравствуйте beaver, Вы писали:
B>Всем привет! B>Нужно написать сабж. Про OnTop понятно. Для ограничения рабочей области пробовал SystemParametersInfo, но это криво, да и остальные программы на это реагируют не так, как хотелось бы. Надо, чтобы уже максимизированные отодвигались от края, к которому прислонен сабж, а максимизируемые на него (или под него) не залазили! Ну, в общем, поведение сабжа должно быть схожим с таскбаром или панелью офиса, прислоненной к краю экрана. B>Если кто знает, как — plz, help!
Если я правильно тебя понял то смотри в хелпах SHAppBarMessage()
-------------------------------------------------------------------
Вызывает презедент к себе коров и говорит:
— Ну, что будем сдавать, молоко или мясо?
(с) Г. Явлинский TV6 — Герой дня (18.04.2002)