· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› Плавная минимизация окна

. 1 . 2 . >>

Посл.отвђт Сообщенiе


Дата: Июн 18, 2003 20:34:21

Как сделать плавную минимизацию окна на чистом WinApi? А то сворачиваешь окно в трей - а оно в левом нижнем углу мелькает :( Пусть уж лучше плавно сворачивается ;)


Дата: Июн 18, 2003 23:29:38

Посылать сообщение MoveWindow окну (своему или чужому) в цикле уменьшая высоту и / или ширину окна, с задержкой или без.


Дата: Июн 19, 2003 01:08:08

pas
А по как именно (в каких пропорциях) его уменьшать? Ведь тут нужно учитывать размеры экрана и размеры окна...
Может быть есть готовый пример?


Дата: Июн 19, 2003 01:21:54

Ведь тут нужно учитывать размеры экрана и размеры окна...
Не только. Трей может находиться и в другом углу.


Дата: Июн 19, 2003 01:54:46

Quantum
C местом куда исчезает окно все ясно - это левый нижний угол. А вот как именно следует изменять размер в соответствии с разрешением экрана, размером и положением окна чтобы оно красиво сворачивалось и в итоге исчезало совсем?


Дата: Июн 19, 2003 04:24:05

Gloomy
сворачиваешь окно в трей - а оно в левом нижнем углу мелькает
Как Вы делаете сворачивание?
Afaik достаточно поместить иконку в трей, а окно скрыть. И где тут мелькание по углам?

Пусть уж лучше плавно сворачивается
Такой эффект при старте "Сократ персональный v4.1" надоел хуже горькой редьки, а отключить негде. То ли дело WinAmp, ReGet и TheBat.


Дата: Июн 19, 2003 09:15:20

P2M
Как Вы делаете сворачивание?

invoke SendMessage,hwnd,WM_SYSCOMMAND,SC_MINIMIZE,0
invoke ShowWindow,hwnd,SW_HIDE

Вот так. Перепробовал разные способы закрывания окон. Вообще мне необходимо спрятать окно и чтобы оно потребляло как можно меньше памяти. При таком способе сворачивания получается то что надо - окно потребляет не более 150 Кб (!!!). А если просто его прятать, то начинает жрать до 2 Мб :(
Может есть другие способы уменьшить потребление оперативки пока окно скрыто?


Дата: Июн 19, 2003 09:42:28 · Поправил: P2M

Gloomy
Imho SW_HIDE достаточно.

Что значит При таком способе сворачивания и чем это отличается от просто его прятать?

чтобы оно потребляло как можно меньше памяти
Зависит от приложения. Освобождайте ресурсы, которые не нужны, если окно свернуто/невидимо.


Дата: Июн 19, 2003 10:55:05

P2M
Особождаю все ресурсы, удаляю все объекты - все равно память жрет. Самое простое окно жрет 1,2 Мб памяти в развернутом виде, но 100-120 Кб (!!!) если его минимизировать. Обрати на это внимание ;) Просто запусти тот же Блокнот и посмотри сколько он жрет памяти в минимизированном состоянии и в развернутом ;)
Так что SW_HIDE не достаточно - приходится сначала минимизировать окно, а уж затем прятать :(
Другого столь же эффективного способа уменьшить количество потребляемой памяти я не нашел :(


Дата: Июн 19, 2003 11:04:07

Нашел интересную функцию AnimateWindow. Только как ее использовать?


Дата: Июн 19, 2003 11:25:18

Решение найдено!!! Применил функцию AnimateWindow:

invoke AnimateWindow,hwnd,100,AW_VER_POSITIVE or AW_HIDE or AW_HOR_NEGATIVE

Теперь окно сворачивается и культурно исчезает в левом нижнем углу ;)

Есть еще вопрос: как установить цвет шрифта и цвет фона в Edit?
Пробую так:

invoke GetDC,hwnd
mov dc,eax
invoke SetTextColor,dc,03200232h
invoke SetBkColor,dc,00004000h

Не работает :(


Дата: Июн 19, 2003 12:40:05

Gloomy
Самое простое окно жрет 1,2 Мб памяти в развернутом виде, но 100-120 Кб (!!!) ... Так что SW_HIDE не достаточно
Именно так я и сделал: простое окно + иконка в трее + SW_HIDE = 1.2Mb -> 120 Кб.


Дата: Июн 19, 2003 12:56:07

P2M
Мне иконка в трее совсем не нужна - у меня окно по хот-кею вызывается ;)
Сделал интересную фишку:

invoke SendMessage,hwnd,WM_SYSCOMMAND,SC_MINIMIZE,0
invoke AnimateWindow, hwnd, 200, AW_CENTER or AW_HIDE

Теперь окно сворачивается в полоску в левом нижнем углу экрана, а затем плавно исчезает. Но при этом памяти начинает есть в 2 раза больше: до 360 Кб :(


Дата: Июн 19, 2003 13:09:36

Gloomy
Про цвета:
Установку цвета надо делать на WM_CTLCOLOREDIT для DC, которое передано в wParam.


Дата: Июн 19, 2003 13:19:26

Нашел отличное решение как сделать окно чтобы оно исчезало и при этом не жрало память!!!

invoke ShowWindow,hwnd,SW_HIDE
invoke GetCurrentProcess
invoke SetProcessWorkingSetSize, eax, -1, -1

Но работает это по-идее только в WinNT :( А в Win9x не работает. Если не очень затруднит - попробуй сделать такое окно и посмотри сколько оно будет памяти есть. У меня на WinXP - в пределах 140 Кб. Сам бы написал - но на компе только WinXP :(

На счет цвета понял, попробую ;)

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.099