Обновление панели задач
-
Как-то слишком часто стала перерисовываться новая панель, притом вся.Из хаоса в космос
Это из-за того, что панель отслеживает активное окно (раньше этой возможности не было).
Поскольку при любом рисовании все кнопки теряются, приходится выполнять рисование всего окна и определение всех кнопок.
Поскольку при любом рисовании все кнопки теряются, приходится выполнять рисование всего окна и определение всех кнопок.
А почему бы не перерисовывать две кнопки: соответствующее ставшему неактивным и активированое окно?barsuk wrote:Это из-за того, что панель отслеживает активное окно (раньше этой возможности не было).
Поскольку при любом рисовании все кнопки теряются, приходится выполнять рисование всего окна и определение всех кнопок.
Из хаоса в космос
Конечно, я бы сделал так, но есть следующая сложность: сейчас код @panel выглядит так:
1) вычисление координат кнопки
2) рисование произвольной кнопки
3) определение кнопки функцией 8.
Даже если я перерисовываю 2 кнопки, остальные надо снова определять(см. функцию 13/1), а значит, вычислять их координаты. Для этого придется либо замусорить код условными конструкциями вроде:
1) вычисление координат кнопки
2) если эту кнопку нужно рисовать, то рисование произвольной кнопки
3) определение кнопки функцией 8.
Либо продублировать код, добавив функцию "просто определение всех кнопок без рисования".
Первый вариант ухудшит скорость работы, а второй - увеличит размер программы. Какой способ мне следует выбрать?
1) вычисление координат кнопки
2) рисование произвольной кнопки
3) определение кнопки функцией 8.
Даже если я перерисовываю 2 кнопки, остальные надо снова определять(см. функцию 13/1), а значит, вычислять их координаты. Для этого придется либо замусорить код условными конструкциями вроде:
1) вычисление координат кнопки
2) если эту кнопку нужно рисовать, то рисование произвольной кнопки
3) определение кнопки функцией 8.
Либо продублировать код, добавив функцию "просто определение всех кнопок без рисования".
Первый вариант ухудшит скорость работы, а второй - увеличит размер программы. Какой способ мне следует выбрать?
1-ый. скорость теоретически только увеличится, поскольку перерисовка - более дорогая операция
я придерживаюсь первого варианта перерисование лишний раз всей панели, не оправданно.
Сделал по первому варианту. Теперь при смене активного окна мелькания нет.
Но, кажется, при запуске или закрытии окон панель рисуется два раза. Так или нет?
Но, кажется, при запуске или закрытии окон панель рисуется два раза. Так или нет?
- Attachments
-
-
@panel.7z (3.81 KiB)Downloaded 300 times
-
Шикарноbarsuk wrote:Сделал по первому варианту. Теперь при смене активного окна мелькания нет.
Но, кажется, при запуске или закрытии окон панель рисуется два раза. Так или нет?
На счёт двух раз не знаю.
Из хаоса в космос
"Так или нет?" - спроси у отладчика.. брикпоинт поставь на перерисовке..
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!
1 раз перерисовывается. Все в порядке.Gluk wrote:"Так или нет?" - спроси у отладчика.. брикпоинт поставь на перерисовке..
Немного оптимизировал код. Выкладываю исходники.
- Attachments
-
-
panel.7z (14.18 KiB)Downloaded 291 times
-
Не отображается Alt+Tab, хотя и работает.
Из хаоса в космос
При запуске приложения панель прорисовывается 2 раза (сначала добавляется кнопка - потом все стирается и рисуется заново )
при закрытии один раз (все стирается и рисуется заново но уже без кнопки)
при закрытии один раз (все стирается и рисуется заново но уже без кнопки)
Все сложное - просто!
Есть недоделка.. при нажатии кнопки WIN меню открывается.. но если кнопку держать X секунд меню откроется N раз ) наверно запускается в цикле пока нажата клавиша
Может сделать запуск меню по отпусканию клавиши вин? Тогда можно также сделать Win+D (свернуть/развернуть все окна), Win+R (запуск приложения), Win+E (запуск Eolite)...
Who is online
Users browsing this forum: No registered users and 0 guests