6

Все мы знаем ситуацию, когда программа или сама ОС зависли, и единственное, что вы можете сделать, это нарисовать миллионы диалогов, которые отображает система. Я говорю об этом (демо здесь):

Windows Lagscreen

Почему это происходит? И почему я всегда встречаюсь с ним только на Windows XP? Разве это не происходит в Linux, Mac или других версиях Windows? Если нет, то почему? На самом деле, эта ошибка имеет официальное / общее имя вообще?

1 ответ1

5

Это называется «призрачным окном». Что происходит, так это то, что процесс зависает или блокируется и, следовательно, не может ответить на сообщение рисования для обновления своего окна. Чтобы справиться с этой ситуацией, Windows вступает во владение и красит окно, пока программа не становится снова отзывчивой и рисует себя (или убита или падает).

В более старых версиях Windows замороженное окно было окрашено сплошным цветом фона, но в XP Windows делает снимок экрана, как оно было в последний раз, когда оно обновлялось, и использует его для рисования. Конечно, если части окна закрыты (как, например, если вы перетаскиваете его за пределы экрана), Windows может закрасить его только цветом фона (поэтому после перетаскивания его за пределы экрана во всех направлениях оно становится совершенно пустым).

Кроме того, когда вы перетаскиваете другие окна поверх него, они оставляют след, потому что замороженное окно не отвечает на сообщение рисования, когда часть его открыта.

В Vista+ Windows по-прежнему рисует призрачные окна, как в XP, но использует хитрость, чтобы заставить окно казаться в некоторой степени живым; Вы все еще можете перемещать и минимизировать его, не теряя последнее обновленное изображение или не получая эффект «Зал зеркал». Теперь он скрывает фактическое замороженное окно и заменяет его новым временным окном того же размера и формы, что и замороженное. Новое окно окрашено скриншотом замороженного окна, но с бледно-белым оттенком. Теперь, когда вы перетаскиваете другие окна поверх него, оно сохраняет исходное (призрачное) изображение, потому что оно на самом деле не заморожено; обрабатывает сообщение рисования, рисуя сохраненный скриншот.

Сотрудники Microsoft Раймонд Чен и Мэтт Исон хорошо это рассмотрели.

Конечно, Mac, Linux и т.д. Все обрабатывают рисование и управление окнами по-своему, поэтому по-разному реагируют на замороженные окна.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .