Приложение типа панели MSOffice
От: beaver Россия  
Дата: 02.03.02 11:41
Оценка:
Всем привет!
Нужно написать сабж. Про OnTop понятно. Для ограничения рабочей области пробовал SystemParametersInfo, но это криво, да и остальные программы на это реагируют не так, как хотелось бы. Надо, чтобы уже максимизированные отодвигались от края, к которому прислонен сабж, а максимизируемые на него (или под него) не залазили! Ну, в общем, поведение сабжа должно быть схожим с таскбаром или панелью офиса, прислоненной к краю экрана.
Если кто знает, как — plz, help!
Re: Приложение типа панели MSOffice
От: Soulless Россия  
Дата: 02.03.02 12:03
Оценка:
Здравствуйте beaver, Вы писали:

B>Всем привет!

B>Нужно написать сабж. Про OnTop понятно. Для ограничения рабочей области пробовал SystemParametersInfo, но это криво, да и остальные программы на это реагируют не так, как хотелось бы. Надо, чтобы уже максимизированные отодвигались от края, к которому прислонен сабж, а максимизируемые на него (или под него) не залазили! Ну, в общем, поведение сабжа должно быть схожим с таскбаром или панелью офиса, прислоненной к краю экрана.
B>Если кто знает, как — plz, help!

Если я тебя правильно понял, то ты хочешь сделать, чтобы окошко граница максимизированных окон примыкали к твоему окну но не перекрывали его? Я думаю можно было бы сделать через
SetWindowsHookEx, т.е ловить WM_WINDOWPOSCHANGED для всех окон.Потом смотреть, если максимзируется то выполнять SetWindowPos для этого окна.
Re[2]: Приложение типа панели MSOffice
От: beaver Россия  
Дата: 03.03.02 07:07
Оценка:
Здравствуйте Soulless, Вы писали:

S>Если я тебя правильно понял, то ты хочешь сделать, чтобы окошко граница максимизированных окон примыкали к твоему окну но не перекрывали его? Я думаю можно было бы сделать через

S>SetWindowsHookEx, т.е ловить WM_WINDOWPOSCHANGED для всех окон.Потом смотреть, если максимзируется то выполнять SetWindowPos для этого окна.

Я сделал это через SystemParametersInfo(SPI_(GET/SET)WORKAREA, ...), разместив предварительно сабж за этой будущей границей, там, где мне надо. Заголовка у него нет, так что передвинуть его никак, что и хотелось. Это срабатывает, как и в твоем описании, если приложение _максимизируется_ в данный момент, а надо, чтобы и максимизированные отъезжали. Есть мысль перебрать все запущенные приложения и перемаксимизировать максимизированные (вот это сказанул! ) с помощью SetWindowPos, но нет ли чего-нибудь такого в API, думаю, мелкомягкие-то в любом случае красивее должны были сделать!
Re[3]: Приложение типа панели MSOffice
От: Soulless Россия  
Дата: 03.03.02 08:05
Оценка:
Здравствуйте 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 дойдёт чего ты от неё хочешь.

Успехов
Re[4]: Приложение типа панели MSOffice
От: beaver Россия  
Дата: 03.03.02 09:39
Оценка:
Здравствуйте 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.


Спасибо!! Похоже, это именно то, что мне нужно! Второй раз в жизни выношу вопрос на форум — и второй раз оперативно и доходчиво мне объясняют, что и как! Да здравствует тот, кто изобрел форумы!!!

(осталось только научиться бегло читать Рихтера на английском, но это уже другая история )
Re: Приложение типа панели MSOffice
От: Кери Олег Игоревич Россия  
Дата: 07.03.02 06:52
Оценка:
Здравствуйте beaver, Вы писали:

B>Всем привет!

B>Нужно написать сабж. Про OnTop понятно. Для ограничения рабочей области пробовал SystemParametersInfo, но это криво, да и остальные программы на это реагируют не так, как хотелось бы. Надо, чтобы уже максимизированные отодвигались от края, к которому прислонен сабж, а максимизируемые на него (или под него) не залазили! Ну, в общем, поведение сабжа должно быть схожим с таскбаром или панелью офиса, прислоненной к краю экрана.
B>Если кто знает, как — plz, help!

Если я правильно тебя понял то смотри в хелпах SHAppBarMessage()
Re[2]: Приложение типа панели MSOffice
От: Gambler  
Дата: 07.03.02 08:33
Оценка:
Здравствуйте Кери Олег Игоревич, Вы писали:

КОИ>Если я правильно тебя понял то смотри в хелпах SHAppBarMessage()


Ещё ему пригодится вот это — http://rsdn.ru/forum/message.asp?mid=26246&only
Автор: Gambler
Дата: 02.02.02


из своего опыта знаю
-------------------------------------------------------------------

Вызывает презедент к себе коров и говорит:
— Ну, что будем сдавать, молоко или мясо?
(с) Г. Явлинский TV6 — Герой дня (18.04.2002)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.