Comments 29
Да вы и правда сумасшедший. В хорошем смысле слова =) Что в следующий раз будете перерисовывать? :)
Под Windows 8 после разного рода ресайзинга приложение скушало 540 Mb памяти. Причем на размер откушанной памяти, как я понял, влияет то, куда падает тень, а не размер окна.
Видимо, так делать действительно «не стоит» :)
Видимо, так делать действительно «не стоит» :)
Возможно, что-то с Aero связано, но утечек памяти нет. При простом перемещении ничего не происходит, только ресайз дичает. Если изначально большое окно, то тоже все ОК с памятью.
Дело не в утечках, думаю. При запуске — 79 Мб. Немного расширяем — 250. Еще немного — 540. Еще немного — 270. Размер отжираемой памяти не прямо пропорционален размеру окна, очевидно.
Более того, если в дизайнере VS сделать это окно изначально совсем большим, то при запуске опять всего пара десятков Мб. пока не начнешь ресайзить. Любопытно, надо будет поэкспериментировать.
Попробуйте сразу делать настоящее окно размером во весь экран, а потом просто перемешать область, на которой рисуете. Винда нормально будет реагировать на мышь в полностью прозрачных областях. У меня такой подход используется, прожорливости по памяти не замечено.
Любопытно, если в коде ресайза сделать:
то сразу все хорошо становится с памятью. У меня пока нет идей зачем винда форсит так много памяти приложению, возможно, бага/фича винды. Обновлю сорцы и релиз
if (!DesignMode && Created)
{
BMP = new Bitmap(Width, Height, PixelFormat.Format32bppPArgb);
GFX = Graphics.FromImage(BMP);
// ....
RedrawForm();
GC.Collect(); // <---- ?! added
}
то сразу все хорошо становится с памятью. У меня пока нет идей зачем винда форсит так много памяти приложению, возможно, бага/фича винды. Обновлю сорцы и релиз
Все, проблема решена. Это я запоролся в 7 утра в цикле не диспозить BMP. Спасибо:
alphawindow.codeplex.com/discussions/429242"
и GC.Collect не нужен
alphawindow.codeplex.com/discussions/429242"
и GC.Collect не нужен
Так что за API, созданный для рисования тени под курсором?
Так это же обычные Layered Windows
Он, родимый, но с немного другим подходом
А в чем собственно состоит этот другой подход?
два чая этому господину, присоединяюсь к вопросу.
магическая константа, я так понимаю, это WS_EX_LAYERED.
магическая константа, я так понимаю, это WS_EX_LAYERED.
Да, разумеется она. Любопытно почитать на MSDN, что в Windows 8 этот стиль может быть наложен так-же для дочерних окон. Интересно зачем, и что с этим можно забавного придумать.
Неплохо, но на других окнах остаются артефакты после изменения размеров вашего окна.
Я так понимаю, у вас, как и у меня — некоторые участки окна сзади начинают смазываться или повторяться? А стоит окно увести, с этого места — они всё равно не пропадают.
upd: точнее пропадают, когда отпускаешь кнопку мыши.
upd: точнее пропадают, когда отпускаешь кнопку мыши.
Глаз споткнулся о картинку
Спейсинг между границей окна слева и кнопками больше, чем между границей окна справа и кнопками
И не равен спейсингу между кнопками
То же самое и на вертикали
ууууууууу, ненавижу свои глаза
От меня прораб из-за этого чуть не сбежал при ремонте. Все с линейкой лазил на потолок, че-то доказать пытался. Потом имел удивленный вид.
Спейсинг между границей окна слева и кнопками больше, чем между границей окна справа и кнопками
И не равен спейсингу между кнопками
То же самое и на вертикали
ууууууууу, ненавижу свои глаза
От меня прораб из-за этого чуть не сбежал при ремонте. Все с линейкой лазил на потолок, че-то доказать пытался. Потом имел удивленный вид.
У меня такое чувство что все программирование по win это такие хаки.
А, ну расскажите нам, как такое же сделать под Unity, оценим красоту.
В X11 при наличии композитного оконного менеджера достаточно просто прицепить к окну Visual с альфа каналом и рисовать на нём как ни в чём не бывало с полной поддержкой дочерних окон. Собсно, Wine через эту особенность и эмуриует виндовый костыль со слоями. С другой стороны надо понимать, что этот самый костыль тянется со времён, когда в винде никакого композитинга окон в помине не было, да и железо не могло его полноценно потянуть.
Я как-то тоже описывал подобное habrahabr.ru/post/126793/
Sign up to leave a comment.
15000 FPS. Хардкорные трюки ч.2 — ну cовсем нестандартное окно