понедельник, 22 февраля 2010 г.

Почему DS_SHELLFONT = DS_FIXEDSYS or DS_SETFONT?

Это перевод Why does DS_SHELLFONT = DS_FIXEDSYS | DS_SETFONT? Автор: Реймонд Чен.

Вы могли заметить, что числовое значение флага DS_SHELLFONT равно комбинации DS_FIXEDSYS or DS_SETFONT.
const
DS_SETFONT = $0040;
DS_FIXEDSYS = $0008;
DS_SHELLFONT = DS_SETFONT or DS_FIXEDSYS;
Разумеется, это не простое совпадение.

Значение флага DS_SHELLFONT было выбрано так, чтобы старые операционные системы (Windows 95, 98, NT 4) принимали бы флаг, но при этом игнорировали. Это позволило бы людям писать одну программу, которая получала бы стиль "Windows 2000", будучи запущенной на Windows 2000, и получала "классический" вид, работая на старых системах (если бы вы заставили людей писать две версии программы, одна из которых работает на всех системах, а вторая - только на новой, но выглядит чуточку лучше, то они просто не стали бы писать второй вариант).

Флаг DS_FIXEDSYS удовлетворяет этим условиям. Старые системы принимают флаг, поскольку это допустимый для них флаг, но они также игнорируют его, потому что флаг DS_SETFONT имеет приоритет.

Это одно из этих небольших упражнений по обратной совместимости: как вы спроектируете новое нечто, чтобы было возможным написать программу с использованием новых возможностей, но чтобы при этом она же работала бы и на старой системе (с деградацией возможностей, конечно же)?

Комментариев нет:

Отправить комментарий

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.