Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Visual C++ - расширенное программирование 'Функции работы со строками (заключение)'


Информационный Канал Subscribe.Ru

Visual C++ - расширенное программирование

Выпуск      : 16
Подписчиков : 5520
Cайт        : SoftMaker.com.ru
Архив       : Visual C++ - расширенное программирование (архив)
В этом выпуске
От автора

Здравствуйте уважаемые подписчики !

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

И, как всегда, вы можете задать свои вопросы по программированию на сайте в форуме.
Или обсудить их в дискуссионном листе "Программирование. форум !!!".

Многим может быть также интересна рассылка: C/C++ Вопрос-Ответ, содержимое которой формируется из писем читателей. Здесь Вы можете задать вопрос по программированию на C/C++ и ответить на вопросы других подписчиков.

С уважением, Вахтуров Виктор.

P.S. Поздравляю всех читателей рассылки с Праздником Весны и Труда !
     Желаю всем счастья и творческих успехов !
Exceptional MFC

Недокументированные функции (часть 2)

Вместо вступления

В данном выпуске продолжается тема недокументированных функций, классов, макросов, структур данных, входящий в библиотеку MFC. Сначала напомню содержание предыдущих выпусков.
В позапрошлом выпуске описываются функции различного назначения, условно объединенные в группы: работа с окнами (интерфейс), работа с именами файлов и каталогов, функции, полезные для отладки.
В прошлом выпуске речь шла о функциях обработки строк (конвертирование, форматирование, и.т.д.).
В данном выпуске будет закончено рассмотрение функций работы со строками.

Кстати, в следующем выпуске будет начато рассмотрение полезных недокументированных структур и классов.

Функции работы со строками (окончание)

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

Функция AfxGetScodeString
Декларирована AFXOLE.H
Реализована OLEMISC.CPP

Прототип:

LPCTSTR AFXAPI AfxGetScodeString(SCODE sc);

Комментарии

Возвращает указатель на константную null-terminated строку, содержащую символьное представление константы кода состояния, переданного в качестве параметра sc.

Например, если в качестве параметра sc в функцию передать значение S_OK, то функция вернет указатель на строку, содержащую "S_OK".

Функция возвращает значения для 243-х кодов (чтобы узнать, для каких - достаточно заглянуть в исходник функции в файле OLEMISC.CPP). Если код не найден среди определенных в функции значений (в функции опрелелен статический массив - фактически таблица сопоставления соответствующих кодов определенным строкам), возвращается NULL.

Примечание.

Данная функция реализована только в отладочной версии библиотеки !


Функция AfxGetFullScodeString
Декларирована AFXOLE.H
Реализована OLEMISC.CPP

Прототип:

LPCTSTR AFXAPI AfxGetFullScodeString(SCODE sc);

Комментарии

Возвращает указатель на null-terminated строку (статический буфер), содержащий по возможности полное описание переданного status-кода.

Сначала функция вызывает AfxGetScodeString и, если возвращенное значение не NULL, форматирует строку по шаблону: "%s ($%08lX)" (подставляется значение, возвращенное AfxGetScodeString и sc). Если возвращен NULL, то вызывается AfxGetScodeRangeString и, если возвращенное значение не NULL, строка форматируется по шаблону: "range: %s ($%08lX)" (подставляется значение, возвращенное AfxGetScodeRangeString и sc). Если снова возвращен NULL, то форматирование происходит по шаблону: "severity: %s, facility: %s ($%08lX)", в которой подставляются значения, возвращаемые AfxGetSeverityString и AfxGetFacilityString для кода sc.

Примечание.

Данная функция реализована только в отладочной версии библиотеки !


Функция AfxGetScodeRangeString
Декларирована AFXOLE.H
Реализована OLEMISC.CPP

Прототип:

LPCTSTR AFXAPI AfxGetScodeRangeString(SCODE sc);

Комментарии

Возвращает указатель на константную null-terminated строку, содержащую символьное представление префикса группы констант однотипных кодов состояния, в диапазон которых попадает код, переданный в качестве параметра sc.

Например, если в качестве параметра sc в функцию передавать значения: OLE_E_OLEVERB, OLE_E_ADVF или OLE_E_ENUM_NOMORE, то функция вернет указатель на строку, содержащую "OLE_E", а если: DRAGDROP_E_NOTREGISTERED, DRAGDROP_E_ALREADYREGISTERED, или DRAGDROP_E_INVALIDHWND, то строка будет содержать "DRAGDROP_E".

Функция возвращает значения для 32-х диапазонов кодов (более подробно можно узнать в исходниках этой функции (файл OLEMISC.CPP). Если диапазон не найден среди определенных в функции значений диапазонов (в функции опрелелен статический массив для отображения численных диапазонов кодов на соответствующие строковые значения), возвращается NULL.

Примечание.

Данная функция реализована только в отладочной версии библиотеки !


Функция AfxGetSeverityString
Декларирована AFXOLE.H
Реализована OLEMISC.CPP

Прототип:

LPCTSTR AFXAPI AfxGetSeverityString(SCODE sc);

Комментарии

Возвращает указатель на константную null-terminated строку, содержащую "SEVERITY_SUCCESS", если в качестве параметра sc передан код успешного окончания операции и "SEVERITY_ERROR", если передан код ошибочного завершения (поле severity (бит 31) установлен в 1).

Примечание.

Данная функция реализована только в отладочной версии библиотеки !


Функция AfxGetFacilityString
Декларирована AFXOLE.H
Реализована OLEMISC.CPP

Прототип:

LPCTSTR AFXAPI AfxGetFacilityString(SCODE sc);

Комментарии

Возвращает указатель на константную null-terminated строку, содержащую символьное представление константы кода подсистемы Windows, возвратившей код завершения операции, переданный в качестве параметра sc.

Например: "FACILITY_RPC" или "FACILITY_WIN32".

Функция возвращает 9 различных значений или "<Unknown Facility>", если facility-код выходит за пределы диапазона индексов статического массива указателей на строки возвращаемых значений, определенного в функции.

Примечание.

Данная функция реализована только в отладочной версии библиотеки !


Функция _AfxEndOfLine
Декларирована -
Реализована VIEWEDIT.CPP

Прототип:

AFX_STATIC UINT AFXAPI _AfxEndOfLine(LPCTSTR lpszText,
                                     UINT nLen, UINT nIndex)

Комментарии

Выполняет поиск конца строки в null-terminated блоке текста.

Указатель на строку, в которой ведется поиск передается как параметр lpszText.
nLen - длина буфера lpszText в символах.
nIndex - смещение (в символах), указывающее позицию начала поиска в строке.
Поиск продолжается до нахождения символа '\r', либо до достижения конца строки.
Возвращается индекс найденного '\r', либо значение, равное длине строки.

Примечание.

Данная функция не экспортируется из динамической версии библиотеки (она, конечно же, доступна при линковке со статическими библиотеками). Здесь приведена больше для ознакомления. Однако, в случае необходимости, можно легко перенести ее код в свой проект из исходников MFC.


Функция _AfxNextLine
Декларирована -
Реализована VIEWEDIT.CPP

Прототип:

AFX_STATIC UINT AFXAPI _AfxNextLine(LPCTSTR lpszText,
                                    UINT nLen, UINT nIndex)

Комментарии

Параметры и семантика работы функции практически аналогичны _AfxEndOfLine, с той лишь разницей, что _AfxNextLine возвращает индекс первого символа строки, следующей за строкой, конец которой был найден начиная с позиции nIndex.
Функция также производит поиск символа '\r' для нахождения конца строки (после нахождения '\r' проверяется наличие возможно следующего за ним '\n').

Примечание.

Данная функция не экспортируется из динамической версии библиотеки (она, конечно же, доступна при линковке со статическими библиотеками). Здесь приведена больше для ознакомления. Однако, в случае необходимости, можно легко перенести ее код в свой проект из исходников MFC.


Функция _AfxClipLine
Декларирована -
Реализована VIEWEDIT.CPP

Прототип:

AFX_STATIC UINT AFXAPI
_AfxClipLine(CDC* pDC, int aCharWidths[256], int cxLine,
    int nTabStop, LPCTSTR lpszText, UINT nIndex, UINT nIndexEnd)

Комментарии

Функция возвращет индекс последнего символа отрезка строки lpszText (индекс начала отрезка - nIndex), который при выводе функцией TabbedTextOut на контекст устройства pDC заполнит не более cxLine логических единиц устройства по горизонтали.
Иными словами, при помощи данной функции можно осуществлять разбиение строки текста на подстроки для осуществлении wrapping-а при форматированном выводе на некоторый контекст устройства.

cxLine задает доступное горизонтальное пространство при выводе (или ширину прямоугольника форматирования).

aCharWidths - массив "ширин" символов с кодами от 0 до 255.

nTabStop - ширина пространства табуляции (в логических единицах устройства).

nIndex - индекс символа, с которого начинается сканирование строки.

nIndexEnd - индекс последнего символа строки.


Ниже приведен небольшой пример использования функции: Код.

   CClientDC dc(this);

   CString str = _T(   "Text text text text text text"
                  "text text text text text text");

   int cx = 100; // 100 пикселей

   int aCharWidths[256];
   dc.GetCharWidth(0, 255, aCharWidths);

   int nTabStop = dc.GetTabbedTextExtent(_T("\t"), 1, 0, NULL).cx;

   UINT   nIndexWrap = _AfxClipLine(&dc, aCharWidths,
         cx, nTabStop, (LPCTSTR) str, 0, str.GetLength() - 1);

   str = str.Mid(0, nIndexWrap);

   dc.TabbedTextOut(   0, 0, (LPCTSTR) str, str.GetLength(), 1,
                  &nTabStop, 0);

   dc.MoveTo(100, 0);

   dc.LineTo(100, 100);

Примечание.

Данная функция не экспортируется из динамической версии библиотеки (она, конечно же, доступна при линковке со статическими библиотеками). Здесь приведена больше для ознакомления. Однако, в случае необходимости, можно легко перенести ее код в свой проект из исходников MFC.


Автор выпуска и всех его материалов : Вахтуров Виктор.

Книги по C/C++
Полный справочник по C++ (C++: The Complete reference)
Полный справочник по C++ (C++: The Complete reference)

Автор: Герберт Шилдт

В четвертом издании этой книги полностью описаны и проиллюстрированы все ключевые слова, функции, классы и свойства языка С++, соответствующие стандарту ANSI/ISO.

Информацию, изложенную в книге, можно использовать во всех современных средах программирования. Освещены все аспекты языка С++, включая его основу - язык С.

Справочник состоит из пяти частей:
  • подмножество С;
  • язык С++;
  • библиотека стандартных функций;
  • библиотека стандартных классов;
  • приложения на языке С++.

Книга предназначена для широкого круга программистов.

Страница книги на Озоне
C/C++. Алгоритмы и приемы программирования. Код с комментариями
C/C++. Алгоритмы и приемы программирования. Код с комментариями

Автор: Арт Фридман, Ларс Кландер, Марк Михаэлис, Г. Шилдт

Книга является репринтным изданием C/C++. Архив программ.

В ней представлен код работоспособных программ на C/C++, относящихся к самым разнообразным областям и аспектам написания приложений - от работы с достаточно простыми структурами данных (списки, деревья) до построения синтаксических анализаторов и интерпретаторов, доступа к Internet и т. п.

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

Программы снабжены развернутыми комментариями и детальными пояснениями их работы.

Книга предназначена для широкого круга программистов, пишущих на языках C/C++.

Страница книги на Озоне
Рассылки и дискуссионные листы компьютерной тематики
Рассылки
C/C++ Вопрос-Ответ

Это - интерактивная рассылка !
Здесь Вы можете задать свой вопрос по программированию на C и C++, а также ответить на вопросы других подписчиков.


Программирование на JavaScript

Все аспекты программирования на JavaScript - нестандартные приемы, ОРИГИНАЛЬНЫЕ скрипты, авторские статьи и наработки. "JavaScript solutions" - в каждом выпуске готовый к применению ИНТЕРЕСНЫЙ скрипт (исходный код с комментариями).

Дискуссионные листы
Программирование. Форум !!!

Самый популярный дискуссионный лист по программированию на subscribe.ru, существующий с момента открытия сервиса дискуссионных листов !

Задайте здесь любой вопрос по программированию - и Вы получите ответ. Участвуйте в оживленных дискуссиях, обсуждайте интересные темы. Давайте ответы сами. Ведь это форум !!! Здесь просто интересно ! Присоединяйтесь !

Вебстроительство. Форум !!!

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

Поисковые системы. Форум !!!

Этот дискуссионный лист посвящен обсуждению поиковых систем, методов индексации сайтов поисковиками, способам оптимизации сайта под поисковые системы.

Хостинг. Обзоры и обсуждения платного и бесплатного хостинга.

Вы ищете хостинг (платный, бесплатный) ? Хотите спросить совета в выборе ? Можете обсудить это здесь. Поделитесь советом, если знаете. Или узнайте больше. Все о хостинге.


Всего доброго. До встречи в следующем номере.

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.qandacpp
Отписаться

В избранное