Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.10.14;
Скачать: CL | DM;

Вниз

Окно, подобие понели задач   Найти похожие ветки 

 
Alexey_K ©   (2007-09-16 23:59) [0]

Пишу оболочку под Win, вот возник вопрос, каким образом создать окно (какие должны быть свойства), чтобы оно было подобно панели задач в винде, т.е. ограничивало разворачивание других окон, чтобы они (эти окна) не перекрывали его при "разворачивании".


 
Однокамушкин   (2007-09-17 09:59) [1]

http://www.rsdn.ru/article/winshell/appbars.xml


 
DVM ©   (2007-09-17 10:29) [2]


> Однокамушкин

Окно панели задач само не является AppBar-ом. Оно не подчиняется механизму управления AppBar-ами Explorera.


 
DVM ©   (2007-09-17 10:32) [3]


> Alexey_K ©

Т.к. ты пишешь свою оболочку, то о стандартном механизме управления Appbar-ами, что предложено в [1] можешь забыть. Необходимое поведение окна надо программировать самому, а чтобы работали аппбары, надо программировать и механизм управления ими.


> .е. ограничивало разворачивание других окон, чтобы они (эти
> окна) не перекрывали его при "разворачивании".


SystemParametersInfo() + SPI_SETWORKAREA


 
Alexey_K ©   (2007-09-17 10:33) [4]


> Окно панели задач само не является AppBar-ом.

Во во, а как реализовать именно такой бар как панель задач?


 
Alexey_K ©   (2007-09-17 10:35) [5]


> SystemParametersInfo() + SPI_SETWORKAREA

во пасиб, буду юзать...


 
DVM ©   (2007-09-17 10:35) [6]


> Во во, а как реализовать именно такой бар как панель задач?

Панель задач - понятие очень широкое. Что именно тебя интересует? Чтобы окно липло к краям экрана и его нельзя было оторвать, но можно было бы переместить к другому краю и имзменить размер? Или сам список задач интересует?


 
Alexey_K ©   (2007-09-17 10:45) [7]

1)
> Или сам список задач интересует

это уже реализовано
2)
> Чтобы окно липло к краям экрана и его нельзя было оторвать,
>  но можно было бы переместить к другому краю и имзменить
> размер

именно так, чтоб оно просто ограничевало рабочее пространство других приложений + было ВСЕГДА поверх всех окон, желательно даже поверх диспетчера задач...


 
DVM ©   (2007-09-17 10:49) [8]


> было ВСЕГДА поверх всех окон

Ну это несложно (SetWindowPos() + WM_WINDOWPOSCHANGING), только окно панели задач не всегда сверху всех окон.


> > Или сам список задач интересует
>
> это уже реализовано

эээ...не торопись утверждать, скорее всего есть масса глюков.


 
Lacmus ©   (2007-09-17 11:00) [9]

>DVM ©   (17.09.07 10:29) [2]
Интересно, что Вы имеете ввиду ? (на примере автоскрытия панели)


 
Alexey_K ©   (2007-09-17 11:01) [10]


> эээ...не торопись утверждать, скорее всего есть масса глюков.

ну тут просто (может и не сильно эффективно), если приложение запускается и у него есть окно (и оно не тул или диалог), то создается кнопочко на панели для переключения к этой задаче, ща думаю над папками.

вот никак я не догрню, как сэмулировать трей?


 
DVM ©   (2007-09-17 11:12) [11]


> Интересно, что Вы имеете ввиду ?

То, что написал, то и имею ввиду. Панель задач - не Аппбар, т.к. ее функциональность реализована напрямую в обход механизма управления аппбарами, который встроен в эксплорер. Грубо говоря сама панель задач и управляет аппбарами (сообщения от аппбаров приходят ее дочернему окну TrayNotifyWnd). Панель задач не вызывает функцию ShAppBarMessage().


> если приложение запускается и у него есть окно (и оно не
> тул или диалог), то создается кнопочко на панели для переключения
> к этой задаче

Это надо делать через установку ловушки WH_SHELL и функцию RegisterShellHook(). Так делает эксплорер.


> вот никак я не догрню, как сэмулировать трей?

Перехват сообщений WM_COPYDATA адресованных окну панели задач. Или заменить окно панели задач свои с тем же классом.


 
Alexey_K ©   (2007-09-17 11:19) [12]


> Это надо делать через установку ловушки WH_SHELL и функцию
> RegisterShellHook(). Так делает эксплорер.
>
>
> > вот никак я не догрню, как сэмулировать трей?
>
> Перехват сообщений WM_COPYDATA адресованных окну панели
> задач. Или заменить окно панели задач свои с тем же классом.
>


Во! За это пасиб, всё даже проще, чем я думал ;)


 
Lacmus ©   (2007-09-17 11:25) [13]

>DVM ©   (17.09.07 11:12) [11]

Думаю, Вы ошибаетесь, достаточно закрыть explorer.exe.


 
DVM ©   (2007-09-17 11:35) [14]


> Думаю, Вы ошибаетесь, достаточно закрыть explorer.exe.

В чем ошибаюсь? В том, что эксплорер управляет аппбпрами? Это действительно так. Убейте процесс эксплорера и убедитесь, что аппбары потеряют всю свою функциональность. Т.е. окна конечно остануться, но вот работать все будет неверно - они потеряют взаимную согласованность, т.к. некому больше будет корректировать их взаимное положение.

ShAppBarMessage шлет WM_COPY дата окну панели задач. В lParam сообщения вся информация об аппбаре. Панель задач корректирует данные в lParam и они частично возвращаются аппбару через ShAppBarMessage.


 
DVM ©   (2007-09-17 11:36) [15]


> ShAppBarMessage шлет WM_COPY

WM_COPYDATA имелось ввиду.


 
Lacmus ©   (2007-09-17 11:45) [16]

>DVM ©   (17.09.07 11:35) [14]

С координацией действительно начались проблемы, но с утверждением, что TaskBar не является AppBar-ом (т.е. не участвует в операциях с другими AppBar-ми) не соглашусь :-)


 
DVM ©   (2007-09-17 12:09) [17]


> но с утверждением, что TaskBar не является AppBar-ом (т.
> е. не участвует в операциях с другими AppBar-ми) не соглашусь
> :-)

Участвовать, не значит быть. :) Конечно, все расчеты положения остальных аппбаров строятся с учетом панели задач. Но она сама по себе - она для расчета своего положения не использует список координат остальных аппбпров (который у нее есть). Наоборот, она правит этот список в соответствии с собственным положением. Таким образом она всегда царь горы (края экрана) :)

Короче играет не по правилам.



Страницы: 1 вся ветка

Текущий архив: 2007.10.14;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.023 c
3-1181563376
Sapos
2007-06-11 16:02
2007.10.14
Как правильно составить SQL запрос


3-1181237949
AlexDav
2007-06-07 21:39
2007.10.14
Из Access в InterBase


2-1189761258
Gaj
2007-09-14 13:14
2007.10.14
Кодировка при копировании полей таблицы BDE


2-1190123521
brian
2007-09-18 17:52
2007.10.14
key violation


2-1189658032
Adios
2007-09-13 08:33
2007.10.14
HEX