Форум: "Начинающим";
Текущий архив: 2007.10.14;
Скачать: [xml.tar.bz2];
ВнизОкно, подобие понели задач Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.039 c