...when altering one's mind becomes as easy as programming a computer, what does it mean to be human?..
среда, 4 марта 2009 г.
Почему диалоговые окна создаются невидимыми?
Если только вы не приглядывались действительно внимательно, вы могли бы и не заметить, что диалоговые окна на самом деле изначально создаются невидимыми, даже если в шаблоне (*) вы указали WS_VISIBLE. И причина опять кроется в истории.
Перемотайте время назад, в старые дни (мы говорим о временах Windows 1.0) видео-карты были медленными, процессоры были медленными и память была медленная. Вы могли выбрать пункт меню, запускающий диалог, и ждать секунду или две, пока диалог не загрузится с дискеты (жёсткие диски были только для богатеньких). А потом вам ещё нужно было дождаться окончания прорисовки.
Чтобы сэкономить ценные секунды, диалоговые окна создавались скрытыми, а весь начальный ввод (т.е. то, что вы понажимали, пока диалог грузился) обрабатывался до показа окна. Диалоговое окно отображалось на экране только когда заканчивалась обработка начального ввода. И если вы печатали быстро, то вы могли успеть вбить все команды и нажать Enter до того как диалог показался. В этом случае диалог не показывался вовсе! Вот это эффективность.
Конечно же, сегодня программы хранятся на жёстких дисках и вы не можете (обычно) "перепечатать" жёсткий диск, поэтому эта оптимизация сегодня идёт впустую, но всё же старое поведение не изменялось по соображением совместимости.
Вообще-то даже сегодня это поведение бывает полезным: если бы диалоговые окна показывались изначально видимыми, то пользователь видел бы, как создаются все элементы управления, как обрабатывается WM_INITDIALOG (обработчик которого обычно изменяет значения по-умолчанию на реальные, скрывает и показывает контролы и т.п.). Это было бы и некрасиво и сбивало бы с толку ("как это все флажки показываются установленными, а потом неожиданно меняются, причём до того, как я по ним успеваю щёлкнуть").
Примечание переводчика:
(*) Речь идёт о системных диалогах, формируемых шаблоном, а вовсе не о диалогах в Delphi (где это обычные окна). Впрочем, в какой-то мере сказанное справедливо и в этом случае тоже.
2 комментария:
Можно использовать некоторые HTML-теги, например:
<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>
Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку.
Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.
Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.
Примечание. Отправлять комментарии могут только участники этого блога.
> если бы диалоговые окна показывались изначально видимыми, то пользователь видел бы, как создаётся все элементы управления, как отрабатывает WM_INITDIALOG (которая обычно изменяет значения по-умолчанию на реальные, скрывает и показывает контролы и т.п.). Это было бы и некрасиво и сбивало бы с толку ("как это все флажки показываются установленными, а потом неожиданно меняются, причём до того, как я по ним успеваю щёлкнуть").
ОтветитьУдалитьУ меня на работе давно висит в списке неисправленных багов похожее поведение mdi-форм. Когда форма сначала появляется в середине экрана, а потом "прыгает" в другую его часть(сохранение/загрузка размеров). =(((
Да-да))) Сначала задаем параметры для окна, а только потом Form.Show;
Удалить