|
|
| Посл.отвђт | Сообщен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 :( На счет цвета понял, попробую ;) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.099 |