пятница, 31 декабря 2010 г.

Неправильный способ проверить, не поменяны ли кнопки мыши

Это перевод The wrong way to check whether the mouse buttons have been swapped. Автор: Реймонд Чен.

Когда-то давно во второй половине 90-х годов прошлого века команда менеджера окон получила баг, в котором говорилось, что иногда состояние мышиных кнопок приходит в хаос и компьютер ведёт себя как будто их заклинило. Дальнейшие исследования показали, что это происходит только если работает одна конкретная программа и только если пользователь левша (т.е. у него включена смена мест кнопок мыши).

четверг, 30 декабря 2010 г.

Последние замечания о LockWindowsUpdate

Это перевод Final remarks on LockWindowUpdate. Автор: Реймонд Чен.

Это завершающий пост в серии про LockWindowUpdate: Теперь, когда вы понимаете цель LockWindowUpdate, я расскажу вам, почему вы вообще не захотите использовать её - даже для её предполагаемой цели!

среда, 29 декабря 2010 г.

вторник, 28 декабря 2010 г.

понедельник, 27 декабря 2010 г.

Как предполагалось использовать LockWindowUpdate?

Это перевод How is LockWindowUpdate meant to be used? Автор: Реймонд Чен.

Теперь когда мы знаем, как работает LockWindowUpdate, мы можем посмотреть, для чего она предназначена.

воскресенье, 26 декабря 2010 г.

Что делает LockWindowUpdate?

Это перевод What does LockWindowUpdate do? Автор: Реймонд Чен.

Бедная LockWindowUpdate, которую никто не понимает.

Это первый пост в серии про LockWindowUpdate, то, что она делает, то, для чего она предназначена, и (возможно, самое важное) то, для чего она не предназначена.

суббота, 25 декабря 2010 г.

Что делает CS_SAVEBITS?

Это перевод What does CS_SAVEBITS do? Автор: Реймонд Чен.

Если вы указываете стиль класса CS_SAVEBITS, то оконный менеджер будет стараться сохранять биты, закрытые окном. Но настоящий вопрос здесь - почему. Т.к. ответ на этот вопрос позволит вам использовать эту силу для добра, а не зла.

четверг, 23 декабря 2010 г.

Как сделать приложение, которое будет работать как GUI и как консольное?

Это перевод How to make an application as both GUI and Console application? Автор: Junfeng Zhang.

Вот ещё один часто задаваемый вопрос. Но на этот раз это вопрос по Win32.

В Windows GUI и консольные приложения являются совершенно разными. У GUI приложений есть хотя бы одно окно и цикл выборки сообщений, но нет стандартных каналов ввода-вывода. У консольных приложений есть каналы ввода-вывода, но нет окна и цикла обработки сообщений. Приложение может быть либо GUI, либо консольным, но не обоими сразу.

Некоторые люди хотят, чтобы их приложение работало различным образом, в зависимости от входных данных. Если им задают параметр, то они работают как консольные, если не передают - то как GUI приложение.

Прямо как devenv (Visual Studio) и ildasm.

Как они это делают?

среда, 22 декабря 2010 г.

Как [то, что вызывают] общие элементы управления, конвертирует строки между ANSI и Unicode?

Это перевод How do[es what] the common controls [call ]convert between ANSI and Unicode? Автор: Майкл Каплан.

Ранее Реймонд Чен писал о том, Как общие элементы управления конвертируют строки между ANSI и Unicode?, отвечая на вопрос в его suggestion box:
В контексте ansi (не unicode) приложения: как общие элементы управления (к примеру, listview) решают, какую использовать кодовую страницу для перевода многобайтовых строк в widestring?

Мне пришлось отлаживать ansi приложение, которое показывало испорченные строки на системе с традиционным китайским, потому что шрифт диалога привёл к тому, что listview использовал иную кодовую страницу, нежели системную ACP, при переводи multibyte в widechar.
Хотя я редко, если вообще когда-нибудь, не соглашусь с чем-то, что исходит из лагеря команды Оболочки, конкретно в этом случае я знаю два конкретных исключения из правила CP_ACP, которое вы обычно видите, хотя эти отличия могут иметь мало общего с кодом Shell / comctl32, так что Реймонд может быть прав в своей области :-)

вторник, 21 декабря 2010 г.

Что это за волшебная настройка, которая синтезирует Unicode из не-Unicode?

Это перевод What is this magic setting that synthesizes Unicode from non-Unicode? Автор: Реймонд Чен.

Комментатор dan g. спросил как Windows может обращаться с не-Unicode приложениями как с Unicode приложениями через апплет Региональные и языковые настройки Панели управления (перевод поста), особенно в части, которая даёт вам выбрать язык для не-Unicode программ. "Я всегда считал, что единственным способом показывать, скажем, китайские символы будет компиляция программы в Unicode, но эта настройка, кажется, намного проще".

понедельник, 20 декабря 2010 г.

Почему CP_ACP не может быть UTF-8?

Это перевод Why can't the CP_ACP be UTF-8? Автор: Майкл Каплан.

Bart van der Werf спросил:
Я работаю над приложением с 8-битовыми строками, которое работает с несколькими языками. И я был удивлён, узнав, что ACP (кодовая страница ANSI) не может принять utf8 как допустимую MBCS кодировку.

Почему так? Разве это не позволило бы всевозможным старым приложениям как-то стать многоязычными за одну ночь?

воскресенье, 19 декабря 2010 г.

Может ли CP_ACP быть UTF-8?

Это перевод Can the CP_ACP be UTF-8? Автор: Майкл Каплан.

Только что Сергей спросил в Suggestion Box:
Привет, Майкл!

Разве не было бы здорово, если бы можно было установить UTF-8 в качестве мультибайтовой кодовой страницы в Windows? Что ты думаешь?
Ну, да, я думаю, что это было бы здорово :-)

суббота, 18 декабря 2010 г.

Может ли кодовая страница меняться? Как насчёт кодовой страницы, на которую указывает локаль?

Это перевод Can a codepage be changed? How about which codepage a locale points to? Автор: Майкл Каплан.

Ранее сегодня я рассмотрел вопрос, можно ли добавлять символы в Unicode, но Иван Петров также спрашивал, можно ли изменить кодовую страницу 1251, поскольку в ней пропущено 20 кирилических символов.

К сожалению, с этим ничего нельзя сделать по нескольким причинам.

пятница, 17 декабря 2010 г.

А я могу поместить свои символы в Unicode?

Это перевод Can I get my characters into Unicode? Автор: Майкл Каплан.

Когда-то Иван Петров указал:
...быть может НАИБОЛЬШАЯ проблема в отсутствии многих кирилических гласных букв с тупыми ударениями в Unicode и, соответственно, в кодовой странице ANSI 1251. В Unicode определены только 2+2=4 (CAPITAL и SMALL буквы с ударениями – #CYRILLIC CAPITAL LETTER IE WITH GRAVE, #CYRILLIC CAPITAL LETTER I WITH GRAVE, #CYRILLIC SMALL LETTER IE WITH GRAVE and #CYRILLIC SMALL LETTER I WITH GRAVE).

Полный список гласных в кирилице должен быть:

#CYRILLIC CAPITAL LETTER A WITH GRAVE
#CYRILLIC CAPITAL LETTER IE WITH GRAVE
#CYRILLIC CAPITAL LETTER I WITH GRAVE
#CYRILLIC CAPITAL LETTER O WITH GRAVE
#CYRILLIC CAPITAL LETTER U WITH GRAVE
#CYRILLIC CAPITAL LETTER HARD SIGN WITH GRAVE
#CYRILLIC CAPITAL LETTER YERU WITH GRAVE (только для русского языка)
#CYRILLIC CAPITAL LETTER E WITH GRAVE (только для русского языка)
#CYRILLIC CAPITAL LETTER YU WITH GRAVE
#CYRILLIC CAPITAL LETTER YA WITH GRAVE
#CYRILLIC SMALL LETTER A WITH GRAVE
#CYRILLIC SMALL LETTER IE WITH GRAVE
#CYRILLIC SMALL LETTER I WITH GRAVE
#CYRILLIC SMALL LETTER O WITH GRAVE
#CYRILLIC SMALL LETTER U WITH GRAVE
#CYRILLIC SMALL LETTER HARD SIGN WITH GRAVE
#CYRILLIC SMALL LETTER YERU WITH GRAVE (только для русского языка)
#CYRILLIC SMALL LETTER E WITH GRAVE (только для русского языка)
#CYRILLIC SMALL LETTER YU WITH GRAVE
#CYRILLIC SMALL LETTER YA WITH GRAVE

Так что мой третий вопрос:

“Что можно сделать с этой проблемой?”

См. для дальнейшей информации:
http://titus.uni-frankfurt.de/unicode/unicsel/unicself.htm#Cyrillic

четверг, 16 декабря 2010 г.

За Нормановским "Кому нужен этот Unicode?"

Это перевод Behind Norman's 'Who needs Unicode?' post. Автор: Майкл Каплан.

Постоянный участник Norman Diamond в своём обычном очаровательном стиле создал в microsoft.public.win32.programmer.international и microsoft.public.word.international такую тему:
На моём жёстком диске есть файл, путь к которому, вероятно, будет обрезан Outlook Express:
C:\Program Files\Windows CE Tools\wce500\Windows Mobile 5.0 Smartphone SDK\Samples\CPP\Win32\Mapirule\readme.txt
Среди полезных кусочков информации было найдено следующее:
> Client痴 transport (SMS, ActiveSync, POP3) arrives.
и:
> where <clsid> represents the COM object痴 class ID GUID
Это заслуживает награды за самоописание. Производитель таких вещей как ОС для смартфонов Windows Mobile 5.0, SDK для той же платформы и компиляторов снова для неё же, просто знал, что им не обязательно нужно использовать Unicode в документах, потому что кодовая страница ANSI прекрасно донесёт их сообщение. Кодовая страница ANSI, конечно же, - так, что используется Блокнотом на настольных системах Windows вроде XP, и по умолчанию равна кодовой странице 932. Слово 痴 вообще-то описывает процесс, который приводит к отображению слова 痴.

Можно задуматься, не мог бы производитель тонн документации по Unicode научиться пользоваться Блокнотом, чтобы он сохранял .txt файл в кодировке Unicode, так что документация могла бы предоставлять информацию, используя другие символы, нежели 痴. Определённая компания, которая известна своим 痴, могла бы иметь способность научить их. Но определённая компания, известная своим 痴, может не захотеть учиться у них.
Он умеет использовать слова (см. строку со спонсором этого поста - 痴 (U+75f4), если вы не знаете значения 痴 и хотите понять юмор Нормана!).

Здесь важно подняться над словами, чтобы увидеть о чём мы тут говорим :-)

среда, 15 декабря 2010 г.

Ничто не пахнет хуже локали потока, чем кодовая страница потока

Это перевод Nothing stinks worse than the thread locale, other than the thread code page. Автор: Майкл Каплан.

Вот кусок из письма, которое я получил от Ken:
Привет, Майкл.

Я встретился с чем-то, что, как я считаю, является багом в MultibyteToWideChar и WideCharToMultibyte, когда параметр кодовой страницы устанавливается в CP_THREAD_ACP, 'язык по-умолчанию для не-Unicode приложений' - установленный в иврит. Это видно, когда используется вспомогательный макрос из atlconv.h вроде T2WC.

Я создал простое тестовое приложение, которое показывает неожиданные результаты на некоторых системах. Кодовая страница от CP_THREAD_ACP получается не той же самой, что GetACP. Я воспроизвёл это на двух системах с ивритом, но не на системах, где стоит традиционный китайский - одна из которым имеет полностью локализированный в традиционном китайском UI. Исходник является частью консольного проекта .NET 2003 по умолчанию.
#include "stdafx.h"
#include <ostream>
int _tmain(int argc, _TCHAR* argv[])
{
    std::cout << "default code page is " << GetACP() << std::endl;
    std::cout << "_AtlGetConversionACP code page is " << ATL::_AtlGetConversionACP() << std::endl;

    CPINFOEX cpinfo = {};
    GetCPInfoEx(ATL::_AtlGetConversionACP(), 0, &cpinfo);

    std::cout << "Thread code page is " << cpinfo.CodePage << std::endl;
    return 0;
}
Мои результаты:
default code page is 1255
_AtlGetConversionACP code page is 3
Thread code page is 1252
Когда моё приложение вызывает T2WC, оно получает неверный результаты, а кодовые точки расширяются до 16-ти бит, но не конвертируются в кодовые точки иврита. Мы обходим это использованием _CONVERSION_DONT_USE_THREAD_LOCALE, но мне любопытно, сталкивался ли кто-то ещё с этой проблемой ранее.

Спасибо за потраченное на меня время,
Ken
Постоянные читатели могут вспомнить, почему я не люблю локаль потока.

(Фактически, меня не так давно попросили помочь вычистить несколько плохих случаев использования локали потока в различных частях Windows в shell32.dll и shlwapi.dll - наверное, скоро я за это засяду!)

вторник, 14 декабря 2010 г.

Почему я считаю, что локаль потока действительно воняет

Это перевод Why I think the thread locale really stinks. Автор: Майкл Каплан.

Я не люблю локаль потока (thread locale).

Да, GetThreadLocale и SetThreadLocale являются двумя из многих NLS функций, которыми владеет команда GIFT.

И да, если вы посмотрите на функции, которыми мы владеем, как если бы они были нашими детьми, то нам следовало бы любить их всех.

В таком случае я думаю, что из меня никудышный родитель (если вы помните, я также считаю, что SetLocaleInfo - тоже отстой).

понедельник, 13 декабря 2010 г.

SetLocaleInfo действительно плохо пахнет

Это перевод SetLocaleInfo really stinks. Автор: Майкл Каплан.

Да, я действительно это сказал. Функция SetLocaleInfo, которая появилась в NT 3.1 просто воняет.

Почему я так пренебрежительно говорю о функции, которая существует столько времени?

Ну, давайте начнём снаружи и двинемся вглубь...

воскресенье, 12 декабря 2010 г.

Как убедиться, что разработчики уважают выбор пользователя

Это перевод It is all about making sure developers respect the user's preferences. Автор: Майкл Каплан.

Эта тема, про которую я уже говорил ранее, так что в этот раз я дам ей немного иной поворот.

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

Я могу бесконечно говорить на тему использования NLS API функций для того, чтобы эта настройка реально учитывалась, и насчёт того, какая это отличная идея.

Но разработчики часто так не думают.

суббота, 11 декабря 2010 г.

CP_ACP против GetACP

Это перевод CP_ACP vs. GetACP. Автор: Майкл Каплан.

Несколько дней назад PEK спросил в newsgroups насчёт WideCharToMultiByte и MultiByteToWideChar:
Я несколько смущён первым параметром в MultiBytToWideChar. Он говорит какую использовать кодовую страницу. Вы можете использовать значение CP_ACP ("кодовая страница ANSI"), но что оно означает? Это значение, возвращаемое GetACP или это просто кодовая страница 1252?

Я хочу знать, одинаковые ли результаты дают вызовы:
MultiByteToWideChar(CP_ACP, ...)
и:
MultiByteToWideChar(GetACP, ...)
Ответ: они действительно действуют одинаково. Первый способ - это константа, которая говорит: "меня не волнует, какая сейчас у системы кодовая страница - просто используй её". А второй способ сначала спрашивает "какая у системы кодовая страница по умолчанию?".

Естественный вопрос: почему есть два способа добиться одного и того же. И какой из них будет быстрее - кэширование GetACP, либо передача CP_ACP?

пятница, 10 декабря 2010 г.

За "Как сломать Блокнот"

Это перевод Behind 'How to break Windows Notepad'. Автор: Майкл Каплан.

Ларри Остерман указал мне на статью, названную "Как сломать Блокнот Windows", которая проводит такой эксперимент:
Вот как это сделать:
  1. Откройте Блокнот (не Wordpad, не Word и не любой другой текстовый редактор)
  2. Впечатайте в точности это предложение (без кавычек): "this app can break" (перевод: "это приложение может сломаться").
  3. Сохраните файл.
  4. Закройте Блокнот.
  5. Откройте сохранённый файл двойным щелчком.
Вместо вашего предложения вы увидите набор квадратиков. По какой-то причине Блокнот не может понять что делать с этой последовательностью символов и ломается.

четверг, 9 декабря 2010 г.

Регулярный мусор в тексте может быть неверной кодовой страницей

Это перевод Consistent garbage text can be incorrect encoding identification (or detection). Автор: Майкл Каплан.

Mushy спросил в Suggestion Box:
Майкл,

Быть может у тебя есть старый пост, который объясняет следующую ситуацию. Если да - то ткни меня в него. Вот в чём проблема. Если ты посмотришь на мой блог, то увидишь как некоторые символы кавычек показываются как ’ вместо ". Когда я сначала публикую материал, их там нет. Как от них избавиться? Вызвано ли это использованием форматов Word, .doc, .txt, .rtf? Что лучше подходит?

P.S. Мне понравился твой блог и я занёс его в закладки.

Thanks,
Mushy
(Для тех, кто заинтересовался, блог Mushy - это Cross+Hairs)

Некоторые люди могут быть знакомы с байтовыми последовательностями; если вы с ними знакомы, то вы - гик :-)

среда, 8 декабря 2010 г.

Почему я не люблю API функцию IsTextUnicode

Это перевод Why I don't like the IsTextUnicode API. Автор: Майкл Каплан.

API функция IsTextUnicode существовала со времён NT 3.5, если верить истории в Platform SDK. Согласно PSDK, её цель такова:
Функция IsTextUnicode определяет, возможно ли, что буфер содержит какую-то форму Unicode текста. Функция использует различные статистические и детерминированные методы для вынесения своего решения, что также контролируется указываемыми флагами. Когда функция возвращает управление, результаты тестов сообщаются через параметр lpi.
Затем документация описывает различные тесты, которые может делать функция, когда вы указываете соответствующий флаг:
IS_TEXT_UNICODE_ASCII16
Текст Unicode и содержит только ASCII символы (расширенные нулём).
IS_TEXT_UNICODE_REVERSE_ASCII16
То же, что и предыдущий, но только с обратным порядком байт.
IS_TEXT_UNICODE_STATISTICS
Текст, вероятно, является Unicode, что определено статистическим анализом. Абсолютная уверенность не гарантируется.
IS_TEXT_UNICODE_REVERSE_STATISTICS
То же, что и предыдущий, но только с обратным порядком байт.
IS_TEXT_UNICODE_CONTROLS
Текст содержит Unicode представления одного или более из следующих непечатных символов: RETURN, LINEFEED, SPACE, CJK_SPACE, TAB.
IS_TEXT_UNICODE_REVERSE_CONTROLS
То же, что и предыдущий, но только с обратным порядком байт.
IS_TEXT_UNICODE_BUFFER_TOO_SMALL
В тексте слишком мало символов для анализа (менее двух байт).
IS_TEXT_UNICODE_SIGNATURE
Текст содержит отметку byte-order (BOM) Unicode ($FEFF).
IS_TEXT_UNICODE_REVERSE_SIGNATURE
Текст содержит отметку byte-order (BOM) Unicode с обратным порядком байт ($FFFE).
IS_TEXT_UNICODE_ILLEGAL_CHARS
Текст содержит один из следующих недопустимых в Unicode символов: встроенный Reverse BOM, UNICODE_NUL, CRLF (упакованный в один WORD) или $FFFF.
IS_TEXT_UNICODE_ODD_LENGTH
Число символом в строке нечётно. Строка с нечётной байтовой длиной не может быть Unicode строкой по определению.
IS_TEXT_UNICODE_NULL_BYTES
Текст содержит нулевые байты, что указывает на не-ASCII текст.
IS_TEXT_UNICODE_UNICODE_MASK
Этот флаг является комбинацией IS_TEXT_UNICODE_ASCII16, IS_TEXT_UNICODE_STATISTICS, IS_TEXT_UNICODE_CONTROLS и IS_TEXT_UNICODE_SIGNATURE.
IS_TEXT_UNICODE_REVERSE_MASK
Этот флаг является комбинацией IS_TEXT_UNICODE_REVERSE_ASCII16, IS_TEXT_UNICODE_REVERSE_STATISTICS, IS_TEXT_UNICODE_REVERSE_CONTROLS и IS_TEXT_UNICODE_REVERSE_SIGNATURE.
IS_TEXT_UNICODE_NOT_UNICODE_MASK
Этот флаг является комбинацией IS_TEXT_UNICODE_ILLEGAL_CHARS, IS_TEXT_UNICODE_ODD_LENGTH и ещё двух не используемых сегодня битовых полей.
IS_TEXT_UNICODE_NOT_ASCII_MASK
Этот флаг является комбинацией IS_TEXT_UNICODE_NULL_BYTES и трёх не используемых сегодня битовых полей.
Вроде звучит впечатляюще и интересно, не так ли?

вторник, 7 декабря 2010 г.

Львы, тигры и медведиЛОСИ - о, боже!

Это перевод Lions and tigers and bearsELKs, Oh my! Автор: Майкл Каплан.

Осенью 2004 Cathy Wissink и я были в San Jose на встрече технического комитета Unicode (проводимой в Apple) вместе с 20+ моих коллег, работающих с интернационализацией, из различных компаний. В один вечер у нас была речь на встрече IMUG (International Multilingual User's Group), которая была расширенным вариантом выступления до этого на предыдущих конференциях по интернационализации, Unicode и конференции Microsoft по глобализации. Всё стало ближе к выпуску, так что больше можно было сказать, а поскольку нам выделили больше времени, нам определённо можно было рассказать больше.

Название выступления? "Windows для остального мира - модификация Windows для новых рынков". Этот пост будет содержать несколько слайдов с этого выступления :-)

понедельник, 6 декабря 2010 г.

Ещё один налог для отсутствия поддержки Unicode?

Это перевод Yet another cost to not supporting Unicode? Автор: Майкл Каплан.

Очень трудно печатать, когда у тебя растяжение плеча. Слава богу, есть Dragon Dictate! Это я просто так...

Alex спросил меня в Suggestion Box:
Привет, Майкл.

Я погуглил по твоему блогу, но не нашёл ответа на такой вопрос. Этот вопрос довольно популярен (по крайней мере, в России), и я был удивлён, что ты его ещё не покрыл. Так что, быть может, ты расскажешь историю за этим вопросом. Это вопрос про буфер обмена, текст и не Unicode приложения.

Возьми старое не Unicode приложение (вроде блокнота из Win9x) и запусти его на новых Windows (вроде XP), которая имеет два установленных языка (скажем, английский и русский). Предположим, что "Язык для не Unicode приложений" установлен в "Русский".

В Win9x ты мог без проблем скопировать текст через буфер обмена из любого приложения в любое другое. Конечно, старые приложения не заботились об установке CF_LOCALE вместе с CF_TEXT, но всё работало довольно прилично, поскольку приложениями использовалась одна и та же кодовая страница (ладно: почти всеми).

Теперь, возьми современную, "юникодную" ОС, вроде XP. Ты берёшь своё старое приложение, которое верой и правдой служило тебе много лет, копируешь текст в буфер и вставляешь в другое приложение (скажем, блокнот из Windows XP) и... ух ты: ты получаешь вопросительные знаки или белиберду. Что не так? Чёрт, ты забыл переключить клавиатуру на "Русский". Как только ты это сделаешь - всё начнёт работать нормально.


Верхний ряд: слева - блокнот из Win98, справа - блокнот из XP. Нижний ряд: слева - блокнот из XP, справа - из Win98. Текущий язык стоит в "English (United states)" (ну, т.е. мы не переключили на русский). Красные линии указывают операцию копирования текста через буфер обмена (я специально взял два приложения от Microsoft, чтобы указать, что это не баг в каком-то конректном стороннем приложении).

Проблема (как я её вижу) заключается в получении Unicode-текста из ANSI-текста. Почему Windows использует для этого метод ввода, а не "Язык для не Unicode приложений"?

Это ужасное нарушение в опыте использования. Большинство людей считают, что это баг. Я очень часто слышу эту жалобу (чёрт, да я слышу проклятия Microsoft почти всегда в таких случаях). Особенно тяжело объяснить, что это не баг в твоём приложении, написанном много лет назад - оно не виновато.

Не мог бы ты пролить немного света на эту проблему? Почему Microsoft решила (ладно, не сломать, но) усложнить жизнь базилионам существующих приложений? Если Microsoft так заботится об обратной совместимости, то почему было сделано такое решение?
Это звучит очень знакомо.

суббота, 4 декабря 2010 г.

Двойное тайное ANSI, часть 2 (самая кривая часть, извините!)

Это перевод Double Secret ANSI, part 2 (the brokenest one yet, sorry 'bout that!). Автор: Майкл Каплан.

Итак, когда я первый раз написал о двойном тайном ANSI, я был лишь немного удивлён, когда увидел, что постоянный читатель Mihai знал, к чему я веду...

(Mihai работает на компанию, которая разрабатывает некоторые из таких приложений с поддержкой двойного тайного ANSI, о которых я говорил!)

Видите-ли, мы вроде как сломали некоторые из таких приложений в Vista.

пятница, 3 декабря 2010 г.

В Windows Vista некоторые клавиатуры не работают с ANSI приложениями

Это перевод Some Keyboards fail with ANSI applications on Windows Vista RTM. Автор: Shawn Steele.

В Windows Vista произошёл пренеприятнейший баг, который привёл к неработоспособности некоторых клавиатурных раскладок в ANSI приложениях. Это удивительно (в печальном смысле этого слова), потому что этот баг умудрился пройти через дюжину тестов, которые мы делаем, чтобы такие вещи не происходили.

четверг, 2 декабря 2010 г.

Это НЕ TFontSignature, чёрт возьми!

Это перевод It isn't a FONTSIGNATURE, darn it! Автор: Майкл Каплан.

Я храню старые варианты Platform SDK.

Это занимает некоторое место, но также позволяет мне заглянуть назад во времени в документацию, так что я могу увидеть, откуда пошла та или иная ошибка. А также это замедляет меня от осуждения людей, которые ошибаются :-)

среда, 1 декабря 2010 г.

Путаница в параметрах №2а

Это перевод Parameter confusion #2a. Автор: Майкл Каплан.

Ранее я говорил о путанице в параметрах к функции LCMapString, когда вы используете её для создания ключей сортировки, а также о путанице в параметрах к GetLocaleInfo, когда она возвращала числа.

Возможно, это просто так кажется.