Манипулирование строками и преобразование наборов символов, страница 5

потому что она не воспринимает региональные установки и символы со знаком ударения,  имеющие те же коды. А вот функция CompareString выполняет сравнение правильно. Полученные результаты  показаны  на рис. 22.6.

CM.   \local-sources\chap22\22-05. txt

Пример

В приведенном ниже примере демонстрируется различная степень точности сравнения строк. В первом случае применяется функция Istrcmp и, разумеется, она завершается неудачно, поскольку в этой функции учитывается регистр. Во втором случае применяется функция Istrcmpi, которая также терпит неудачу, но не потому, что в ней не учитывается регистр, а

Таблица 22.3. Значения параметра dwStyle функции CompareString

Разновидность операции сравнения

Описание

NORMJGNORECASE

Игнорировать регистр

NORMJGNOREKANATYPE

Сравнивать сходным образом соответствующие строки, записанные в двух вариантах японского письма: катакана-(используется главным образом для новых заимствованных слов) и хирагана (используется в основном для собственных японских слов)

NORM IGNORENONSPASE

Игнорировать несамостоятельные символы

NORMJGNORESYMBOLS

Игнорировать знаки

NORM JGNOREWIDTH

Игнорировать отличия в ширине символов, выражаемой в байтах

NORM_STRINGSORT

Трактовать знаки препинания как символы

CovertDefaultLocale                     Windows 98   • Windows 2000

Описание

Функция CovertDefaultLocale преобразует специальное значение региональной установки по умолчанию в идентификатор конкретной региональной установки. Вызов функции CovertDefaultLocale (LOCALE_SYSTEM_DEFAULT) равнозначен вызову функции GetSystem-DefaultLCID. Аналогично, вызов рассматриваемой функции со значением LOCALE USER DEFAULT равнозначен вызову функции GetUserDefault-LCID.

Синтаксис

LCID CovertDefaultLocale(LCID Locale)

Параметры

Locale

LCID: Специальное значение региональной установки по умолчанию, которое рассматриваемая функция преобразует в идентификатор конкретной региональной установки.   Это значение может быть установлено равным LOCALE_SYSTEM_DEFAULT для региональной установки, используемой в системе по умолчанию, LOCALE_USER_DEFAULT для региональной установки, принятой пользователем по умолчанию, 0 для независимой от языка региональной установки, используемой по умолчанию, либо значение любой используемой по умолчанию региональной установки, которая не зависит от подъязыка и создается через вызов макрокоманды MAKELCID со значением основного языка и значением SUBLANG_NEUTRAL.

Возвращаемое значение

LCID: Если выполнение рассматриваемой функции оказывается успешным, возвращается соответствующий указатель конкретной региональной установки. В противном случае возвращается значение параметра Locale.

Включаемый файл

winnls.h

См. также

GetSystemDefaultLCID, GetUserDefaultLCID.

EnumCalendarlnfo                      Windows 98   • Windows 2000

Описание

Функция EnumCalendarlnfo перечисляет календарную информацию для данной региональной установки. Эта функция возвращает информацию, применяемую во всех календарях, подходящих для данной региональной установки, в зависимости от значения параметра Calendar. Календарная информация перечисляется благодаря вызову определенной функции обратного вызова. В функцию обратного вызова передается указатель на буфер, содержащий строку запрашиваемой календарной информации. Этот процесс продолжается до тех пор, пока не будет найден подходящий  календарь.  В  противном случае функция  обратного вызова возвращает FALSE.

Синтаксис

BOOL EnumCalendarlnfo (CALINFO_ENUMPROC IpCalllnfoEnumProc, LCID Locale, CALID Calendar, CALTYPE CalType)

Параметры

lp CalllnfoEnumProcbt

CALINFO_ENUMPROC: Указатель на определяемую приложением функцию обратного вызова. Синтаксис функции обратного вызова приводится ниже.

Locale

LCID: Региональная установка, для которой выбирается календарная информация. Этот параметр может принимать значение идентификатора региональной установки, созданной с помощью макрокоманды MAKELCID, значение LOCALE_SYSTEM_DEFAULT региональной установки, используемой в системе по умолчанию, либо значение LOCALE_USER_DEFAULT региональной установки, принятой пользователем по умолчанию.

Calendar

CALID: Календарь, для которого запрашивается информация. Этот параметр может принимать одно из значений, перечисленных в табл. 22.4.

CalType

CALTYPE: Тип возвращаемой календарной информации. Одновременно приложение может запросить только один тип подобной информации. Доступные константы типа CALTYPE сведены в табл. 22.5.

Возвращаемое значение

BOOL: Если выполнение рассматриваемой функции оказывается успешным, возвращается значение TRUE. В противном случае возвращается FALSE. Расширенный код ошибки выбирается с помощью функции GetLastError, которая может вернуть следующие значения: ERROR_BADDB, ERROR_INVALID_FLAGS или ERROR_INVALID_PARAMETER

Включаемый файл

winnls.h

См. также

EnumDateFormats.

Синтаксис обратного вызова

BOOL CALLBACK EnumCalendarInfoProc(LPSTR IpCalendarlnfoString)

Параметры обратного вызова

lpCalendar Info String

LPSTR: Указатель на буфер со строкой, завершающейся нулевым символом и содержащей календарную информацию. Эта строка отформатирована в соответствии со значением CALTYPE, которое передается в функцию EnumCalendarlnfo.

Значение, возвращаемое при обратном вызове

BOOL: Для продолжения перечисления возвращается значение TRUE. В противном случае возвращается FALSE и перечисление завершается.

Таблица 22.4. Значения параметра Calendar функции EnumCalendarlnfo

Значение

Что означает

ENUM_ALL_CALENDARS

Перечисление всех календарей, подходящих для региональной установки, определяемой параметром Calendar

1

Григорианский календарь (локализованный вариант)

2

Григорианский календарь (английский вариант)

3

Японский календарь (японская эра)

4

Китайский календарь (год республики в КНР)

5

Корейский календарь (эра тангун)

Таблица 22.5. Константы типа CALTYPE

Наименование константы

Значение

CALJCAUNTVALUE

Целое значение, указывающее тип альтернативного календаря

CALJTWODKHTYEARMAX

Целое значение, указывающее верхнюю границу диапазона лет, состоящего из двух цифр

CAL_SCALNAME

Местное название альтернативного календаря

CALJYEAROFFSETRANGE

Последовательность строк, разделенных пустыми символами и содержащих годовые смещения в пределах изменения каждой эры

CAL_SERASTRING

Последовательность строк, разделенных пустыми символами и содержащих каждую позицию кода Unicode, определяющую эру, связанную с конкретным значением константы CALJYEAROFFSETRANGE

CAL SSHORTDATE

Короткие форматы дат, пригодные для данного типа календаря

CAL_SLONGDATE

Длинные форматы дат, пригодные для данного типа календаря

CAL_SYEARMONTH

Перечисление всех форматов типа "год/месяц" для указанных календарей

CAL_SDAYNAME1-7

Местные названия дней недели. Если эти значения оказываются пустыми, тогда названия дней недели для данного календаря аналогичны названиям, содержащимся в соответствующей переменной типа  LCType

CAL_SABBREVDAYNAME1 -7

Местные сокращенные названия дней недели. Если эти значения оказываются пустыми, тогда названия дней недели для данного календаря аналогичны названиям, содержащимся в соответствующей переменной типа  LCType

Наименование константы

Значение

CAL_SMONTHNAME 1-13

Местные названия месяцев. Если эти значения оказываются пустыми, тогда названия месяцев для данного календаря аналогичны названиям, содержащимся в соответствующей переменной типа LCType

CAL_SABBREVMONTHNAME1-13

Местные сокращенные названия месяцев. Если эти значения оказываются пустыми, тогда названия месяцев для данного календаря аналогичны названиям, содержащимся в соответствующей переменной типа LCType

EnumDateFormats                       Windows 98   • Windows 2000

Описание

Функция EnumDateFormats перечисляет длинные или короткие форматы дат, которые имеются для указанной региональной установки, в том числе и форматы дат, предназначенных для любых альтернативных календарей. Эта функция перечисляет форматы дат, по очереди передавая указатели на них в функцию обратного вызова, определяемую приложением. Процесс продолжается до тех пор, пока не будет найден последний формат даты. В противном случае функция обратного вызова возвращает FALSE.

Синтаксис

BOOL EnumDateFormats(DATEFMT_ENUMPROC IpDateFmtEnumProc, LCID Locale, DWORD dwFlags)

Параметры

IpDateFmtEnumProc

DATEFMT_ENUMPROC: Указатель на функцию обратного вызова, определяемую приложением. Функция EnumDateFormats перечисляет форматы дат, выполняя множественные обращения к функции обратного вызова. Синтаксис функции обратного вызова приводится ниже.

Locale

LCID: Региональная установка, для которой выбирается информация о форматах дат. Этот параметр может принимать значение идентификатора региональной установки, созданного с помощью макрокоманды MAKELCID, значение   LOCALE_SYSTEM_DEFAULT региональной установки, используемой в системе по умолчанию, либо значение LOCALE_USER_DEFAULT региональной установки, принятой пользователем по умолчанию.

dwFlags

DWORD: Перечисляемые форматы дат. Для перечисления коротких форматов дат потребуется установить значение DATE_SHORTDATE данного параметра, а для возврата длинных дат — значение DATE_LONGDATE.

Возвращаемое значение

BOOL: Если выполнение рассматриваемой функции оказывается успешным, возвращается значение TRUE. В противном случае возвращается FALSE. Расширенный код ошибки выбирается с использованием функции Get-LastError, которая может возвращать следующие значения: ERROR_BADDB, ERROR_INVALID_FLAGS или ERROR_INVAUD_PARAMETER

Включаемый файл

winnls.h

См. также

EnumCalendarlnfo, EnuniTimeFormats.

Синтаксис обратного вызова

BOOL CALLBACK EnumDateFormatsProc(LPSTR IpDateFormatString)

Параметры обратного вызова

IpDateFormatString

LPSTR: Указатель на буфер со строкой, завершающейся нулевым символом и содержащей формат даты. Эта строка содержит формат длинной или короткой даты в зависимости от значения параметра dwFlags, которое передается в EnumDateForniats.

Значение, возвращаемое при обратном вызове

BOOL: Для продолжения перечисления возвращается значение TRUE. В противном случае возвращается FALSE и перечисление завершается.

EnumSystemCodePaqes                Windows 98   • Windows 2000

Описание

Функция EnumSystemCodePages перечисляет кодовые страницы, которые установлены или поддерживаются в системе. Перечисление осуществляется путем передачи по очереди идентификаторов кодовых страниц в определенную функцию обратного вызова. Этот процесс продолжается до тех пор, пока в функцию обратного вызова не будут переданы идентификаторы всех кодовых страниц, установленных или поддерживаемых в системе. В противном случае возвращается значение FALSE.

Синтаксис

BOOL EnumSystemCodePages(CODEPAGE_ENUMPROC IpCodePageEnumProc, DWORD dwFlags)

Параметры

lpCodePageEnumProc

CODEPAGE_ENUMPROC: Указатель на функцию обратного вызова, которая определяется приложением и принимает в параметре номер кодовой страницы. Синтаксис функции обратного вызова приводится ниже

dwFlags

DWORD: Значение CP_INSTALLED этого параметра позволяет перечислить  все  установленные  в  системе   кодовые  страницы,   а  значение CP_SUPPORTED — все поддерживаемые в системе кодовые страницы.

Возвращаемое значение

BOOL: Если выполнение рассматриваемой функции оказывается успешным, возвращается значение TRUE. В противном случае возвращается FALSE. Расширенный   код  ошибки   выбирается   с   использованием   функции GetLastError, которая возвращает следующие значения: ERROR BADDB, ERRORJNVALID_FLAGS и ERROR_INVALID_PARAMETER

Включаемый файл

winnls.h

См. также

EnumSystemLocales, GetCPInfo.

Синтаксис обратного вызова

BOOL CALLBACK EnumSystemCodePagesProc(LPSTR IpCodePageString)

Параметры обратного вызова

lp CodePageString

LPSTR: Указатель на буфер со строкой, завершающейся нулевым символом и содержащей идентификатор кодовой страницы.

Значение, возвращаемое при обратном вызове

BOOL: Для продолжения перечисления возвращается значение TRUE. В противном случае возвращается FALSE и перечисление завершается.

Пример

Всякий раз когда пользователь выбирает в приведенном ниже примере пункт меню Test!, перечисляются все кодовые страницы, установленные

в системе. Для каждой кодовой страницы выводится окно с поясняющим сообщением.

См.    \local-sources\chap22\22-06. txt

EnumSystemLocales                    Windows 98   • Windows 2000

Описание

Функция EnumSystemLocales перечисляет региональные установки, которые поддерживаются в системе. Эта функция перечисляет региональные установки, передавая по очереди их идентификаторы в функцию обратного вызова, определяемую приложением. Процесс продолжается до тех пор, пока в функцию обратного вызова не будут переданы идентификаторы всех региональных установок, поддерживаемых в системе. В противном случае возвращается значение FALSE.

Синтаксис

BOOL EmimSystemLocaIes(LOCALE_ENUMPROC IpLocaleEnumProc, DWORD dwFlags)

Параметры

IpLocaleEnumProc

LOCALE_ENUMPROC: Указатель на функцию обратного вызова, которая определяется приложением и принимает в параметре номер региональной установки. Синтаксис функции обратного вызова приводится ниже

dwFlags

DWORD: Значение LID_INSTALLED этого параметра позволяет перечислить все введенные в системе региональные установки, а значение LCID_ALTERNATE_SORTS — только альтернативные виды региональных установок.

Возвращаемое значение

BOOL: Если выполнение рассматриваемой функции оказывается успешным, возвращается значение TRUE. В противном случае возвращается FALSE. Расширенный код ошибки выбирается с помощью функции GetLastError, которая возвращает следующие значения: ERROR_BADDB, ERROR_INVALID_FLAGS и ERROR_INVALID_PARAMETER

Включаемый файл

winnls.h

См. также

EnumSystemCodePages, GetCPInfo.

Синтаксис обратного вызова

BOOL CALLBACK EnumSystemLocalesProc(LPSTR IpLocaleString)

Параметры обратного вызова

IpLocaleString

LPSTR: Указатель на буфер со строкой, завершающейся нулевым символом и содержащей идентификатор региональной установки.

Значение, возвращаемое при обратном вызове

BOOL: Для продолжения перечисления возвращается значение TRUE. В противном случае возвращается FALSE и перечисление завершается.

Пример

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

См.    \local-sources\chap22\22-07. txt

EnumTimeFormats                        4 Windows 98   * Windows 2000

Описание

Функция EnumTimeFormats перечисляет форматы времени, доступные для указанной региональной установки. Эта функция перечисляет форматы

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

Синтакси

BOOL EnumTimeFormats(TIMEFMT_ENUMPROC IpTimeFmtEnumProc, LCID Locale, DWORD dwFlags)

Параметры

IpTimeFrntEnMrnProc

TIMEFMT_ENUMPROC: Указатель на функцию обратного вызова, определяемую приложением. Синтаксис функции обратного вызова приводится ниже.

Locale

LCID: Региональная установка, для которой выбирается информация о формате времени. Этот параметр может принимать значение идентификатора региональной установки, созданной с помощью макрокоманды MAKELCID, значение LOCALE_SYSTEM_DEFAULT региональной установки, используемой в системе по умолчанию, либо значение LOCALE_USER_DEFAULT региональной установки, принятой пользователем по умолчанию.

dw flags

DWORD: Чтобы воспользоваться кодовой страницей ANSI вместо кодовой страницы региональной установки для преобразования строк, потребуется установить значение LOCALE_USE_CP_ACP данного параметра.

Возвращаемое значение

BOOL: Если выполнение рассматриваемой функции оказывается успешным, возвращается значение TRUE. В противном случае возвращается FALSE. Расширенный код ошибки выбирается с помощью функции GetLastError, которая может возвращать следующие значения: ERROR BADDB, ERROR INVALID FLAGS и ERROR_INVALID_PARAMETER

Включаемый файл

winnls.h

См. также

EnumCalendarlnfo, EnumDateFormats.

Синтаксис обратного вызова BOOL CALLBACK EnumTimeFormatsProc(LPSTR IpTimeFormatString)

Параметры обра lp TimeFormatStn

iTHoro вызова ing

LPSTR: Указатель на буфер со строкой, завершающейся нулевым символом и содержащей формат времени.

Значение, возвращаемое при обратном вызове

BOOL: Для продолжения перечисления возвращается значение TRUE В противном случае возвращается FALSE и перечисление завершается.

FoldString                               Windows 98   • Windows 2000

Описание

Функция FoldString отображает одну строку в другую, выполняя указанный вид преобразования.

Синтаксис

int FoldString(DWORD dwMapFlags, LPCTSTR IpSrcStr, int cchSrc, LPTSTR IpDestStr, int cchDest)

Параметры

dwMapFlags

DWORD: Набор флагов, которые обозначают вид преобразования, используемого при отображении строк. Этот параметр может принимать определенное сочетание значений из табл. 22.6.

IpSrcStr

LPCTSTR: Указатель на преобразуемую строку.

cchSrc

int: Размер буфера IpSrcStr в символах. Если для данного параметра установлено значение -1, предполагается, что строка в буфере IpSrcStr завершается нулевым символом и ее длина вычисляется автоматически.

IpDestStr

LPTSTR: Указатель на буфер, в который записывается преобразованная строка.

cchDesI

int: Размер буфера IpDestStr в символах. Если для данного параметра установлено значение 0, функция возвращает количество символов, которое требуется для сохранения в буфере преобразованной строки.

Возвращаемое значение

int: Если выполнение рассматриваемой функции оказывается успешным, возвращается количество символов, записанных в буфер назначения. Если же установлено значение 0 параметра IpDestStr, возвращается количество символов, которое требуется для сохранения в буфере преобразованной строки. Если данная функция не может быть выполнена, возвращается 0, причем  расширенный  код ошибки  можно получить через функцию GetLastError.

Включаемый файл

winnls.h

См. также

CompareString, LCMapString.

Таблица 22.6. Значения параметра dwMapFlags функции FoldString

Значение

Что означает

MAP_COMPOSITE

Преобразует символы с ударениями в составные символы, в которых знак ударения и основной символ представлены значениями двух отдельных символов. Это значение нельзя использовать вместе с MAP_PRECOMPOSED

MAP_EXPAND LIGATURES

Расширяет все символы лигатуры таким образом, чтобы каждый из них был представлен двумя эквивалентными соединенными символами

MAP_FOLDCZONE

Сводит символы зоны совместимости к их Unicode-эквивалентам

MAP_FOLDDIGITS

Преобразует все цифры в символы 0—9 в коде   Unicode

MAP_PRECOMPOSED

Преобразует символы с ударением в предварительно скомпонованные символы, в которых знак ударения и основной символ представлены значениями двух отдельных символов. Это значение нельзя использовать вместе со значением MAP_COMPOSITE

FormatMessaqe                         + Windows 98   * Windows 2000

Описание

Функция FormatMessage форматирует строку сообщения, используя определение сообщения. Функция копирует отформатированный текст сообщения в выходной буфер, обрабатывая при соответствующем запросе любые встроенные последовательности. В качестве входных данных требуется определение сообщения. Это определение может быть представлено в виде

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

Синтаксис

DWORD FormatMessage(DWORD dwFlags, LPCVOID IpSource, DWORD dwMessagelD, DWORD dwLanguageJd, LPTSTR IpBuffer, DWORD nSize, va_list* Arguments)

Параметры

dwFlags

DWORD: Набор битовых флагов, которые определяют различные аспекты процесса форматирования, а также способ интерпретации параметра IpSource. Младший байт параметра dwFlags определяет, каким образом данная функция обрабатывает разрывы строк в выходном буфере. Кроме того, этот параметр позволяет указать максимальную длину отформатированной выходной строки. Так, для установки и выборки максимальной длины указанной строки следует использовать константу FORMAT_MESSAGE_MAX_WIDTH_MASK и поразрядные логические операции. Если значение младшего байта не равно нулю и отлично от значения FORMAT JVIESSAGEJVIAX_WIDTH_MASK, тогда длина сообщения ограничивается указанным числом символов, причем данная функция игнорирует обычные разрывы строк в сообщении. Если же оно равно значению FORMAT_MESSAGE_MAX_WIDTH_MASK, функция игнорирует обычные разрывы строк в тексте определения сообщения. Действительные битовые флаги перечислены в табл. 22.7.

IpSource

LPCVOID: Указатель на строку, завершающуюся нулевым символом и содержащую определение сообщения, если при этом указан флаг FORMAT_MESSAGE_FROM_STRING. Если же указан флаг FORMAT_MESSAGE_FROM_HMODULE, параметр IpSource определяет имя модуля, содержащего табличный ресурс для поиска определения сообщения, либо текущий процесс, если задано значение NULL.

dwMessagelD

DWORD: 32-разрядный идентификатор определения сообщения, отыскиваемого в системном ресурсе сообщений.

dw Language Id

DWORD: Идентификатор языка, который определяет ресурс сообщений, а также то, каким образом производятся соответствующие замены.

IpBuffer

LPTSTR: Выходной буфер либо указатель на место хранения буфера, который выделяется системой с помощью функции GlobalAlloc, если указан признак FORMAT_MESSAGE_ALLOCATE_BUFFER По завершении вывода сообщения вызывающая программа должна освободить память, выделенную под данный буфер.

nSize

DWORD: Число символов, записываемых в выходной буфер, либо минимальный размер выделяемого буфера, если указан признак FORMAT_MESSAGE_ALLOCATE_BUFFER

Arguments

vajist*: Список аргументов форматирования. Это может быть указатель va_args или массив 32-разрядных значений (если при этом используется признак    FORMAT_MESSAGE_ARGUMENT_ARRAY). Коды  формата %1, %2 и т.д. означают первый аргумент, второй аргумент и т.д. Доступные параметры форматирования, которые могут появляться в строке формата, перечислены в табл. 22.8.