Это перевод Why are device-independent bitmaps upside down? Автор: Реймонд Чен.
Для всех, кто в первый раз знакомится с независимыми от устройства (device-independent) растровыми изображениями Windows, становится сюрпризом тот факт, что они перевёрнуты - в том смысле, что первая строка пикселей соответствует нижней строке изображения, а последующие строки пикселей идут по изображению вверх, при этом последняя строка пикселей соответствует самой верхней строке изображения.
Ладно, не будем называть эти растровые изображения перевёрнутыми вверх ногами. Менее осуждающий термин - называть их восходящими (bottom-up) растровыми изображениями.
Итак, почему растровые изображения, не зависящие от устройства, хранятся снизу вверх?
...when altering one's mind becomes as easy as programming a computer, what does it mean to be human?..
Показаны сообщения с ярлыком Win16. Показать все сообщения
Показаны сообщения с ярлыком Win16. Показать все сообщения
среда, 26 мая 2021 г.
вторник, 25 февраля 2020 г.
Почему существуют тривиальные функции типа CopyRect и EqualRect?
Это перевод Why are there trivial functions like CopyRect and EqualRect? Автор: Реймонд Чен.
Если вы покопаетесь внутри
Если вы покопаетесь внутри
user32, вы увидите там некоторые, казалось бы, тривиальные функции - такие как CopyRect и EqualRect. Зачем нам вообще нужны целые функции для того, что можно сделать с помощью операторов := и =?Один байт = один доллар
Это перевод One byte used to cost a dollar. Автор: Реймонд Чен.
В те времена, когда программное обеспечение распространялось на дискетах (помните дискеты?), для Windows было правило: один байт стоит один доллар.
В те времена, когда программное обеспечение распространялось на дискетах (помните дискеты?), для Windows было правило: один байт стоит один доллар.
четверг, 16 января 2020 г.
Историческая важность ресторана Burgermaster
Это перевод The historical significance of the Burgermaster drive-in restaurant. Автор: Реймонд Чен.
С 1981 по 1986 год штаб-квартира Microsoft находилась в здании, которое тогда было известно как Northup Building, 10700 Northup Way в Белвью. Давным-давно я рассказал историю об отеле La Quinta рядом с этим зданием. Здание на другой стороне также играет значительную роль в истории Microsoft. Это здание - ресторан Burgermaster.
В Windows 3.0 сегмент данных, в котором записывались местоположения всех других сегментов данных, назывался BurgerMaster¹. Почему?
С 1981 по 1986 год штаб-квартира Microsoft находилась в здании, которое тогда было известно как Northup Building, 10700 Northup Way в Белвью. Давным-давно я рассказал историю об отеле La Quinta рядом с этим зданием. Здание на другой стороне также играет значительную роль в истории Microsoft. Это здание - ресторан Burgermaster.
В Windows 3.0 сегмент данных, в котором записывались местоположения всех других сегментов данных, назывался BurgerMaster¹. Почему?
среда, 31 июля 2019 г.
А как насчет USERSEEUSERDO и GDISEEGDIDO?
Это перевод What about USERSEEUSERDO and GDISEEGDIDO? Автор: Реймонд Чен.
В Windows 3.1 существуют недокументированные функции с именами
В Windows 3.1 существуют недокументированные функции с именами
USERSEEUSERDO ("пользователь видит - пользователь делает") и GDISEEGDIDO ("GDI видит - GDI делает"). Наверное, и за этими забавными именами тоже стоит какая-то история?четверг, 27 июня 2019 г.
Почему функция GetVersion сообщает основную версию в младшем байте и младшую версию в старшем байте?
Это перевод Why does the GetVersion function report the major version in the low-order byte, and the minor version in the high-order byte? Автор: Реймонд Чен.
Лора Батлер задаёт вопрос: кому в голову пришла идея возвращать основную (major) версию в младшем байте, а младшую (minor) версию - в старшем байте функции
Лора Батлер задаёт вопрос: кому в голову пришла идея возвращать основную (major) версию в младшем байте, а младшую (minor) версию - в старшем байте функции
GetVersion. Надо же делать наоборот: нужно возвращать основную версию в старшем байте и младшую версию в младшем байте, чтобы вы могли делать такое:
if ГипотетическаяУлучшеннаяGetVersion >= $030A then begin // версия минимум 3.10 end;Вместо этого сейчас основная версия возвращается в младшем байте, а младшая версия - в старшем байте, поэтому версия 3.10 возвращается как значение
$0A03, что приводит к таким ошибкам:
if GetVersion >= $0A03 then begin // неверная проверка на версию ≥ 3.10 end;Почему номер версии возвращается таким странным образом?
вторник, 25 июня 2019 г.
Почему Windows for Workgroups называют Windows для складов?
Это перевод Why was Windows for Workgroups pejoratively nicknamed Windows for Warehouses? Автор: Реймонд Чен.
Первой версией Windows со встроенной поддержкой сети была Windows for Workgroups 3.10. Её целевой аудиторией были малые предприятия, которые хотели бы объединить свои компьютеры вместе - в так называемые "рабочие группы" (workgroups). Этот термин сохраняется и в Windows NT и относится к неуправляемой совокупности компьютеров, работающих в одноранговом режиме.
Первой версией Windows со встроенной поддержкой сети была Windows for Workgroups 3.10. Её целевой аудиторией были малые предприятия, которые хотели бы объединить свои компьютеры вместе - в так называемые "рабочие группы" (workgroups). Этот термин сохраняется и в Windows NT и относится к неуправляемой совокупности компьютеров, работающих в одноранговом режиме.
четверг, 30 августа 2018 г.
Ранняя история файловых атрибутов Windows, и почему в них есть место между System и Directory
Это перевод The early history of Windows file attributes, and why there is a gap between System and Directory. Автор: Реймонд Чен.
Если вы посмотрите на значения основных файловых атрибутов Windows, то увидите, что значение 8 пропущено.
Если вы посмотрите на значения основных файловых атрибутов Windows, то увидите, что значение 8 пропущено.
четверг, 13 октября 2016 г.
Почему файлы программ размещаются в каталоге Program Files?
Это перевод Why do program files go into the Program Files directory? Автор: Реймонд Чен.
Некоторые из программ сертификации ПО от Microsoft (например, Windows Logo) требуют, чтобы приложения устанавливались бы в каталог Program Files по умолчанию. Зачем нужно это требование?
Некоторые из программ сертификации ПО от Microsoft (например, Windows Logo) требуют, чтобы приложения устанавливались бы в каталог Program Files по умолчанию. Зачем нужно это требование?
суббота, 18 июля 2015 г.
Что в Windows 3.1 делала кнопка "Игнорировать" в диалоге GPF?
Это перевод What did the Ignore button do in Windows 3.1 when an application encountered a general protection fault? Автор: Реймонд Чен.
Когда ваше приложение вызывало General Protection Fault (GPF, общее нарушение защиты, сегодня известное как Access Violation) в Windows 3.0, система показывала такой диалог об ошибке:
Когда ваше приложение вызывало General Protection Fault (GPF, общее нарушение защиты, сегодня известное как Access Violation) в Windows 3.0, система показывала такой диалог об ошибке:
суббота, 21 февраля 2015 г.
Почему у каждого диска есть свой собственный текущий каталог?
Это перевод Why does each drive have its own current directory? Автор: Реймонд Чен.
Комментатор Dean Earley спросил: "Почему есть 'текущий каталог' и 'текущий диск'? Почему бы их не объединить?"
Комментатор Dean Earley спросил: "Почему есть 'текущий каталог' и 'текущий диск'? Почему бы их не объединить?"
FPO
Это перевод FPO. Автор: Ларри Остерман.
На прошлой неделе я болтал с одним парнем из команды измерения производительности. Он мне рассказал историю, которая меня очень удивила. Как оказалось, они обнаружили проблему производительности в одном стороннем драйвере. К сожалению, у них возникли проблемы в локализации узкого места, поскольку разработчик драйвера скомпилировал его с FPO (Frame Pointer Ommission) и не предоставил отладочную информацию.
Что тут удивительного? Ну, я удивился что сегодня вообще кто-то использует FPO.
Но что такое FPO?
На прошлой неделе я болтал с одним парнем из команды измерения производительности. Он мне рассказал историю, которая меня очень удивила. Как оказалось, они обнаружили проблему производительности в одном стороннем драйвере. К сожалению, у них возникли проблемы в локализации узкого места, поскольку разработчик драйвера скомпилировал его с FPO (Frame Pointer Ommission) и не предоставил отладочную информацию.
Что тут удивительного? Ну, я удивился что сегодня вообще кто-то использует FPO.
Но что такое FPO?
вторник, 13 января 2015 г.
Что это за странные переменные окружения с =C:?
Это перевод What are these strange =C: environment variables? Автор: Реймонд Чен.
Вы не увидите их при выполнении команды
Вы не увидите их при выполнении команды
SET, но вы увидите их, если получите список переменных окружения сами, программным путём. К примеру, если вы напишете программу, которая получает список всех переменных окружения и выводит их на консоль, и запустите её из командной строки, то увидите странные переменные с именами вроде =C: и значениями, соответствующими каталогам на этих дисках. Что это такое?среда, 7 сентября 2011 г.
Как злоупотребляли оконными ловушками в Win16
Это перевод One way people abused hooks in 16-bit Windows. Автор: Реймонд Чен.
В прошлый раз мы увидели, как в 16-битных Windows реализуются оконные ловушки. Даже хотя значения
В прошлый раз мы увидели, как в 16-битных Windows реализуются оконные ловушки. Даже хотя значения
HHOOK являются не прозрачными типами данных ("чёрным ящиком"), с которыми нужно работать как с описателями, многие программы "знали слишком много, чтобы стать опасными" - и воспользовались тем фактом, что значения HHOOK были просто указателями на предыдущую процедуру ловушки.вторник, 6 сентября 2011 г.
Как были реализованы оконные ловушки в 16-битных Windows?
Это перевод How were window hooks implemented in 16-bit Windows? Автор: Реймонд Чен.
Механизм отслеживания оконных ловушек был реализован существенно иначе в 16-битных Windows.
Механизм отслеживания оконных ловушек был реализован существенно иначе в 16-битных Windows.
вторник, 30 августа 2011 г.
Как импортировались DLL функции в 16-битных Windows?
Это перевод How were DLL functions imported in 16-bit Windows? Автор: Реймонд Чен.
В прошлый раз я рассказал о том, как экспортировались функции в 16-битных Windows. Сегодня мы посмотрим на их импорт.
В прошлый раз я рассказал о том, как экспортировались функции в 16-битных Windows. Сегодня мы посмотрим на их импорт.
понедельник, 29 августа 2011 г.
Как экспортировались DLL функции в 16-битных Windows?
Это перевод How were DLL functions exported in 16-bit Windows? Автор: Реймонд Чен.
Весь смысл динамических библиотек (DLL) заключается в динамическом связывании. В то время как статические библиотеки встраиваются в конечный продукт, модуль, который использует динамическую библиотеку, просто говорит: "мне, пожалуйста, функцию X из модуля Y, спасибо". Эта техника имеет преимущества и недостатки. Одно из преимуществ - эффективное использование места на диске и в памяти, поскольку существует только одна копия модуля, вместо отдельных копий для каждого модуля. Второе преимущество - обновление DLL может быть выполнено без перекомпиляции всех программ, её использующих. С другой стороны, возможность менять функциональность также является и одним из недостатков DLL, поскольку одна программа может изменить DLL и вызвать этим каскадные эффекты в других клиентах DLL.
В любом случае, давайте начнём с того, как 16-битные Windows управляли импортом и экспортом. После этого мы посмотрим что было изменено при миграции на 32-битные Windows, а затем мы посмотрим на импорт с точки зрения компилятора.
Весь смысл динамических библиотек (DLL) заключается в динамическом связывании. В то время как статические библиотеки встраиваются в конечный продукт, модуль, который использует динамическую библиотеку, просто говорит: "мне, пожалуйста, функцию X из модуля Y, спасибо". Эта техника имеет преимущества и недостатки. Одно из преимуществ - эффективное использование места на диске и в памяти, поскольку существует только одна копия модуля, вместо отдельных копий для каждого модуля. Второе преимущество - обновление DLL может быть выполнено без перекомпиляции всех программ, её использующих. С другой стороны, возможность менять функциональность также является и одним из недостатков DLL, поскольку одна программа может изменить DLL и вызвать этим каскадные эффекты в других клиентах DLL.
В любом случае, давайте начнём с того, как 16-битные Windows управляли импортом и экспортом. После этого мы посмотрим что было изменено при миграции на 32-битные Windows, а затем мы посмотрим на импорт с точки зрения компилятора.
воскресенье, 14 августа 2011 г.
Забытые элементы управления: функция MenuHelp
Это перевод The forgotten common controls: The MenuHelp function. Автор: Реймонд Чен.
Функция
Функция
MenuHelp - это одна из самых запутывающих функций в библиотеке общих элементов управления. К счастью, вам почти никогда не придётся её использовать, и когда вы узнаете её историю - вы не захотите её использовать.понедельник, 21 февраля 2011 г.
среда, 2 февраля 2011 г.
Неудачное взаимодействие между LOAD_LIBRARY_AS_DATAFILE и функцией DialogBox
Это перевод The unfortunate interaction between LOAD_LIBRARY_AS_DATAFILE and DialogBox. Автор: Реймонд Чен.
Некоторые люди заметили, что если вы загружаете DLL с флагом
Некоторые люди заметили, что если вы загружаете DLL с флагом
LOAD_LIBRARY_AS_DATAFILE, то иногда вы получаете странное поведение, если передаёте этот HINSTANCE в функцию DialogBox.
Подписаться на:
Сообщения (Atom)