Visual C++. Описание стандартных классов

ОГЛАВЛЕНИЕ

Описание стандартных классов Visual C++.

CArchive

Класс CArchive позволяет сохранять на диске достаточно сложные объекты, а также загружать их в память по мере необходимости. Хранение объектов производится в файлах с последовательным доступом. Данный тип файла можно представить себе как двоичный поток данных. Подобно потокам, используемым в операциях ввода-вывода, архив использует буферизированную запись и чтение данных в память и из памяти. Поток ввода-вывода обрабатывает последовательности символов ASCII, но архив обрабатывает двоичные данные объектов в более эффективном формате, не использующем избыточности. Прежде, чем использовать объект класса архива, необходимо создать соответствующий ему объект класса CFile. При этом необходимо удостовериться, что в этих объектах соответствуют атрибуты доступа к данным. Одному объекту класса CFile может соответствовать не более одного активного объекта класса CArchive. При создании объекта класса CArchive он присоединяется к объекту класса CFile (или производного от него класса), соответствующего открытому файлу. При этом следует также определить режим работы с архивом: будет ли он использоваться для загрузки или сохранения данных. Объект класса CArchive может работать не только с простейшими типами данных, но также и объектами классов, производных от класса CObject, позволяющих сохранять свои данные в последовательном формате. Класс, допускающий сохранение своих данных в последовательном формате, обычно имеет функцию Serialize, а при его описании и реализации используются макросы DECLARE_SERIAL и IMPLEMENT_SERIAL. Перегруженные операторы чтения данных из архива (>>) и записи данных в архив (<<) обеспечивают удобный программный интерфейс работы с архивом. Аргументом данных операторов могут быть как переменные простейших типов, так и объекты классов, производных от класса CObject. Описание данного класса содержится в файле заголовка afx.h.

operator >>

friend CArchive& operator >>(CArchive& ar, CObject *& pOb);
throw(CArchiveException, CFileException, CMemoryException);
friend CArchive& operator >>(CArchive& ar, const CObject *& pOb);
throw(CArchiveException, CFileException, CMemoryException);
CArchive& operator >>(BYTE& by);
throw(CArchiveException, CFileException);
CArchive& operator >>(WORD& w);
throw(CArchiveException, CFileException);
CArchive& operator >>(int& i);
throw(CArchiveException, CFileException);
CArchive& operator >>(LONG& l);
throw(CArchiveException, CFileException);
CArchive& operator >>(DWORD& dw);
throw(CArchiveException, CFileException);
CArchive& operator >>(float& f);
throw(CArchiveException, CFileException);
CArchive& operator >>(double& d);
throw(CArchiveException, CFileException);

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

Ссылка на объект класса CArchive, позволяющая использовать в одной строке программы несколько подобных операторов.

Описание

Читает указанный объект или переменную простейшего типа из архива. Если в файле реализации класса использовался макрос IMPLEMENT_SERIAL, то данный оператор вызывает защищенную функцию ReadObject с ненулевым указателем на объект класса, производного от класса CObject, который в свою очередь, вызывает функцию Serialize данного класса.

operator <<

friend CArchive& operator <<(CArchive& ar, const CObject* pOb);
throw(CArchiveException, CFileException);
CArchive& operator <<(BYTE by);
throw(CArchiveException, CFileException);
CArchive& operator <<(WORD w);
throw(CArchiveException, CFileException);
CArchive& operator <<(int i);
throw(CArchiveException, CFileException);
CArchive& operator <<(LONG l);
throw(CArchiveException, CFileException);
CArchive& operator <<(DWORD dw);
throw(CArchiveException, CFileException);
CArchive& operator <<(float f);
throw(CArchiveException, CFileException);
CArchive& operator <<(double d);
throw(CArchiveException, CFileException);

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

Ссылка на объект класса CArchive, позволяющая использовать в одной строке программы несколько подобных операторов.

Описание

Записывает указанный объект или переменную простейшего типа в архив. Если в файле реализации класса использовался макрос IMPLEMENT_SERIAL, то данный оператор вызывает защищенную функцию WriteObject с ненулевым указателем на объект класса, производного от класса CObject, который в свою очередь, вызывает функцию Serialize данного класса.


CArchive::GetFile

CFile* GetFile() const;

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

Указатель на объект класса CFile, связанный с данным архивом.

Описание

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


IsStoring

BOOL IsStoring() const;

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

Ненулевое, если архив в настоящее время используется для записи в него информации, и нулевое в противном случае.

Описание

Определяет режим использования архива. Данная функция используется в функции Serialize классов, поддерживающих работу с архивом. Если функция IsStoring возвращает ненулевое значение, то функция IsLoading возвращает нулевое значение. И наоборот.


CArray

template< class TYPE, class ARG_TYPE > class CArray : public CObject

Аргументы

  • TYPE - параметр шаблона, определяющий тип объектов, хранящихся в массиве. Объекты данного типа возвращаются функциями-членами класса CArray
  • ARG_TYPE - параметр шаблона, определяющий тип, используемый для доступа к объектам, хранящиеся в массиве. Часто он представляет собой ссылку на значение параметра TYPE. Объекты данного типа используются в качестве аргументов функций-членов класса CArray.

Описание

Класс CArray служит для хранения информации в массивах, аналогичных массивам языка C, но допускает динамическое изменение их размера. Индекс первого элемента массива всегда равен 0. Пользователь может зафиксировать верхнюю границу массива или позволить ему расти при добавлении новых элементов, если их индекс превышает его верхнюю границу. Для данного массива всегда выделяется единая область памяти, даже в том случае, когда отдельные его элементы не используются. Как и в случае массивов языка C, время доступа к любому элементу массива CArray постоянно и не зависит от размера массива. Прежде чем использовать массив, необходимо вызвать функцию SetSize для установки его размера и резервирования необходимой памяти. Если при создании массива не использовалась функция SetSize, то при добавлении в него элементов часто будет производиться перераспределение памяти и копирование массива, что может привести к замедлению работы программы и к фрагментации памяти. При необходимости вывести диагностическую информацию об отдельном элементе массива, необходимо указать глубину объекта CDumpContext равной 1 или большей величине. Описание данного класса содержится в файле заголовка afxtempl.h.


Add

int Add(ARG_TYPE newElement); throw(CMemoryException);

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

Индекс вставленного элемента

Аргументы

  • ARG_TYPE - параметр шаблона, определяющий тип аргументов, используемых для ссылки на элементы массива.
  • newElement - элемент, добавляемый в массив.

Описание

Добавляет новый элемент в конец массива, увеличивая его размер на 1. Если в функции SetSize аргумент nGrowBy имеет значение больше 1 и увеличение размера массива на 1 привело к выходу за пределы отведенной ему памяти, то для массива выделяется дополнительная память, в которую могут быть записаны новые элементы без новой операции выделения памяти, размер которой определяется аргументом nGrowBy функции SetSize. Однако максимальный индекс элемента в массиве возрастает только на 1.


GetSize

int GetSize() const;

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

Размер массива

Описание

Возвращает размер массива. Поскольку первый элемент массива имеет нулевой индекс, размер массива всегда на 1 превышает максимальный индекс элемента массива. 


GetUpperBound

int GetUpperBound() const;

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

Максимальный индекс элемента массива. Если возвращаемое значение равно -1, то данный массив не содержит элементов.

Описание

Возвращает максимальный индекс элемента массива. Поскольку первый элемент массива имеет нулевой индекс, максимальный индекс элемента массива всегда на 1 меньше, чем размер массива. operator [ ]
TYPE& operator [](int nIndex);
TYPE operator [](int nIndex) const;

Аргументы

  • TYPE - параметр шаблона, определяющий тип объектов, хранящихся в массиве.
  • nIndex - индекс элемента, к которому необходимо получить доступ.

Описание

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


RemoveAll

void RemoveAll();

Описание

Удаляет все указатели из массива. Если массив уже пуст, функция все равно работает.


SetSize

void SetSize(int nNewSize, int nGrowBy = -1); throw(CMemoryException);

Аргументы

  • nNewSize - новый размер массива (количество элементов). Должен иметь значение большее или равное 0.
  • nGrowBy - минимальное количество элементов, на которое будет увеличен размер массива при необходимости.

Описание

Устанавливает размер пустого или существующего массива. Выделяет память в случае необходимости. Если новый размер массива меньше его прежнего размера, то массив усекается и вся неиспользуемая память освобождается. Для повышения производительности приложений, использующих массив, необходимо вызвать функцию SetSize до начала работы с ним. Правильный выбор ее аргументов позволит исключить или существенно уменьшить объем операций по перераспределению памяти и копирования массива при добавлении к нему элементов. Аргумент nGrowBy влияет только на распределение памяти при увеличении размеров массива. Его значение никак не отражается на возвращаемых значениях функций GetSize и GetUpperBound. Если используется значение, выбранное по умолчанию, библиотека MFC выделяет память таким образом, чтобы избежать фрагментации памяти и оптимизировать работу с массивом для большинства практических случаев.


CBitmap

Объекты класса CBitmap содержат функции для работы с битовыми образами интерфейса графических устройств Windows. Для использования объекта класса CBitmap его необходимо создать с помощью конструктора, а затем связать с ним дескриптор битового образа с помощью одной из функций инициализации. После этого можно вызывать функции данного класса. Описание данного класса содержится в файле заголовка afxwin.h.


CreateCompatibleBitmap

BOOL CreateCompatibleBitmap(CDC* pDC, int nWidth, int nHeight);

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

Ненулевое, в случае успешного завершения работы функции, и нулевое в противном случае.

Аргументы

  • pDC - указатель на объект класса контекста устройства.
  • nWidth - определяет ширину битового образа (в элементах изображения).
  • nHeight - определяет высоту битового образа (в элементах изображения).

Описание

Инициализирует битовый образ, делая его совместимым с контекстом устройства, определяемого аргументом pDC. Битовый образ имеет то же число цветовых битовых плоскостей или то же число битов, используемых для кодирования цвета каждого из элементов изображения, что и указанный контекст устройства. После этой операции данный битовый образ может быть выбран в качестве текущего битового образа контекста устройства на который указывает аргумент pDC. Если аргумент pDC указывает на контекст устройства памяти, инициализированный битовый образ имеет тот же формат, что и текущий битовый образ указанного контекста устройства. Контекст устройства памяти представляет собой область памяти, представляющую экран дисплея. Он может использоваться для подготовки изображений перед выводом их на экран. При создании контекста устройства памяти GDI автоматически выбирает в него монохромный битовый образ. Поскольку в контекст устройства памяти могут быть выбраны как монохромные, так и цветные битовые образы, формат битового образа, возвращаемый функцией CreateCompatibleBitmap, использующей данный контекст устройства, может не совпадать при различных вызовах. Однако, во всех остальных случаях битовый образ имеет формат, определяемый только возможностями устройства. По завершении работы с объектом класса CBitmap, инициализированным функцией CreateCompatibleBitmap, необходимо сначала удалить битовый образ из контекста устройства, а затем уничтожить сам объект класса CBitmap.


GetBitmapBits

DWORD GetBitmapBits(DWORD dwCount, LPVOID lpBits) const;

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

Нулевое значение в случае возникновения ошибки, и скопированное количество байт в битовом образе в противном случае.

Аргументы

  • dwCount - определяет количество байт, которые необходимо скопировать.
  • lpBits - указатель на буфер, в который будет записан битовый образ. Битовый образ представляет собой байтовый массив. Хранение информации производится по линиям горизонтальной развертки, для хранения которых используются 16-битные структуры. Поэтому, если битовый образ содержит нечетное количество столбцов, и для хранения информации о цвете каждого из элементов изображения используется нечетное количество байт, объем памяти, необходимый для хранения одной строки горизонтальной развертки будет на один байт превышать ее действительный размер.

Описание

Копирует битовый образ из объекта класса CBitmap в буфер, на который указывает аргумент lpBits. Аргумент dwCount определяет количество байт, которое необходимо скопировать в данный буфер. Для определения корректного значения аргумента dwCount следует вызывать функцию CGdiObject::GetObject для данного объекта класса битового образа.


SetBitmapBits

DWORD SetBitmapBits(DWORD dwCount, const void* lpBits);

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

Нулевое значение в случае возникновения ошибки, и скопированное количество байт в битовом образе в противном случае.

Аргументы

  • dwCount - определяет число байт, которое необходимо скопировать.
  • lpBits - указатель на область в оперативной памяти, из которой следует скопировать битовый образ в объект класса CBitmap.

Описание

Присваивает битам в битовом образе значения, содержащиеся в массиве lpBits.


CButton

Класс CButton содержит функции для работы с кнопками Windows. Кнопка представляет собой маленькое, прямоугольное дочернее окно, которое может находиться в двух состояниях, переключаемых щелчками мыши или клавишами клавиатуры. Данный элемент управления может использоваться самостоятельно или в группах. В зависимости от типа кнопки связанный с ней текст может располагаться внутри данного элемента управления или рядом с ним. Изменение состояния кнопки обычно отражается при ее отображении на экране. Типичным примером кнопок являются флажки, переключатели и простые кнопки. К какому из данных типов кнопок будет относиться объект класса CButton, определяется ее стилем, задаваемым в функции Create при его создании. Класс CBitmapButton, производный от класса CButton позволяет получать кнопки, в которых вместо текста помещается растровое изображение. Класс CBitmapButton позволяет использовать различные битовые образы для нажатой, отжатой, получившей фокус ввода и недоступной кнопок. Объект данного класса может быть создан с использованием шаблона диалога или непосредственно пользователем. В обоих случаях сначала вызывается конструктор класса CButton, создающий объект данного класса, а затем вызывается функция Create, создающая кнопку Windows и связывающая ее с объектом класса CButton. Объекты класса, производного от класса CButton можно создавать за один шаг. Для этого в конструкторе данного класса нужно вызвать функцию Create. Для обработки сообщений Windows, посылаемых объектом класса кнопки объекту класса родительского окна (обычно это объект класса, производного от класса CDialog), необходимо добавить в карту сообщений родительского класса соответствующие макросы, а в сам класс - включить соответствующие функции обработки сообщений. Макрос карты сообщений имеет следующий формат: ON_Notification(id, memberFxn), где параметр id определяет идентификатор дочернего окна элемента управления, а memberFxn - имя функции обработки данного сообщения. Функция обработки сообщения объявляется следующим образом: afx_msg void memberFxn(); Наиболее часто в качестве макросов обработки сообщений от кнопок используются:

  • ON_BN_CLICKED - пользователь нажал кнопку;
  • ON_BN_DOUBLECLICKED - пользователь дважды нажал кнопку.

Объект класса CButton, созданный с использованием ресурса диалога автоматически уничтожается при закрытии диалогового окна. При создании данного объекта пользователем он должен сам удалить его. Если данный объект создавался в куче с использованием оператора new, то при закрытии родительского окна он должен быть уничтожен с использованием оператора delete. Если же он создавался в стеке или был внедрен в объект класса родительского окна диалога, то он уничтожается автоматически. Описание данного класса содержится в файле заголовка afxwin.h.

CButton::GetState

UINT GetState() const;

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

Определяет текущее состояние кнопки. Для выделения конкретной информации о состоянии кнопки могут использоваться следующие маски: 0x0003 - определяет состояние флажков и переключателей. Значение 0 говорит о том, что флажок сброшен, 1 - установлен, а 2 - что кнопка находится в неопределенном состоянии;
0x0004 - определяет выделение кнопки. Ненулевое значение означает, что данная кнопка выделена, то есть пользователь нажал и удерживает не ней левую кнопку мыши;
0x0008 - определяет фокус ввода. Ненулевое значение означает, что данная кнопка имеет фокус ввода.

Описание

Позволяет определить состояние кнопки.


SetCheck

void SetCheck(int nCheck);

Аргументы

  • nCheck - определяет состояние кнопки. Этот аргумент может принимать одно из следующих значений:
    0 - кнопка сброшена;
    1 - кнопка установлена;
    2 - состояние кнопки не определено. Это значение состояния кнопки может быть установлено только в том случае, когда она имеет стиль BS_3STATE или стиль BS_AUTO3STATE.

Описание

Устанавливает или сбрасывает переключатели или флажки. Эта функция не оказывает никакого действия на простые кнопки.


CCmdUI

Класс CCmdUI используется в функциях обработки сообщения ON_UPDATE_COMMAND_UI в классах, производных от класса CCmdTarget. Когда пользователь раскрывает меню в своем приложении, приложение должно определить состояние каждой его команды, каждая из которых может быть доступной или недоступной. Эта информация предоставляется функциями обработки сообщения ON_UPDATE_COMMAND_UI. Прототипы этих функций и соответствующие им макросы карты сообщений могут быть созданы с использованием мастера ClassWizard. При раскрытии меню приложение ищет и вызывает функции обработки сообщения ON_UPDATE_COMMAND_UI, передавая им в качестве аргумента объект класса CCmdUI. Пользователь вызывает для данного объекта такие функции, как Enable или Check, позволяющие приложению правильно установить состояние для каждой команды меню. На месте команд меню могут выступать кнопки панели инструментов или другие объекты пользовательского интерфейса. При этом все они будут использовать одну и ту же функцию обработки сообщения ON_UPDATE_COMMAND_UI. В таблице П2.3 содержатся сведения о реакции отдельных элементов управления на вызов функций-членов класса CCmdUI.

Таблица П2.3. Воздействие функций класса CCmdUI на отдельные элементы управления

Элемент управления Enable SetCheck SetRadio SetText
Команда меню Делает доступной или недоступной Устанавливает или снимает флажок (v) Устанавливает или снимает переключатель (.) Устанавливает текст элемента управления
Кнопка панели инструментов Делает доступной или недоступной Выделяет, снимает выделение или переводит в неопределенное состояние Работает аналогично функции SetCheck Не используется
Панель строки состояния Делает текст видимым или невидимым Устанавливает выступающую или нормальную рамку Работает аналогично функции SetCheck Устанавливает текст в панели
Обычная кнопка в CDialogBar Делает доступной или недоступной Устанавливает или снимает флажок Работает аналогично функции SetCheck Устанавливает текст в кнопке
Обычный элемент управления в CDialogBar Делает доступной или недоступной Не используется Не используется Устанавливает текст окна

Класс CCmdUI не имеет базового класса. Описание данного класса содержится в файле заголовка afxwin.h.

ContinueRouting

void ContinueRouting();

Описание

Данная функция сообщает процедуре обработки сообщений, что обработка данного сообщения не завершена в данной функции и требуется найти обработчик данного сообщения, который завершит процедуру его обработки. Функцию ContinueRouting необходимо вызывать в функциях обработки сообщения ON_COMMAND_EX в том случае, когда они возвращают значение FALSE.


Enable

virtual void Enable(BOOL bOn = TRUE);

Аргументы

  • bOn - если данный аргумент имеет значение TRUE, то соответствующий элемент управления становится доступным. В противном случае он становится недоступным.

Описание

Данная функция позволяет делать доступным или недоступным элемент управления.


SetCheck

virtual void SetCheck(int nCheck = 1);

Аргументы

  • nCheck - определяет состояние флажка. Если данный аргумент равен 0, то флажок сбрасывается, если - 1, то флажок устанавливается, а если значение данного аргумента равно 2, то флажок устанавливается в неопределенное состояние.

Описание

Данная функция позволяет установить состояние команды меню или кнопки панели инструментов. В неопределенное состояние может быть установлена только кнопка панели инструментов.


SetText

virtual void SetText(LPCTSTR lpszText);

Аргументы

  • lpszText - указатель на текстовую строку, заканчивающуюся нулем.

Описание

Данная функция вызывается приложением для вывода текста в пользовательском элементе управления.


CControlBar

Класс CControlBar является базовым для таких классов, как CStatusBar, CToolBar, CDialogBar, CReBar и COleResizeBar. Панель управления представляет собой окно, обычно выровненное по левой или правой стороне основного окна приложения. Оно может содержать дочерние окна, которые могут быть как элементами управления, имеющими свой дескриптор окна HWND, то есть обычными окнами Windows способными посылать и принимать сообщения, или другими элементами управления не являющимися окнами и управляемыми функциями класса приложения или класса главного окна приложения. Примером элементов управления, имеющих свой дескриптор окна, могут служить просмотровые окна списка и окна редактора. Примером элементов управления не имеющих своего дескриптора окна являются панели строки состояния или кнопки панели инструментов. Окна панели управления обычно являются дочерними окнами главного окна приложения и используются наравне с рабочей областью однооконного приложения или окнами документов многооконного приложения. Для своего позиционирования объект класса CControlBar использует информацию о размерах рабочей области родительского окна. После этого он информирует родительское окно о том, сколько места осталось в его рабочей области. Описание данного класса содержится в файле заголовка afxext.h.


EnableDocking

void EnableDocking(DWORD dwStyle);

Аргументы

  • dwStyle - определяет возможность фиксации панели управления на одной из сторон окна и определяет стороны, на которых панель управления может фиксироваться. Может быть комбинацией следующих флагов:
           CBRS_ALIGN_TOP - разрешает фиксацию на верхней стороне рабочей области окна;
           CBRS_ALIGN_BOTTOM - разрешает фиксацию на нижней стороне рабочей области окна;
           CBRS_ALIGN_LEFT - разрешает фиксацию на левой стороне рабочей области окна;
           CBRS_ALIGN_RIGHT - разрешает фиксацию на правой стороне рабочей области окна;
           CBRS_ALIGN_ANY - разрешает фиксацию на любой стороне рабочей области окна;
           CBRS_FLOAT_MULTI - разрешает использование нескольких плавающих панелей управления в одном окне. Если данный аргумент равен 0 (то есть не указан ни один флаг) панель управления не фиксируется.

Описание

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


CDateTimeCtrl

Класс CDateTimeCtrl является классом обработки сообщений элемента управления Date Time Picker (Выбор даты и времени), используемого для ввода и вывода информации о дате и времени. Этот элемент управления имеет вид раскрывающегося списка, в текстовое поле которого, в зависимости от установленного стиля, выводится информация о дате или о времени. Эта информация структурирована и при редактировании отдельного ее компонента (дней, минут, секунд и т. д.) он выделяется синим прямоугольником. Для перемещения между отдельными компонентами может использоваться мышь или клавиатура. При нажатии на кнопку раскрывающегося списка появляется элемент управления Month Calender Control (Календарь на месяц), позволяющий выбирать новую дату для отображения в рассматриваемом элементе управления. При создании элемента управления для работы с датой и временем могут быть заданы следующие стили:

  • DTS_APPCANPARSE - позволяет пользователю нажать клавишу и произвести редактирование в рабочей области окна;
  • DTS_LONGDATEFORMAT - использует длинный формат представления даты;
  • DTS_RIGHTALIGN - приводит к выравниванию информации по правому краю в пределах элемента управления. По умолчанию используется выравнивание по левому краю;
  • DTS_SHORTDATEFORMAT - использует короткий формат представления даты;
  • DTS_TIMEFORMAT - выводит информацию о времени;
  • DTS_UPDOWN - помещает справа от данного элемента управления счетчик, который может использоваться для корректировки информации о дате и времени.

В процессе своей работы данный элемент управления может посылать следующие извещения:

  • DTN_CLOSEUP - пользователь закрывает раскрывающийся месячный календарь;
  • DTN_DATETIMECHANGE - изменение информации в элементе управления;
  • DTN_DROPDOWN - пользователь открывает раскрывающийся месячный календарь;
  • DTN_USERSTRING - пользователь завершил редактирование строки в элементе управления;
  • DTN_KILLFOCUS - элемент управления потерял фокус ввода;
  • DTN_SETFOCUS - элемент управления получил фокус ввода.

Описание данного класса содержится в файле заголовка afxdtctl.h.

GetTime

BOOL GetTime(COleDateTime& timeDest) const;
DWORD GetTime(CTime& timeDest) const;
DWORD GetTime(LPSYSTEMTIME pTimeDest) const;

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

В первой версии данной функции ненулевое значение возвращается в том случае, если информация о времени успешно записана в объект класса COleDateTime. В противном случае возвращается нулевое значение. Во второй и третьей версиях возвращается двойное слово, значение которого совпадает со значением переменной dwFlag структуры NMDATETIMECHANGE.

Аргументы

  • timeDest - в первой версии данной функции содержит ссылку на объект класса COleDateTime, в который будет записана информация о системной дате и времени. Во второй версии данной функции этот аргумент содержит ссылку на объект класса CTime, в который будет записана информация о системной дате и времени.
  • PTimeDest - указатель на объект структуры SYSTEMTIME, в который будет записана информация о системной дате и времени. Не может принимать нулевого значения.

Описание

Используется для сохранения информации о дате и времени, содержащейся в соответствующем элементе управления, в объекте структуры SYSTEMTIME. Эта функция выполняет те же действия, что и сообщение Win32 DTM_GETSYSTEMTIME. При реализации в библиотеке MFC функция GetTime может сохранять информацию не только в объекте структуры SYSTEMTIME, но и в объектах классов COleDateTime и CTime. Вторая и третья версии данной функции возвращают двойное слово, информирующее о том, содержалась ли в соответствующем элементе управления информация о дате и времени. Возвращаемое значение соответствует значению переменной dwFlags структуры NMDATETIMECHANGE. Если возвращается значение GDT_NONE, то элемент управления не содержит информации о дате и использует стиль DTS_SHOWNONE. Если возвращается значение GDT_VALID, то системное время благополучно сохранено в соответствующем объекте.


SetFormat

BOOL SetFormat(LPCTSTR pstrFormat);

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

Ненулевое, если функция завершилась успешно, и нулевое в противном случае. Содержимое элемента управления не определяет успешность завершения данной функции.

Аргументы

  • pstrFormat - указатель на заканчивающуюся нулем строку, определяющую формат выводимой информации. Передача в данном аргументе нулевого значения установит формат, используемый по умолчанию.

Описание

Устанавливает формат вывода информации в элементе управления. Эта функция выполняет те же действия, что и сообщение Win32 DTM_SETFORMAT.


SetTime

BOOL SetTime(const COleDateTime& timeNew);
BOOL SetTime(const CTime* pTimeNew);
BOOL SetTime(LPSYSTEMTIME pTimeNew = NULL);

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

Ненулевое, если функция завершилась успешно, и нулевое в противном случае.

Аргументы

  • timeNew - ссылка на объект класса COleDateTime, содержащий время, которое необходимо установить в элементе управления.
  • pTimeNew - во второй версии данной функции содержит указатель на объект класса CTime, содержащий время, которое необходимо установить в элементе управления. В третьей версии данной функции этот аргумент содержит указатель на объект структуры SYSTEMTIME, содержащий время, которое необходимо установить в элементе управления.

Описание

Устанавливает дату и время в соответствующем элементе управления. Эта функция выполняет те же действия, что и сообщение Win32 DTM_SETSYSTEMTIME. При реализации в библиотеке MFC функция GetTime может получать информацию не только из объекта структуры SYSTEMTIME, но и из объектов классов COleDateTime и CTime.


CDC

Класс CDC представляет собой класс контекста устройств. Объект класса CDC содержит методы для работы с контекстом таких устройств, как дисплей или принтер, а также позволяет работать с контекстом дисплея, связанным с рабочей областью окна. Все операции вывода информации на дисплей и принтер должны производиться только с использованием методов, предоставляемых объектом класса CDC. Данный класс содержит методы для работы с контекстом устройств, осуществляющих вывод графической информации, методы выбора объектов интерфейса графических устройств (GDI), учитывающие тип выбираемых объектов, и методы для работы с цветами и палитрами. Он также обеспечивает методы для получения и установки атрибутов отображения графической информации, масштабирования, работы с областями просмотра, работы с расширениями окон, преобразования координат, работы с областями, отсечения неотображаемых фрагментов, рисования линий, простых форм, эллипсов и многоугольников. Данный класс содержит, также методы позволяющие выводить текст, работать со шрифтами, использовать управляющие последовательности принтера, прокрутку окон и проигрывание метафайлов. Чтобы использовать объект класса CDC, необходимо его создать, а затем использовать его функции, соответствующие функциям Windows, предназначенным для работы с контекстами устройств. В Windows 95 экранные координаты хранятся в 16-разрядных целых числах со знаком. Поэтому все величины типа int, используемые в качестве аргументов функций класса CDC должны находиться в диапазоне от -32768 до 32767. Для определенных целей в библиотеке MFC предусмотрены классы, производные от класса CDC. Класс CPaintDC включает в себя вызовы функций BeginPaint и EndPaint. Класс CClientDC позволяет работать с контекстом дисплея, связанным с рабочей областью окна. Класс CWindowDC позволяет работать с контекстом дисплея, связанным со всем окном, включая его рамку и элементы управления. Класс CMetaFileDC связывает контекст устройства с метафайлом. Класс CDC содержит две переменные для хранения контекста устройства: m_hDC и m_hAttribDC, которые, при создании объекта класса CDC относятся к одному и тому же устройству. Класс CDC направляет все запросы на вывод информации с использованием GDI к переменной m_hDC, а большинство обращений к атрибутам GDI использует переменную m_hAttribDC. (Примером обращения к атрибутам может служить функция GetTextColor, а функция SetTextColor может служить примером запроса на вывод информации). Например, приложение использует оба эти контекста устройства при работе с объектом класса CMetaFileDC, записывающего выходную информацию в метафайл, используя при этом атрибуты, считанные из контекста физического устройства. Данный режим используется приложением в режиме Предварительного просмотра печати. Может возникнуть случай, когда пользователю потребуется использовать одну и ту же информацию, полученную из обоих контекстов устройств. Для этого используются пары функций, приведенные в таблице П2.4:

Таблица П2.4. Функции, выполняющие аналогичные действия с различными контекстами устройств

Использует m_hAttribDC Использует m_hDC
GetTextExtent GetOutputTextExtent
GetTabbedTextExtent GetOutputTabbedTextExtent
GetTextMetrics GetOutputTextMetrics
GetCharWidth GetOutputCharWidth

Описание данного класса содержится в файле заголовка afxwin.h. 


BitBlt

BOOL BitBlt(int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop);

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

Ненулевое, если функция завершилась успешно, и нулевое в противном случае.

Аргументы

  • x - определяет горизонтальную координату верхнего левого угла прямоугольника в который будет копироваться битовый образ (области вывода).
  • y - определяет вертикальную координату верхнего левого угла прямоугольника в который будет копироваться битовый образ.
  • nWidth - определяет ширину (в логических единицах) прямоугольника в который будет копироваться битовый образ.
  • nHeight - определяет высоту (в логических единицах) прямоугольника в который будет копироваться битовый образ.
  • pSrcDC - указатель на объект класса CDC, определяющий контекст устройства из которого производится копирование битового образа. Если значение аргумента dwRop определяет растровую операцию для которой не требуется источника, этот аргумент должен иметь значение NULL.
  • xSrc - определяет горизонтальную координату верхнего левого угла прямоугольника из которого будет копироваться битовый образ.
  • ySrc - определяет вертикальную координату верхнего левого угла прямоугольника из которого будет копироваться битовый образ.
  • dwRop - определяет растровую операцию, которую необходимо выполнить. Коды растровых операций определяют каким образом GDI должен комбинировать цвета при выполнении операции, включающей в себя текущую кисть, возможно, исходный битовый образ и результирующий битовый образ. Данный аргумент может принимать следующие значения:
            BLACKNESS - закрашивает всю область вывода в черный цвет;
            DSTINVERT - инвертирует битовый образ, расположенный в области вывода;
            MERGECOPY - комбинирует образец и исходный битовый образ с использованием логического оператора И;
            MERGEPAINT - комбинирует инвертированный битовый образ, расположенный в области вывода, и исходный битовый образ с использованием логического оператора ИЛИ;
            NOTSRCCOPY - копирует инвертированный исходный битовый образ в область вывода;
            NOTSRCERASE - инвертирует результат логического оператора ИЛИ между инвертированным битовым образом, расположенным в области вывода, и исходным битовым образом;
            PATCOPY - заполняет область вывода с использованием образца;
            PATINVERT - комбинирует битовый образ, расположенный в области вывода, и исходный битовый образ с использованием логического оператора ИСКЛЮЧАЮЩЕГО ИЛИ;
            PATPAINT - комбинирует образец и инвертированный исходный битовый образ с использованием логического оператора ИЛИ. Результат этой операции комбинируется с битовым образом, расположенным в области вывода, с использованием логического оператора ИЛИ;
            SRCAND - комбинирует элементы изображения битового образа, расположенного в области вывода, и исходного битового образа с использованием логического оператора И;
            SRCCOPY - копирует исходный битовый образ в область вывода;
            SRCERASE - инвертирует битовый образ, расположенный в области вывода, и комбинирует результат с исходным битовым образом с использованием логического оператора И;
            SRCINVERT - комбинирует битовый образ, расположенный в области вывода, и исходный битовый образ с использованием логического оператора ИСКЛЮЧАЮЩЕГО ИЛИ;
            SRCPAINT - комбинирует элементы изображения битового образа, расположенного в области вывода, и исходного битового образа с использованием логического оператора ИЛИ;
            WHITENESS - закрашивает всю область вывода в белый цвет.

Описание

Копирует битовый образ из исходного контекста устройства в текущий контекст устройства. Приложение может выравнивать окна или их рабочие области по границе байтов для гарантии того, что функция BitBlt будет работать с прямоугольниками, выровненными по границам байт. (Для этого необходимо установить флаги CS_BYTEALIGNWINDOW или CS_BYTEALIGNCLIENT при регистрации класса окна.) Работа функции BitBlt с прямоугольниками, выровненными по границам байт, происходит намного быстрее, чем с прямоугольниками, не выровненными по границам байт. При необходимости задания стилей класса, обеспечивающих работу с прямоугольниками, выровненными по границам байт, в пользовательском контексте устройства, следует самостоятельно зарегистрировать класс окна, не полагаясь в этом на библиотеку MFC. Для этого используется глобальная функция AfxRegisterClass. Интерфейс графических устройств Windows преобразует аргументы nWidth и nHeight, используя контекст устройства в который производится копирование битового образа. Если метрики устройств не совпадают, GDI вызывает функцию Windows StretchBlt для сжатия или растяжения исходного битового образа. Если битовый образ в области вывода, исходный битовый образ и образец имеют различный формат цвета, функция BitBlt преобразует форматы исходного битового образа и образца к формату устройства вывода. При преобразовании используются как фоновый, так и основной битовые образы. При преобразовании монохромного битового образа в цветной функция BitBlt присваивает белому биту (1) цвет фона, а черному биту (0) основной цвет. При этом используются основной цвет (Foreground) и цвет фона (Background). При преобразовании цветного битового образа в монохромный функция BitBlt преобразует элементы изображения, имеющие цвет фона, в белые, а все остальные - в черные элементы изображения. Не все устройства могут работать с функцией BitBlt. Чтобы проверить возможность работы конкретного устройства с функцией BitBlt вызовите функцию GetDeviceCaps с аргументом RASTERCAPS.


CreateCompatibleDC

virtual BOOL CreateCompatibleDC(CDC* pDC);

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

Ненулевое, если функция завершилась успешно, и нулевое в противном случае.

Аргументы

  • pDC - указатель на объект класса контекста устройства. Если аргумент pDC имеет значение NULL, функция создает контекст устройства памяти, совместимый с системным дисплеем.

Описание

Создает контекст устройства памяти, совместимый с устройством, определяемым аргументом pDC. Контекст устройства памяти представляет собой блок памяти, соответствующий поверхности экрана. Он может использоваться для создания в памяти изображений перед копированием их на совместимое устройство. При создании контекста устройства памяти GDI автоматически выбирает в него монохромный битовый образ размером 1х1 элемент изображения. Функции вывода информации интерфейса графических устройств могут работать с контекстом устройства памяти только в том случае, если в него был выбран объект класса битового образа. Эта функция позволяет создавать совместимые контексты устройств только для устройств, обеспечивающих возможность вывода растровых изображений. Способ передачи информации битовыми блоками описан при рассмотрении функции CDC::BitBlt. Для определения того, способно ли конкретное устройство выводить растровые изображения необходимо вызвать функцию CDC::GetDeviceCaps с аргументом RC_BITBLT.


EndDoc

int EndDoc();

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

Больше или равно нулю, если функция завершилась успешно, в противном случае возвращается значение ошибки, которое может принимать одно из следующих значений. SP_ERROR - неизвестная ошибка.
  • SP_OUTOFDISK - недостаточно дискового пространства выделенного для спулинга и оно не может быть увеличено.
  • SP_OUTOFMEMORY - недостаточно оперативной памяти для спулинга.
  • SP_USERABORT - пользователь прервал печать через Диспетчер печати.

Описание

Завершает текущий сеанс печати, инициированный вызовом функции StartDoc. Эта функция служит для замены управляющей последовательности ENDDOC, посылаемой принтеру, и должна вызываться непосредственно после успешного завершения процесса печати. Если в процессе сеанса печати возникла ошибка или процесс печати был прерван пользователем, для завершения процесса печати не следует вызывать функции EndDoc или AbortDoc. GDI автоматически завершит процесс прежде, чем он выдаст сообщение об ошибке. Эта функция не должна использоваться в метафайлах.


EndPage

int EndPage();

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

Больше или равно нулю, если функция завершилась успешно, в противном случае возвращается значение ошибки, которое может принимать одно из следующих значений. SP_ERROR - неизвестная ошибка.
  • SP_APPABORT - печать прекращена потому, что приложение завершило свою работу.
  • SP_USERABORT - пользователь прервал печать через Диспетчер печати.
  • SP_OUTOFDISK - недостаточно дискового пространства выделенного для спулинга и оно не может быть увеличено.
  • SP_OUTOFMEMORY - недостаточно оперативной памяти для спулинга.

Описание

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


FillRect

void FillRect(LPCRECT lpRect, CBrush* pBrush);

Аргументы

  • lpRect - указатель на объект структуры RECT, содержащий логические координаты заполняемого прямоугольника. В качестве данного аргумента может использоваться объект класса CRect.
  • pBrush - определяет кисть, используемую для заполнения прямоугольника.

Описание

Данная функция используется для заполнения указанного прямоугольника указанной кистью. Функция заполняет весь прямоугольник, включая его левую и верхнюю границы, но исключая его правую и нижнюю границы. Используемая кисть должна быть создана с использованием функций CBrush::CreateHatchBrush, CBrush::CreatePatternBrush или CBrush::CreateSolidBrush или должна быть получена с использованием функции Windows ::GetStockObject. В процессе своей работы функция FillRect проверяет значения величин, передаваемых в переменных top, bottom, left и right передаваемого ей в качестве аргумента объекта структуры RECT. Если величина bottom оказывается меньше либо равной величине top или величина right оказывается меньше либо равной величине left, то прямоугольник не рисуется. Функция FillRect аналогична функции CDC::FillSolidRect за тем исключением, что в функции FillRect указывается кисть, что в свою очередь означает, что данный прямоугольник может быть заполнен одним цветом, определенным трафаретом или заданным образцом. Функция FillSolidRect может заполнить данный прямоугольник только одним цветом (указанным в аргументе COLORREF). Функция FillRect, обычно, работает медленнее, чем функция FillSolidRect.


GetDeviceCaps

int GetDeviceCaps(int nIndex) const;

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

В случае успешного завершения функции возвращается значение запрашиваемого параметра.

Аргументы

Описание

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


GetSafeHdc

HDC GetSafeHdc() const;

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

Дескриптор контекста устройства.

Описание

Данная функция позволяет получить контекст устройств вывода m_hDC. Эта функция может работать с нулевыми указателями.


GetTextExtent

CSize GetTextExtent(LPCTSTR lpszString, int nCount) const;
CSize GetTextExtent(const CString& str) const;

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

Размер строки (в логических единицах) записанный в объект класса CSize.

Аргументы

  • lpszString - указатель на символьную строку. В качестве данного аргумента может также выступать объект класса CString.
  • nCount - определяет количество символов в строке.
  • str - объект класса CString содержащий измеряемую строку.

Описание

Данная функция позволяет определить ширину и высоту строки символов при выводе ее установленным в настоящее время шрифтом. Информация извлекается из переменной m_hAttribDC данного контекста устройства. Установки текущей области отсечки не влияют на возвращаемые функцией GetTextExtent значения. Поскольку некоторые устройства не помещают символы строки в последовательный массив ячеек (уменьшают апрош в характерных сочетаниях пар знаков) сумма размеров отдельных символов в строке может не совпадать с размером всей строки.


IsPrinting

BOOL IsPrinting() const;

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

Ненулевое, если данный объект класса CDC является объектом класса контекста устройства принтера, и нулевое в противном случае.

Описание

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


Rectangle

BOOL Rectangle(int x1, int y1, int x2, int y2);
BOOL Rectangle(LPCRECT lpRect);

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

Ненулевое, в случае успешного завершения функции, и нулевое в противном случае.

Аргументы

  • x1 - определяет горизонтальную координату левого верхнего угла прямоугольника (в логических единицах).
  • y1 - определяет вертикальную координату левого верхнего угла прямоугольника (в логических единицах).
  • x2 - определяет горизонтальную координату правого нижнего угла прямоугольника (в логических единицах).
  • y2 - определяет вертикальную координату правого нижнего угла прямоугольника (в логических единицах).
  • lpRect - определяет прямоугольник в логических единицах. В качестве данного аргумента может выступать как объект класса CRect, так и указатель на объект структуры RECT.

Описание

Рисует прямоугольник, используя текущее перо. Внутренняя поверхность прямоугольника заполняется текущей кистью. Прямоугольник доходит до, но не включает свои правые и нижние координаты. Это означает, что высота прямоугольника составляет y2 - y1, а его ширина составляет x2 - x1. Как высота, так и ширина прямоугольника должны составлять больше 2 и меньше 32 767 логических единиц.


SelectClipRgn

virtual int SelectClipRgn(CRgn* pRgn);
int SelectClipRgn(CRgn* pRgn, int nMode);

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

Тип области. Может принимать одно из следующих значений:

  •  COMPLEXREGION - новая область отсечки имеет перекрывающиеся границы;
  • ERROR - используется недопустимый контекст устройства или недопустимая область;
  • NULLREGION - создана пустая область отсечки;
  • SIMPLEREGION - новая область отсечки не имеет перекрывающихся границ.
  • Аргументы

    • pRgn - указатель на выбранную область. В первой версии функции SelectClipRgn нулевое значение данного аргумента означает, что выбирается вся рабочая область окна, а область отсечки совпадает с границами окна.
      Во второй версии функции SelectClipRgn данный аргумент может принимать нулевое значение только в режиме RGN_COPY.
    • nMode - определяет выполняемую операцию. Может принимать одно из следующих значений:
      RGN_AND - новая область отсечки представляет собой пересечение текущей области отсечки и области, определенной в аргументе pRgn;
      RGN_COPY - новая область отсечки полностью совпадает с областью, заданной в аргументе pRgn. В этом случае данная функция идентична своей первой версии, однако, если аргумент pRgn в данной версии равен нулю, то в качестве новой области отсечки принимается область отсечки по умолчанию (нулевая область);
      RGN_DIFF - новая область отсечки представляет собой текущую область отсечки, из которой исключены области, перекрывающиеся с областью, заданной в аргументе pRgn;
      RGN_OR - новая область отсечки представляет собой объединение текущей области отсечки и области, заданной в аргументе pRgn;
      RGN_XOR - новая область отсечки представляет собой объединение текущей области отсечки и области, заданной в аргументе pRgn, за исключением областей их пересечения.

    Описание

    Выбирает указанную область как новую область отсечки для данного контекста устройства. Используется копия указанной области. Сама область может использоваться в неограниченном количестве объектов класса контекста устройств или может быть удалена. Функция предполагает, что координаты указанной области заданы в единицах устройства. Некоторые принтеры поддерживают в текстовом режиме более высокое разрешение, чем в графическом, для поддержания разрешения, необходимого для задания параметров шрифтов. В этих устройствах при запросе его разрешения сообщаются величины, используемые в режиме высокого разрешения, то есть в текстовом режиме. После этого в данных устройствах производится перерасчет координат графических объектов таким образом, чтобы несколько точек, заданных с высоким разрешением, отображались в одной точке, выводимой с графическим разрешением. При использовании режима вывода текста необходимо всегда вызывать функцию SelectClipRgn. Приложения, использующие масштабирование графических объектов при выводе их с использованием функций GDI должны использовать функцию GETSCALINGFACTOR, позволяющую определить параметры масштабирования данного принтера. Использование неправильного параметра масштабирования может привести к обрезанию выводимой информации. При использовании области для задания области отсечки графических объектов GDI делит полученные координаты на величину параметра масштабирования. При использовании области для задания области отсечки текста, такого преобразования координат не производится. Параметр масштабирования равный 1 приводит к делению координат на 2, а параметр масштабирования равный 2 приводит к делению координат на 4, и так далее.


    SelectObject

    CPen* SelectObject(CPen* pPen);
    CBrush* SelectObject(CBrush* pBrush);
    virtual CFont* SelectObject(CFont* pFont);
    CBitmap* SelectObject(CBitmap* pBitmap);
    int SelectObject(CRgn* pRgn);

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

    Указатель на замещаемый объект одного из классов, производных от класса CGdiObject, например на объект класса CPen. Тип возвращаемого значения зависит от версии используемой функции. В случае возникновения ошибки возвращается нулевое значение. Эта функция может возвращать указатель на временный объект. Это означает, что указатель на данный объект можно использовать только в пределах функции обработки одного сообщения Windows. Более подробная информация содержится в описании функции CGdiObject::FromHandle. Версия функции, аргументом которой является указатель на объект класса CRgn, выполняет ту же функцию, что и функция SelectClipRgn. Ее возвращаемая величина может принимать следующие значения:
    • COMPLEXREGION - новая область отсечки имеет пересекающиеся границы;
      ERROR - ошибка при задании контекста устройства или недопустимая область отсечки;
      NULLREGION - новая область отсечки представляет собой пустую область;
      SIMPLEREGION - новая область отсечки не имеет пересекающихся границ.

    Аргументы

    • pPen - указатель на объект класса CPen.
    • pBrush - указатель на объект класса CBrush.
    • pFont - указатель на объект класса CFont.
    • pBitmap - указатель на объект класса CBitmap.
    • pRgn - указатель на объект класса CRgn.

    Описание

    Выбирает объект класса в контекст устройства. Класс CDC содержит пять версий данной функции, отличающихся типом аргумента и возвращаемого значения. В качестве аргументов данной функции могут выступать объекты классов пера, кисти, шрифта, битового образа и области. Выбранный в контекст объект замещает соответствующий объект в контексте устройства. Например, если аргумент pObject обобщенной версии данной функции указывает на объект класса CPen, то данная функция замещает в данном контексте устройства текущее перо на перо, указанной в аргументе pObject. Приложение может выбирать битовый образ только в контекст устройства памяти и этот битовый образ не может быть выбран одновременно в два и более контекстов устройства памяти. Формат битового образа должен быть монохромным или совместимым с контекстом данного устройства. В противном случае функция SelectObject возвращает ошибку. В версии Windows 3.1 и более поздних версиях функция SelectObject возвращает ту же самую величину независимо от того, используется ли она в метафайлах или нет. В предыдущих версиях данная функция при вызове ее в метафайлах возвращала ненулевое значение в случае своего успешного завершения, и нулевое значение в противном случае. 


    SetMapMode

    virtual int SetMapMode(int nMapMode);

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

    Предыдущий режим отображения.

    Аргументы

    • nMapMode - определяет новый режим отображения. Может принимать одно из следующих значений:
      MM_ANISOTROPIC - логические единицы преобразуются в произвольные единицы с произвольным направлением осей координат. Установка режима отображения MM_ANISOTROPIC не изменяет установок в текущем окне и в текущей рабочей области окна. Для изменения единиц измерения, ориентации и масштаба вызываются функции SetWindowExt и SetViewportExt;
      MM_HIENGLISH - каждая логическая единица преобразуется в 0.001 дюйма. Рост величин по горизонтальной оси приводит к перемещению вправо, а рост величин по вертикальной оси приводит к перемещению вверх;
      MM_HIMETRIC - каждая логическая единица преобразуется в 0.01 миллиметра. Рост величин по горизонтальной оси приводит к перемещению вправо, а рост величин по вертикальной оси приводит к перемещению вверх;
      MM_ISOTROPIC - логические единицы преобразуются в произвольные единицы с произвольным направлением осей координат, но с одинаковым масштабом по осям. Для изменения единиц измерения, ориентации и масштаба вызываются функции SetWindowExt и SetViewportExt. Для обеспечения одинакового масштаба отображения по осям GDI производит необходимые настройки;
      MM_LOENGLISH - каждая логическая единица преобразуется в 0.01 дюйма. Рост величин по горизонтальной оси приводит к перемещению вправо, а рост величин по вертикальной оси приводит к перемещению вверх;
      MM_LOMETRIC - каждая логическая единица преобразуется в 0.1 миллиметра. Рост величин по горизонтальной оси приводит к перемещению вправо, а рост величин по вертикальной оси приводит к перемещению вверх;
      MM_TEXT - каждая логическая единица преобразуется в 1 элемент изображения. Рост величин по горизонтальной оси приводит к перемещению вправо, а рост величин по вертикальной оси приводит к перемещению вниз;
      MM_TWIPS - каждая логическая единица преобразуется в 1/20 пики (поскольку пика составляет 1/72 дюйма, то данная величина составляет 1/1440 дюйма). Рост величин по горизонтальной оси приводит к перемещению вправо, а рост величин по вертикальной оси приводит к перемещению вверх.

    Описание

    Устанавливает режим отображения. Режим отображения определяет единицы измерения, используемые при преобразовании логических единиц в единицы устройства. Кроме того, режим отображения определяет направление осей координат. Режим отображения MM_TEXT позволяет приложению непосредственно работать с элементами изображения устройства. В этом случае одна логическая единица соответствует одному элементу изображения устройства. Физический размер элементов изображения зависит от конкретного устройства. Режимы отображения MM_HIENGLISH, MM_HIMETRIC, MM_LOENGLISH, MM_LOMETRIC и MM_TWIPS используются при выводе изображений, размеры которых не зависят от устройства, на котором они выводятся. Режим отображения MM_ISOTROPIC обеспечивает соотношение масштабов горизонтальной и вертикальной оси, равное 1:1. В режиме отображения MM_ANISOTROPIC горизонтальная и вертикальная оси имеют независимый масштаб.


    SetViewportOrg

    virtual CPoint SetViewportOrg(int x, int y);
    virtual CPoint SetViewportOrg(POINT point);

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

    Предыдущее значение начала отсчета рабочей области (в координатах устройства) как объект класса CPoint.

    Аргументы

    • x - определяет горизонтальную координату начала отсчета рабочей области, выраженную в координатах устройства. Значение данного аргумента должно лежать в пределах системы координат устройства.
    • y - определяет вертикальную координату начала отсчета рабочей области, выраженную в координатах устройства. Значение данного аргумента должно лежать в пределах системы координат устройства.
    • point - определяет координаты начала отсчета рабочей области. Значение данного аргумента должно лежать в пределах системы координат устройства. В качестве данного аргумента может выступать как объект структуры POINT, так и объект класса CPoint.

    Описание

    Устанавливает начало отсчета рабочей области контекста устройства. Рабочая область, наряду с окном контекста устройства, определяет то, каким образом GDI преобразует координаты, указанные в логической системе координат, в систему координат физического устройства. Другими словами, как GDI преобразует логические координаты в координаты устройства. Начало отсчета рабочей области определяет точку, заданную в системе координат устройства, в которую GDI помещает начало координат окна, под которым понимается точка, заданная в логической системе координат, определяемая функцией SetWindowOrg. GDI преобразует все остальные точки изображения, следуя той же процедуре, которая использовалась для преобразования начала координат окна в начало отсчета рабочей области. Например, все точки круга, описанного вокруг точки начала координат окна преобразуются в точки круга, описанного вокруг начала отсчета рабочей области. Аналогично, все точки линии, проходящей через начало координат окна преобразуются в точки линии, проходящей через начало отсчета рабочей области.


    StartDoc

    int StartDoc(LPDOCINFO lpDocInfo);

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

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

    Аргументы

    • lpDocInfo - указатель на объект структуры DOCINFO, содержащей имя файла документа и имя выходного файла.

    Описание

    Информирует драйвер устройства о начале нового сеанса печати и о том, что все последующие вызовы функций StartPage и EndPage будут относиться к этому сеансу печати, пока не будет вызвана функция EndDoc. Это гарантирует, что при печати многостраничного документа процесс печати не будет прерываться другими сеансами. В Windows версии 3.1 и последующих версиях данная функция заменяет управляющую последовательность STARTDOC, посылаемую принтеру. Функция StartDoc не должна использоваться в метафайлах.


    StartPage

    int StartPage();

    Описание

    Данная функция вызывается для подготовки принтера к приему данных. Функция StartPage служит для замены управляющих последовательностей NEWFRAME и BANDINFO, посылаемых принтеру. Система делает недоступным вызов функции ResetDC между вызовами функций StartPage и EndPage.


    TextOut

    virtual BOOL TextOut(int x, int y, LPCTSTR lpszString, int nCount);
    BOOL TextOut(int x, int y, const CString& st);

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

    Ненулевое, если функция успешно завершает свою работу, и нулевое в противном случае.

    Аргументы

    • x - определяет горизонтальную координату исходной точки текста.
    • y - определяет вертикальную координату исходной точки текста.
    • lpszString - указатель на выводимую текстовую строку.
    • nCount - размер выводимой строки в байтах.
    • str - объект класса CString, содержащий выводимый текст.

    Описание

    Данная функция выводит текстовую строку в заданной позиции с использованием текущего шрифта. Под координатами текста понимается левый верхний угол ячейки текста. По умолчанию текущая позиция не используется или обновляется данной функцией. Если приложению необходимо обновить свою текущую позицию при вызове функции TextOut, оно должно предварительно вызвать функцию SetTextAlign, установив в ее аргументе nFlags флаг TA_UPDATECP. После установки данного флага Windows игнорирует значения аргументов x и y при последующих вызовах функции TextOut и производит вывод текста в текущей позиции. 


    CDialog

    Класс CDialog является родительским классом для пользовательских классов, используемый для отображения диалоговых окон на экране. Диалоговые окна могут быть модальными и немодальный. Модальное диалоговое окно должно быть закрыто пользователем прежде, чем приложение сможет продолжить свою работу. Немодальное диалоговое окно допускает работу пользователя с приложением до своего закрытия и удаления с экрана. Диалоговый объект является комбинацией шаблона диалога и одного из пользовательских классов, производных от класса CDialog. Для создания шаблона диалога и сохранения его в файле ресурсов обычно используется редактор диалога. Запуск мастера ClassWizard из окна редактора диалога позволяет создать соответствующий данному диалоговому окну класс, производный от класса CDialog. Диалоговое окно, подобно любому другому окну, получает сообщения от Windows. Основным назначением объекта пользовательского класса диалога является обработка сообщений, поступающих от объектов классов элементов управления данного диалогового окна, при взаимодействии пользователя с соответствующими элементами управления. Мастер ClassWizard просматривает потенциальные сообщения, которые может послать каждый элемент управления данного диалогового окна, и предоставляет пользователю возможность выбора тех сообщений, которые он действительно собирается обрабатывать. После выбора пользователем обрабатываемых сообщений, мастер ClassWizard добавляет соответствующие макросы в карту сообщения и создает заготовки функций обработки для данных сообщений в пользовательском классе диалогового окна. Все классы диалоговых окон, кроме самых простейших, содержат переменные для хранения информации, необходимой для работы с элементами управления диалогового окна. Мастер ClassWizard просматривает все классы элементов управления созданного пользователем диалогового окна и определяет, какие переменные могут понадобиться для работы с ними. Пользователь сам выбирает тип переменной и допустимый диапазон значений для каждой из создаваемых мастером переменных. После этого мастер ClassWizard добавляет описание соответствующих переменных в пользовательский класс диалога. После закрытия своего диалогового окна мастер ClassWizard составляет карту данных, позволяющую осуществлять автоматический обмен данными между переменными объекта класса диалогового окна и объектами классов элементов управления данного окна. Карта данных содержит функции, инициализирующие элементы управления диалогового окна соответствующими значениями, получающие информацию, содержащуюся в этих объектах, и проверяющие правильность передаваемой информации. Чтобы создавать модальное диалоговое окно, необходимо создать объект на стеке, используя конструктор пользовательского диалогового класса, присвоить его переменным исходные значения, а затем вызвать функцию DoModal, создающую окно диалога и его элементы управления. Чтобы создать немодальный диалог, вызовите в конструкторе вашего диалогового класса функцию Create. Одним из способов создания диалогового окна является создание в памяти объекта структуры DLGTEMPLATE. Для этого, после создания указателя на объект класса CDialog вызовите функцию CreateIndirect для создания немодального диалогового окна, или вызовите функции InitModalIndirect и DoModal для создания модального диалогового окна. Мастер ClassWizard помещает функции обмена и проверки правильности информации в функцию CWnd::DoDataExchange, которую он же и включает в класс пользовательского диалогового окна. Вызов данной функции обычно осуществляется в функции CWnd::UpdateData. Приложение вызывает функцию UpdateData, когда пользователь нажимает кнопку OK, чтобы закрыть модальное диалоговое окно. (Данные не обновляются при нажатии кнопки Cancel (Отмена)). Заданная по умолчанию реализация функции OnInitDialog вызывает функцию UpdateData, чтобы установить начальные значения переменных в объектах классов элементов управления. Обычно пользователь перегружает функцию OnInitDialog для проведения нестандартных операций по инициализации объектов классов элементов управления. Функция OnInitDialog вызывается после создания всех объектов классов элементов управления в диалоговом окне и непосредственно перед отображением диалогового окна на экране. Пользователь может вызывать функцию CWnd::UpdateData в любой функции класса модального или немодального диалогового окна. Для установки цвета фона диалогового окна в приложении используется функция CWinApp::SetDialogBkColor. Модальное диалоговое окно закрывается автоматически, когда пользователь нажимает кнопки OK или Cancel (Отмена) или когда программа непосредственно вызывает функцию EndDialog. При создании класса немодального диалогового окна необходимо всегда перегружать функцию OnCancel и вызывать в ней функцию DestroyWindow. При этом не следует вызывать функцию базового класса CDialog::OnCancel, поскольку она вызывает функцию EndDialog, которая сделает данное диалоговое окно невидимым, но не уничтожит его класс. Кроме того, при создании классов немодальных диалоговых окон необходимо перегрузить функцию PostNcDestroy, добавив в него оператор delete this, поскольку немодальные диалоговые окна обычно создаются оператором new. Объекты классов модальных диалоговых окон обычно являются локальными объектами функций и не нуждаются в самоликвидации в перегруженной функции PostNcDestroy. Описание данного класса содержится в файле заголовка afxwin.h.


    DoModal

    virtual int DoModal();

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

    Целочисленное значение, соответствующее значению аргумента nResult функции CDialog::EndDialog, которая использовалась для закрытия данного диалогового окна. Возвращаемое значение может быть -1, если функции не удалось создать данное диалоговое окно, или IDABORT, если при его создании возникла какая-либо другая ошибка.

    Описание

    Функция DoModal используется для отображения модального диалогового окна и возвращения результатов после его закрытия. Данная функция поддерживает интерфейс с пользователем при отображении диалогового окна. Она делает открытое ею диалоговое окно модальным, то есть перехватывает все обращения пользователя к приложению и реагирует только на обращения к элементам управления данного диалогового окна. Все остальные обращения пользователя игнорируются, кроме немаскируемого прерывания. Если пользователь нажимает в диалоговом окне кнопку OK или кнопку Cancel (Отмена), то вызываются соответствующие им функции обработки сообщений OnOK или OnCancel, закрывающие данное диалоговое окно. По умолчанию функция OnOK обновляет содержимое переменных в объекте класса диалогового окна, проверяет их правильность и закрывает диалоговое окно, возвращая величину IDOK, а функция OnCancel закрывает диалоговое окно без обновления значений переменных в данном объекте и возвращает величину IDCANCEL. Пользователь может перегружать эти функции. В настоящее время в стандартный процесс создания модального диалогового окна включена функция PreTranslateMessage.


    CDocTemplate

    CDocTemplate представляет собой абстрактный класс, определяет базисные функциональные возможности шаблонов документа. В функции CWinApp::InitInstance обычно создается один или несколько шаблонов документа, определяющих взаимодействие трех типов классов: класса документа, являющегося потомком класса Cdocument;
    класса представления, отображающего данные, хранящиеся в связанном с ним классе документа. Этот класс может быть потомком класса CView, CScrollView, CFormView или CEditView (класс CEditView может непосредственно использоваться в шаблонах документов);
    класса окна, связанного с классом представления. Для однооконного приложения (SDI) базовым классом является класс CFrameWnd. Для многооконного приложения (MDI) базовым классом является класс CMDIChildWnd. Если приложение не использует нестандартные методы работы с окном, то в шаблоне документа может непосредственно использоваться класс CFrameWnd или CMDIChildWnd. В противном случае пользователю придется создать и использовать собственный класс, производный от одного из вышеперечисленных классов.
    Приложение должно создавать по одному шаблону документа для каждого используемого в нем типа документа. Например, если приложение использует электронные таблицы и текстовые документы, оно должно иметь два объекта класса шаблона документа. Каждый шаблон документа ответственен за создание и управление всеми документами типа. Шаблон документа сохраняет указатели на объекты класса CRuntimeClass, соответствующие классам документа, представления и окна. Эти объекты класса CRuntimeClass создаются при создании шаблона документа. Шаблон документа содержит идентификаторы ресурсов, используемых совместно с данным типом документа (например, меню, значки или таблицы акселераторов). Шаблон документа также имеет строки, содержащие дополнительную информацию относительно типа документа. Они включают имя типа документа (например, "Рабочий лист") и расширение файла (например, ".xls"). Кроме того, шаблон документа может содержать другие строки, содержащие информацию, используемую интерфейсом пользователя приложения и диспетчером файлов Windows. Если приложение является контейнером объектов OLE, шаблон документа содержит также идентификатор меню, используемого при работе с данным объектом. Если приложение является сервером объектов OLE, шаблон документа, кроме идентификатора меню, содержит идентификатор инструментальной панели. Для определения этих дополнительных ресурсов OLE используются функции SetContainerInfo и SetServerInfo. Поскольку класс CDocTemplate является абстрактным классом, то с его объектами нельзя работать непосредственно. Типичное приложение использует один из двух производных от него классов, определенных в библиотеке MFC: CSingleDocTemplate, обеспечивающий работу однооконного приложения, и CMultiDocTemplate, обеспечивающий работу многооконного приложения. Если создаваемое пользователем приложение требует парадигмы интерфейса пользователя, существенно отличающейся от SDI или MDI, ему необходимо создать свой собственный класс, производный от CDocTemplate. Описание данного класса содержится в файле заголовка afxwin.h. 


    GetDocString

    virtual BOOL GetDocString(CString& rString, enum DocStringIndex index) const;

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

    Ненулевое, если найдена указанная строка, и ноль в противном случае.

    Аргументы

    • rString - ссылка на объект класса CString в который будет помещена искомая строка после окончания работы функции.
    • index - индекс текстового поля, которое следует извлечь из строкового ресурса, связанного с данным объектом класса шаблона документа. Этот аргумент может принимать одно из следующих значений:
      CDocTemplate::windowTitle - текст, который появляется в заголовке окна приложения (например, "Microsoft Excel"). Данное поле используется только в однооконном приложении;
      CDocTemplate::docName - корневое имя для имени документа по умолчанию (например, "Sheet"). Это имя плюс порядковый номер, составляют имя нового документа данного типа при его создании в результате выбора команды меню File|New (Файл|Создать) (например, "Sheet1" или "Sheet2"). Если это поле пусто, то в качестве корневого имени используется "Untitled";
      CDocTemplate::fileNewName - имя данного типа документа. Если данное приложение использует более одного типа документа, то это имя выводится в диалоговом окне New (например, "Worksheet"). Если это имя не задано, то новый документ данного типа не может быть создан, если приложение использует несколько типов документов;
      CDocTemplate::filterName - описание типа документа и его расширения, используемого для поиска документов данного типа. Эта строка отображается в раскрывающемся списке Тип Файлов диалоговых окон Open (Открыть) и Save As (Сохранить как) (например, "Worksheets (*.xls)"). Если это текстовое поле пусто, то файлы данного типа отображаются только в режиме просмотра всех файлов директория;
      CDocTemplate::filterExt - расширение, используемое документами данного типа (например, ".xls"). Если это текстовое поле пусто, то данный тип документа не имеет расширения, подставляемого по умолчанию к его имени;
      CDocTemplate::regFileTypeId - идентификатор типа документа, сохраняемый в базе данных реестра, поддерживаемого Windows. Эта строка используется исключительно для системных целей (например, "ExcelWorksheet"). Если это текстовое поле пусто, то данный тип документа не может быть зарегистрирован в диспетчере файлов Windows;
      CDocTemplate::regFileTypeName - имя типа документа, хранимое в базе данных реестра, поддерживаемого Windows. Эта строка может отображаться в диалоговых окнах приложений, имеющих доступ к базе данных реестра (например, "Microsoft Excel Worksheet").

    Описание

    Данная функция вызывается для получения текстовых строк, описывающих тип документа. Строка, содержащая эти строки в виде своих полей, хранится в объекте класса шаблона документа и передается туда из строкового ресурса, хранящегося в файле ресурсов данного приложения. Приложение вызывает данную функцию, когда ему необходимо получить текстовую информацию, используемую им для организации интерфейса пользователя. Если для файлов, хранящих документы данного типа, определено особое расширение, то приложение вызывает эту функцию для включения соответствующей записи в базу данных реестра Windows, что позволяет открывать данные документы средствами диспетчера файлов Windows. Эта функция может вызываться только в классах, производных от класса CDocTemplate.


    CDocument

    Класс CDocument обеспечивает основные функциональные возможности создаваемого пользователем класса документа. Документ представляет собой модуль данных, используемых пользователем в своем приложении, и обычно открывается командой File|Open (Файл|Открыть) и сохраняется командой File|Save (Файл|Сохранить). Класс CDocument содержит методы, обеспечивающие создание документа, его загрузку и сохранение. Приложение может поддерживать больше чем один тип документа. Например, оно может работать как с электронными таблицами, так и с текстовыми документами. Каждый тип документа должен быть включен в один из шаблонов документа. Шаблон документа определяет ресурсы (например, меню, значок или таблица акселератора) используемые данным типом документа. Каждый документ содержит указатель на связанный объект CDocTemplate. Пользователи взаимодействуют с документом через связанный с ним объект класса CView. Класс представления выполняет отображение документа в окне и преобразует вводимую пользователем информацию в соответствующие изменения в документе. Один класс документа может быть связан с несколькими классами представления. Когда пользователь открывает окно документа, приложение создает объект соответствующего класса представления и присоединяет его к документу. Шаблон документа определяет класс представления и класс окна, соответствующие данному типу документа. Классы документов включены в стандартную процедуру обработки сообщений в приложении и, следовательно, могут получать команды от стандартных компонентов интерфейса пользователя, например, от команды меню File|Save (Файл|Сохранить). Документ получает команды, посланные активным классом представления. Если документ не обрабатывает данную команду, то она передается шаблону документа для дальнейшей обработки. Когда в документ вносятся изменения, каждый из связанных с ним объектов класса представления должен отразить эти изменения. Класс CDocument имеет функцию-член класса UpdateAllViews, позволяющую приложению сообщить всем связанным с данным документом объектам класса представления о том, что в документ внесены изменения и данные объекты должны внести соответствующие изменения в выводимую ими информацию. Перед закрытием документа приложение запрашивает пользователя о необходимости сохранить внесенные в него изменения. Чтобы создать собственный класс документа: 1. Создайте класс, производный от класса CDocument.
    2. Включите в него переменные для хранения пользовательских данных.
    3. Создайте методы для чтения и внесения изменений в эти данные. В основном этими методами будут пользоваться связанные с документом объекты класса представления.
    4. Перегрузите функцию CObject::Serialize, позволяющую читать и записывать документы на диск.
    Описание данного класса содержится в файле заголовка afxwin.h.


    GetFile

    virtual CFile* GetFile(LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pError);

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

    Указатель на объект класса CFile.

    Аргументы

    • lpszFileName - строка, содержащая путь к открываемому файлу. Путь может быть как относительным, так и абсолютным.
    • nOpenFlags - флаги, определяющие режим доступа к файлу, определяющие действия, которые необходимо предпринять при открытии файла. Эти флаги могут принимать те же самые значения, что и соответствующие флаги конструктора класса CFile и они, также, объединяются оператором побитового ИЛИ (|).Необходимо указать как минимум один флаг доступа и один флаг разделения ресурсов. Флаги modeCreate и modeNoInherit являются не обязательными.
    • pError - указатель на существующий объект класса исключений файла, в который будут помещены результаты открытия файла.

    Описание

    Данная функция используется для получения указателя на объект класса CFile.


    GetPathName

    const CString& GetPathName() const;

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

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

    Описание

    Данная функция позволяет получить полный путь к файлу документа на диске.


    OnNewDocument

    virtual BOOL OnNewDocument();

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

    Отличное от нуля, если документ был успешно инициализирован, в противном случае - 0.

    Описание

    Вызывается приложением как часть обработки команды меню File|New (Файл|Создать). По умолчанию данная функция вызывает функцию DeleteContents, гарантирующую, что данный документ пуст, и отмечает данный документ, как пустой. В данную функцию следует помещать инициализацию всех структур данных нового документа, причем все операторы инициализации должны располагаться после вызова функции базового класса. Если данная функция вызывается в однооконном приложении, то она уничтожает содержимое существующего документа. В случае многооконного приложения при выборе команды File|New (Файл|Создать) происходит создание нового документа и уже для него вызывается данная функция. Поскольку в однооконном приложении класс документа создается с помощью конструктора при инициализации приложения, а новые документы создаются путем уничтожения текущего документа при запуске функции OnNewDocument, то все процедуры инициализации документа в однооконном приложении должны располагаться в данной функции, а не в конструкторе.


    ReleaseFile

    virtual void ReleaseFile(CFile* pFile, BOOL bAbort);

    Аргументы

    • pFile - указатель на объект класса CFile, который необходимо освободить.
    • bAbort - определяет функцию, которая будет использована при освобождении файла. Если данный аргумент имеет значение FALSE, то для освобождения файла используется функция CFile::Close, в противном случае используется функция CFile::Abort.

    Описание

    Данная функция вызывается приложением для освобождения файла, делая его доступным для других приложений. Если аргумент bAbort имеет значение TRUE, то функция ReleaseFile вызывает функцию CFile::Abort и файл освобождается. Функция CFile::Abort не вызывает исключения. Если аргумент bAbort имеет значение FALSE, то функция ReleaseFile вызывает функцию CFile::Close и файл освобождается. Данная функция перегружается в том случае, если пользователь должен выполнить определенные действия перед закрытием файла. 


    SetModifiedFlag

    void SetModifiedFlag(BOOL bModified = TRUE);

    Аргументы

    • bModified - флаг, указывающий, вносились ли в документ изменения.

    Описание

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


    UpdateAllViews

    void UpdateAllViews(CView* pSender, LPARAM lHint = 0L, CObject* pHint = NULL);

    Аргументы

    • pSender - указатель на объект класса представления, вносящий изменения в данный документ, или NULL, если необходимо внести изменения во все объекты класса представления, связанные с данным документом.
    • lHint - содержит информацию о вносимых изменениях.
    • pHint - указатель на объект, содержащий информацию о вносимых изменениях.

    Описание

    Данная функция вызывается после внесения изменений в документ. Ее вызов должен располагаться после вызова функции SetModifiedFlag. Функция UpdateAllViews извещает все объекты класса представления, связанные с данным документом, кроме объекта класса представления на который указывает аргумент pSender, о том, что в данный объект класса документа были внесены изменения. Обычно данная функция вызывается после того, как пользователь через один из объектов класса представления внес изменения в данный документ. Функция SetModifiedFlag вызывает функцию CView::OnUpdate для каждого объекта класса представления, кроме объекта, через который было внесено изменение. При этом каждому из объектов класса представления передаются значения аргументов pHint и lHint. Эти аргументы используются для передачи информации объектам класса представления о характере изменений, внесенных в документ. Эта информация может передаваться в аргументе lHint и/или для хранения этой информации может быть создан объект класса, производного от класса CObject, указатель на который должен передаваться в аргументе pHint. Перегрузка функции CView::OnUpdate в пользовательском классе представления позволяет оптимизировать процедуру обновления содержимого окна на основе переданной данной функции информации.


    CEdit

    Объект класса CEdit обеспечивает функционирование элемента управления текстового поля Windows. Текстовое поле Windows представляет собой прямоугольное дочернее окно, в которое пользователь может вводить текст. Данный элемент управления может создаваться в шаблоне диалога или непосредственно в программе пользователя. В обоих случаях сначала вызывается конструктор класса CEdit, создающий объект данного класса, а затем вызывается функция Create, создающая текстовое поле Windows и связывающая его с объектом класса CEdit.
    Объект класса, производного от класса CEdit может быть создан за один шаг, если в его конструкторе будет вызвана функция Create. Объект класса CEdit наследует многие возможности объекта класса CWnd. Чтобы записать текст в объект класса Cedit, используется функция CWnd::SetWindowText, а чтобы считать его оттуда используется функция CWnd::GetWindowText. Эти функции позволяют записать или считать весь текст, содержащийся в данном элементе управления даже в том случае, когда он является многострочным. В том случае, если данный элемент управления является многострочным, в нем могут использоваться следующие функции для работы с частью содержащегося в нем текста: CEdit::GetLine, CEdit::SetSel, CEdit::GetSel и CEdit::ReplaceSel.
    Чтобы обработать сообщение, посылаемое текстовым полем своему родительскому окну (обычно это объект класса, производного от CDialog), добавьте соответствующий макрос в карту сообщений и создайте функцию для обработки данного сообщения. Макрос карты сообщений для данного типа сообщений имеет следующий формат: ON_Notification(id, memberFxn) где id - идентификатор дочернего окна элемента управления, посылающего сообщение, а memberFxn - имя функции обработки данного сообщения в классе родительского окна. Прототип функции обработки сообщения имеет следующий формат: afx_msg void memberFxn(); Ниже приведен список макросов карты сообщений, которые могут использоваться для обработки сообщений, посылаемых данным элементом управления:

    • ON_EN_CHANGE - пользователь произвел действие, которое может привести к изменению текста, содержащегося в текстовом поле. В отличие от сообщения EN_UPDATE данное сообщение посылается после того, как Windows произведет обновление экрана;
    • ON_EN_ERRSPACE - для данного текстового поля не может быть выделен необходимый для него объем памяти;
    • ON_EN_HSCROLL - пользователь воспользовался горизонтальной полосой прокрутки данного элемента управления. Сообщение посылается родительскому окну до обновления экрана;
    • ON_EN_KILLFOCUS - данное текстовое поле потеряло фокус ввода;
    • ON_EN_MAXTEXT - текущая вставка привела к превышению определенного в данном объекте максимального числа символов, что привело к ее урезанию. Данное сообщение посылается также в том случае, если текстовое поле не имеет стиля ES_AUTOHSCROLL, а количество символов в текущей строке превышает ширину текстового поля. Другим случаем, когда посылается данное сообщение, является случай, когда текстовое поле не имеет стиля ES_AUTOVSCROLL, а количество строк в нем превышает высоту текстового поля, или же текстовое поле не имеет стиля ES_AUTOHSCROLL, а количество символов в текущей строке превышает ширину текстового поля;
    • ON_EN_SETFOCUS - данное текстовое поле получило фокус ввода;
    • ON_EN_UPDATE - в текстовом поле будет выводиться измененный текст. Посылается после того, как элемент управления отформатирует текст, но до того, как этот текст будет выведен в текстовое поле, что позволяет изменить размеры текстового поля в случае необходимости;
    • ON_EN_VSCROLL - пользователь воспользовался вертикальной полосой прокрутки данного элемента.

    При создании объекта класса CEdit в диалоговом окне этот объект автоматически уничтожается при закрытии диалогового окна. То же самое происходит и в том случае, когда объект класса CEdit создается в шаблоне диалога. Если объекта класса CEdit создается в окне, то от пользователя может потребоваться его уничтожить. Если же объект класса CEdit создается в стеке, то он уничтожается автоматически. При создании объекта класса CEdit в куче с использованием оператора new его необходимо уничтожить после завершения работы пользователя с элементом управления Windows с использованием оператора delete. Если в объект класса, производного от CEdit, была распределена какая-либо память, то необходимо перегрузить деструктор данного класса таким образом, чтобы он освобождал эту память. Описание данного класса содержится в файле заголовка afxwin.h.

    CharFromPos

    int CharFromPos(CPoint pt) const;

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

    В младшем слове, имеющем формат WORD, хранится индекс символа. В старшем слове, также имеющем формат WORD, хранится индекс строки.

    Аргументы

    • pt - координаты точки в рабочей области элемента управления, связанного с данным объектом класса CEdit.

    Описание

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


    Clear

    void Clear();

    Описание

    Данная функция вызывается для уничтожения текущего выделения в текстовом поле. Эта операция может быть отменена функцией Undo. Если нужно не только удалить выделение, но и поместить его в буфер обмена, используйте функцию Cut.


    Cut

    void Cut();

    Описание

    Данная функция вызывается для уничтожения текущего выделения в текстовом поле и помещения его в буфер обмена в формате CF_TEXT. Эта операция может быть отменена функцией Undo. Если выделенный текст не нужно помещать в буфер обмена, используйте функцию Clear.


    LineLength

    int LineLength(int nLine = -1) const;

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

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

    Аргументы

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

    Описание

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


    ReplaceSel

    void ReplaceSel(LPCTSTR lpszNewText, BOOL bCanUndo = FALSE);

    Аргументы

    • lpszNewText - указатель на заканчивающуюся нулем строку, содержащую новый текст.
    • bCanUndo - определяет возможность отмены операции. По умолчанию операция не может быть отменена.

    Описание

    Данная функция заменяет выделенный фрагмент в текстовом поле строкой, на которую указывает аргумент lpszNewText. При возникновении необходимости замены всего текста в текстовом поле используйте функцию CWnd::SetWindowText. Если в текстовом поле отсутствует выделение, текст вставляется в текущую позицию текстового курсора.


    SetSel

    void SetSel(DWORD dwSelection, BOOL bNoScroll = FALSE); void SetSel(int nStartChar, int nEndChar, BOOL bNoScrol = FALSE);

    Аргументы

    • dwSelection - в младшем слове содержит начальную позицию выделения, а в старшем слове - конечную позицию выделения. Если младшее слово содержит нулевое значений, а старшее слово - значение -1, выделяется весь текст в текстовом поле. Если младшее слово содержит значение -1, удаляется любое текущее выделение.
    • bNoScroll - определяет необходимость прокрутки области вывода, чтобы показать текстовый курсор. Если данный аргумент имеет значение FALSE, прокрутка осуществляется, если же он имеет значение TRUE - прокрутка отсутствует.
    • nStartChar - определяет начальную позицию выделения. Если данный аргумент имеет значение 0, а аргумент nEndChar имеет значение -1, то выделяется весь текст в текстовом поле. Если данный аргумент имеет значение -1, удаляется любое текущее выделение.
    • nEndChar - определяет конечную позицию выделения.

    Описание

    Данная функция используется для выделения текстового фрагмента в текстовом поле.


    CEditView

    Объект класса CEditView, подобно объекту класса CEdit, обеспечивает функционирование элемента управления текстового поля Windows, и позволяет создать простейший текстовый редактор. Класс CEditView позволяет использовать следующие дополнительные возможности:

    • печать документа;
    • поиск и замена.

    Поскольку класс CEditView является производным от класса CView, объекты данного класса могут работать с документами и использоваться в шаблонах документов. Для текста, содержащегося в данном объекте элемента управления выделяется собственная область глобальной памяти. Количество данных объектов не ограничено. Использование объектов класса CEditView позволяет создавать простейшие оконные редакторы, имеющие перечисленные выше свойства. Объект класса CEditView может занимать всю рабочую область окна. Чтобы дополнить данный редактор пользовательскими свойствами, необходимо создать пользовательский класс, производный от класса CEditView и добавить в него соответствующие функции. По умолчанию класс CEditView обрабатывает следующие сообщения:

    • ID_EDIT_SELECT_ALL, ID_EDIT_FIND, ID_EDIT_REPLACE, ID_EDIT_REPEAT и ID_FILE_PRINT. На объекты класса CEditView (или на объекты классов, производных от класса CEditView) накладываются следующие ограничения: объект класса CEditView не обладает свойствами WYSIWYG (что видишь, то и получишь). В тех случаях, когда требования соответствия изображения на экране печатаемой копии приводят к снижению качества изображения на экране, объект класса CEditView старается повысить качество изображения на экране за счет потери соответствия с печатаемой копией;
    • объект класса CEditView использует только один шрифт для вывода всей информации. При этом не предусматривается никакого специального форматирования текста. Эти возможности реализованы в классе CrichEditView;
    • объем текста, выводимого объектом класса CEditView ограничено. Эти ограничения совпадают с ограничениями, наложенными на объект класса CEdit.

    Описание данного класса содержится в файле заголовка afxext.h.

    FindText

    BOOL FindText(LPCTSTR lpszFind, BOOL bNext = TRUE, BOOL bCase = TRUE);

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

    Ненулевое, если найден искомый текст, и нулевое в противном случае.

    Аргументы

    • lpszFind - указатель на текстовую строку, содержащую искомый текст.
    • bNext - определяет направление поиска. Если данный аргумент имеет значение TRUE, то поиск производится по направлению к концу буфера. В противном случае поиск производится по направлению к началу буфера.
    • bCase - определяет необходимость учета при сравнении регистра символов. Если данный аргумент имеет значение TRUE, то при поиске учитывается регистр символов. В противном случае регистр символов не учитывается.

    Описание

    Функция FindText производит поиск указанного текста в текстовом буфере объекта класса CEditView. Поиск текста, содержащегося в аргументе lpszFind, производится начиная с текущей позиции текстового курсора в направлении, определяемом аргументом bNext. Если аргумент bCase имеет значение TRUE, то поиск производится с учетом регистра символов. Если текст найден, то он выделяется и функция возвращает ненулевую величину. В противном случае возвращается нулевая величина.


    GetBufferLength

    UINT GetBufferLength() const;

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

    Длина строки в буфере.

    Описание

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


    GetEditCtrl

    CEdit& GetEditCtrl() const;

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

    Ссылка на объект класса CEdit.

    Описание

    Функция GetEditCtrl позволяет получить ссылку на объект класса текстового поля, используемый в данном объекте класса представления. Поскольку возвращается ссылка на объект класса CEdit, то возвращаемая величина позволяет получить доступ к данному элементу управления путем вызова функций данного класса. Использование объекта класса CEdit может изменить состояние связанного с ним элемента управления Windows. Например, при использовании для установки позиций табуляции функции CEdit::SetTabStops приведет к изменению позиций табуляции как в самом элементе управления, так и к изменению позиций табуляции при его распечатке. Чтобы изменить позиции табуляции только в самом элементе управления следует использовать функцию CEditView::SetTabStops.


    OnFindNext

    virtual void OnFindNext(LPCTSRT lpszFind, BOOL bNext, BOOL bCase);

    Аргументы

    • lpszFind - указатель на текстовую строку, содержащую искомый текст.
    • bNext - определяет направление поиска. Если данный аргумент имеет значение TRUE, то поиск производится по направлению к концу буфера. В противном случае поиск производится по направлению к началу буфера.
    • bCase - определяет необходимость учета при сравнении регистра символов. Если данный аргумент имеет значение TRUE, то при поиске учитывается регистр символов. В противном случае регистр символов не учитывается.

    Описание

    Функция OnFindNext производит поиск указанного текста в текстовом буфере объекта класса CEditView. Поиск текста, содержащегося в аргументе lpszFind, производится начиная с текущей позиции текстового курсора в направлении, определяемом аргументом bNext. Если аргумент bCase имеет значение TRUE, то поиск производится с учетом регистра символов. Для поиска строки данная функция вызывает функцию FindText, передавая ей все свои аргументы. По умолчанию если искомый текст не найден, функция OnFindNext вызывает функцию OnTextNotFound.


    CEvent

    Объект класса CEvent представляет собой объект синхронизации, позволяющий одному потоку послать сообщение другому потоку о наступлении некоторого события. Например, о завершении работы потока или о необходимости получить или передать очередную порцию информации. Различают два вида объектов класса CEvent: одни из них устанавливаются и сбрасываются вручную, а другие - автоматически. Для ручной установки объекта события используется функция SetEvent, а для ручного сброса - функция ResetEvent. Автоматические объекты данного класса сбрасываются в том случае, если будет освобожден по крайней мере один поток. При создании объекта события для него может быть задано имя и поток, которому он принадлежит. После создания данного объекта он отмечается функцией SetEvent. После завершения работы с ресурсом его необходимо освободить вызовом функции Unlock. Другим способом работы с объектом события является создание члена класса, имеющего тип CEvent. При создании объекта контролируемого класса для этой переменной вызывается конструктор класса CEvent, определяющий тип создаваемого объекта, его исходное состояние, имя (если этот объект события будет использоваться в других процессах) и требуемые атрибуты безопасности. Для получения доступа к объекту, контролируемому переменной типа CEvent, необходимо сначала создать объект класса CSingleLock или CMultiLock. Вызов функции Lock данного объекта обеспечит монопольный доступ к контролируемому ресурсу. Если ресурс в данное время занят, данная функция будет ждать его освобождения в течение указанного промежутка времени. Если ресурс не освободится в течение периода ожидания, данная функция возвратит соответствующее значение. После завершения работы с ресурсом его необходимо освободить вызовом функции Unlock. Описание данного класса содержится в файле заголовка afxmt.h. 


    ResetEvent

    BOOL ResetEvent();

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

    Ненулевое, если функция нормально завершила свою работу, и нулевое в противном случае.

    Описание

    Данная функция переводит объект события в неотмеченное состояние, отмечаемое функцией SetEvent. Неотмеченное состояние события заставляет ждать все потоки, которые хотели бы получить доступ к ресурсу, контролируемому данным объектом события. Эта функция не используется для автоматических объектов событий.


    SetEvent

    BOOL SetEvent();

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

    Ненулевое, если функция нормально завершила свою работу, и нулевое в противном случае.

    Описание

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


    CFile

    Класс CFile является базовым классом библиотеки MFC для работы с файлами. Он обеспечивает небуферированный двоичный доступ к файлу. Производные от него классы поддерживают текстовые файлы и файлы, расположенные в оперативной памяти. Класс CFile используется совместно с классом CArchive для сохранения объектов классов из библиотеки MFC. Использование класса CFile в качестве базового класса для всех классов, работающих с файлами, позволяет использовать его интерфейс во всех этих классах. Поэтому, например, работа с файлом, расположенным в памяти, практически не отличается от работы с классом, расположенным на диске. Класс CFile и производные от него классы используются для обычной работы с диском. Для записи на диск форматированного текста используется класс ofstream и другие подобные классы Microsoft. Обычно файл на диске автоматически открывается конструктором класса CFile и автоматически закрывается его деструктором. Статические функции данного класса позволяют определять статус файла не открывая его. Описание данного класса содержится в файле заголовка afx.h.


    CFile

    CFile();
    CFile(int hFile);
    CFile(LPCTSTR lpszFileName, UINT nOpenFlags);
    throw(CFileException);

    Аргументы

    • hFile - дескриптор уже открытого файла.
    • lpszFileName - строка, содержащая путь к открываемому файлу. Путь может быть как относительным, так и абсолютным.
    • nOpenFlags - флаги доступа к файлу. Определяют действия, которые необходимо предпринять при открытии файла. Приведенные ниже флаги могут объединяться оператором побитового ИЛИ (|). Необходимо указать как минимум один флаг доступа и один флаг разделения ресурсов. Флаги modeCreate и modeNoInherit являются не обязательными. В данном аргументе могут быть указаны следующие флаги:
      CFile::modeCreate - создается новый файл. Если файл с данным именем уже существовал, то у него устанавливается нулевая длина;
      CFile::modeNoTruncate - если файл с данным именем уже существовал, то у него сохраняется прежняя длина. Этот флаг устанавливается совместно с флагом modeCreate. Это позволяет открывать и использовать один и тот же конструктор для создания новых файлов и открытия уже существующих. Этот флаг используется при создании объектов класса CstdioFile;
      CFile::modeRead - открывает файл только для чтения;
      CFile::modeReadWrite - открывает файл как для чтения, так и для записи;
      CFile::modeWrite - открывает файл только для записи;
      CFile::modeNoInherit - запрещает дочернему процессу использовать данный файл;
      CFile::shareDenyNone - позволяет другому процессу читать и записывать информацию в данный файл. При открытии данного файла возникает ошибка, если он был открыт в режиме совместимости каким-либо другим процессом;
      CFile::shareDenyRead - не позволяет другому процессу читать информацию из данного файла. При открытии данного файла возникает ошибка, если он был открыт в режиме совместимости или для чтения каким-либо другим процессом;
      CFile::shareDenyWrite - не позволяет другому процессу записывать информацию в данный файл. При открытии данного файла возникает ошибка, если он был открыт в режиме совместимости или для записи каким-либо другим процессом;
      CFile::shareExclusive - открывает данный файл в режиме безраздельного пользования, запрещая любому другому процессу читать или записывать информацию в данный файл. При открытии данного файла возникает ошибка, если он был открыт в режиме чтения или записи каким-либо другим процессом, или, даже, тем же самым процессом;
      CFile::shareCompat - этот флаг отсутствует в 32-разрядной библиотеке MFC. Он соответствует флагу CFile::shareExclusive в функции CFile::Open;
      CFile::typeText - устанавливает текстовый режим обработки файла, в котором предусмотрены специальные процедуры обработки пар символов возврат каретки/перевод строки (используется только в производных классах);
      CFile::typeBinary - устанавливает двоичный режим обработки файла (используется только в производных классах).

    Описание

    Используемый по умолчанию конструктор данного класса (не имеющий аргументов) не открывает файл, а присваивает величине m_hFile значение CFile::hFileNull. Поскольку данный класс не вызывает исключения, нет никакого смысла помещать его в структуры TRY/CATCH. Вместо этого следует использовать функцию Open, непосредственно проверяющую условия возникновения исключений. Вторая версия конструктора данного класса создает объект класса CFile, соответствующий существующему файлу, открытому операционной системой и идентифицируемому дескриптором файла hFile. При этом не осуществляется никаких проверок режима доступа к файлу и его типа. При уничтожении объекта класса CFile, созданного подобным конструктором файл операционной системы не закрывается. Пользователь может уничтожить его самостоятельно. Третья версия конструктора данного класса создает объект класса CFile и открывает файл операционной системы, путь, к которому указан в аргументе lpszFileName. Этот конструктор можно рассматривать как объединение первой версии конструктора с функцией Open. В случае возникновения ошибок при открытии файла данный конструктор вызывает исключения. В большинстве случаев это означает возникновение фатальной ошибки, о которой должно быть сообщено пользователю.


    Close

    virtual void Close(); throw(CFileException);

    Описание

    Закрывает файл, связанный с объектом данного класса, и делает его недоступным для операций чтения и записи. Если файл не был закрыт до уничтожения объекта данного класса, эта операция производится его деструктором. Если объект класса CFile создавался в куче с использованием оператора new, его необходимо уничтожить после закрытия файла. Функция Close присваивает переменной m_hFile значение CFile::hFileNull.


    GetFilePath

    virtual CString GetFilePath() const;

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

    Полный путь к файлу, связанному с данным объектом класса.

    Описание

    Данная функция позволяет получить полный путь к файлу, связанному с данным объектом класса. Например, для файла c:\windows\write\myfile.wri функция GetFilePath возвратит строку "c:\windows\write\myfile.wri". Чтобы возвратить имя файла с расширением (myfile.wri) используйте функцию GetFileName. Чтобы возвратить только имя файла без расширения (myfile) используйте функцию GetFileTitle.


    GetLength

    virtual DWORD GetLength() const; throw(CFileException);

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

    Длина файла в байтах.

    Описание

    Позволяет получить текущую логическую длину файла в байтах.


    Read

    virtual UINT Read(void* lpBuf, UINT nCount); throw(CFileException);

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

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

    Аргументы

    • lpBuf - указатель на созданный пользователем буфер, в который будут записаны данные из файла.
    • nCount - количество байт, которые нужно считать из файла. Для текстовых файлов пара управляющих символов возврат каретки/перевод строки считается за один символ.

    Описание

    Читает данные из файла, связанного с объектом класса CFile, в буфер. 


    SeekToBegin

    void SeekToBegin(); throw(CFileException);

    Описание

    Устанавливает текущую позицию на начало файла. Функция SeekToBegin() эквивалентна функции Seek(0L, CFile::begin).


    Write

    virtual void Write(const void* lpBuf, UINT nCount);
    throw(CFileException);

    Аргументы

    • lpBuf - указатель на созданный пользователем буфер, содержащий данные, которые будут записаны в файл.
    • nCount - количество байт, которые нужно записать в файл. Для текстовых файлов пара управляющих символов возврат каретки/перевод строки считается за один символ.

    Описание

    Записывает данные из буфера в файл, связанный с объектом класса CFile. В некоторых случаях, включая переполнение диска, функция Write вызывает исключение.


    CFont

    Объект класса CFont используется для работы со шрифтами, созданными интерфейсом графических устройств Windows (GDI). Прежде, чем использовать объект класса CFont его необходимо создать и связать с ним шрифт Windows с использованием функций CreateFont, CreateFontIndirect, CreatePointFont или CreatePointFontIndirect. После этого можно вызывать функции-члены данного класса для работы со шрифтом. Использование функций CreatePointFont или CreatePointFontIndirect во многих случаях проще, чем использование функций CreateFont или CreateFontIndirect, поскольку они осуществляют автоматический перевод высоты шрифта, измеренной в пиках, в высоту шрифта, измеренную в логических единицах. Описание данного класса содержится в файле заголовка afxwin.h.


    CFont::CreateFontIndirect

    BOOL CreateFontIndirect(const LOGFONT* lpLogFont);

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

    Ненулевое, в случае успешного завершения функции, и нулевое в противном случае.

    Аргументы

    • lpLogFont - указатель на объект структуры LOGFONT, содержащий параметры логического шрифта.

    Описание

    Инициализирует объект класса CFont с использованием переменных объекта структуры LOGFONT, на который указывает аргумент lpLogFont. После этого объект данного класса может выбираться в качестве текущего шрифта в контекст устройства. Этот шрифт имеет характеристики, заданные структурой LOGFONT. Для выбора шрифта в контекст устройства используется функция CDC::SelectObject. При этом программа масштабирования шрифтов графического интерфейса пытается найти среди имеющихся физических шрифтов такой шрифт, который бы максимально соответствовал указанному логическому шрифту. Если не удается достичь полного соответствия, то используется ближайший по параметрам шрифт. После завершения работы с объектом класса CFont, созданным функцией CreateFontIndirect его необходимо сначала удалить из контекста устройства, а затем уничтожить объект данного класса.


    AddString

    int AddString(LPCTSTR lpszItem);

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

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

    Аргументы

    • lpszItem - указатель на строку символов, заканчивающуюся нулем, которую необходимо добавить в список.

    Описание

    Данная функция вызывается для добавления строки в окно списка. Если данное окно списка не имеет стиля LBS_SORT, то строка добавляется в конец списка. В противном случае, строка добавляется в список и после этого список сортируется. Если данное окно списка имеет стиль LBS_SORT, но не имеет стиля LBS_HASSTRINGS, приложение сортирует список, используя вызовы функции CompareItem. Чтобы добавить строку в определенное место в списке, используйте функцию InsertString.


    DeleteString

    int DeleteString(UINT nIndex);

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

    Число строк, оставшихся в списке. Если величина аргумента nIndex превышает число строк в окне списка, то возвращается величина LB_ERR.

    Аргументы

    • nIndex - определяет индекс уничтожаемой строки. Индекс первой строки равен нулю.

    Описание

    Уничтожает элемент в окне списка.


    GetCurSel

    int GetCurSel() const;

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

    Индекс выделенной в окне списка строки или LB_ERR, если в данном окне списка нет выделенной строки или данное окно списка допускает одновременное выделение нескольких элементов. Первая в окне списка строка имеет нулевой индекс.

    Описание

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


    GetText

    int GetText(int nIndex, LPTSTR lpszBuffer) const;
    void GetText(int nIndex, CString& rString) const;

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

    Длина (в байтах) строки, исключая завершающий ее нулевой символ. Если аргумент nIndex имеет недопустимое значение, возвращается значение LB_ERR.

    Аргументы

    • nIndex - определяет индекс строки, которую необходимо получить. Индекс первой строки равен нулю.
    • lpszBuffer - указатель на текстовый буфер, в который будет записана полученная строка. Буфер должен иметь достаточный размер для размещения самой строки и завершающего ее нулевого символа. Размер строки может быть определен заранее с помощью вызова функции GetTextLen.
    • rString - ссылка на объект класса CString.

    Описание

    Позволяет получить указанную строку из окна списка. Второй вариант данной функции использует для хранения полученной строки объект класса CString.


    CListBox::SetSel

    int SetSel(int nIndex, BOOL bSelect = TRUE);

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

    LB_ERR, если при выполнении функции возникла ошибка, и ноль в противном случае.

    Аргументы

    • nIndex - индекс выделяемой строки, причем первая строка имеет нулевой индекс. Если этот аргумент равен -1, то, в зависимости от значения аргумента bSelect, выделяются все строки или снимается выделение со всех строк.
    • bSelect - определяет режим выделения. Если данный аргумент имеет значение TRUE, то строка выделяется, если - FALSE, то со строки снимается выделение. По умолчанию строка выделяется.

    Описание

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


    CMap

    template< class KEY, class ARG_KEY, class VALUE, class ARG_VALUE >class CMap : public CObject

    Аргументы

    • KEY - класс объектов, используемых в качестве ключей в данной карте отображений. ARG_KEY - тип данных, используемых в качестве аргументов KEY. Обычно это ссылка на KEY.
    • VALUE - класс объектов, хранящихся в данной карте отображений. ARG_VALUE - тип данных, используемых в качестве аргументов VALUE. Обычно это ссылка на VALUE.

    Описание

    Класс CMap представляет собой класс словарей, в котором для доступа к данным используются уникальные ключи. После того, как в карту отображений будет добавлена пара, состоящая из ключа и элемента, для доступа к ней может быть использовано значение ключа. Кроме того, имеется возможность последовательного просмотра всего содержимого карты отображений. Для этого используется переменная типа POSITION. Эта переменная позволяет "запомнить" текущую позицию в карте и просмотр всей карты. Последовательность просмотра карты отображений никак не связана с последовательностью ключей. Класс CMap включает в себя макрос IMPLEMENT_SERIAL, позволяющий работать с архивом и выводить диагностические сообщения. Независимо от того используется ли для записи в архив перегруженный оператор << или функция Serialize, в архиве сохраняется каждый элемент карты отображений. При необходимости вывести диагностическую информацию об отдельном элементе карты отображений, необходимо указать глубину объекта CDumpContext равной 1 или большей величине. При уничтожении объекта класса CMap или при удалении из него элементов уничтожаются как ключи, так и связанные с ними объекты. Описание данного класса содержится в файле заголовка afxtempl.h. 


    GetNextAssoc

    void GetNextAssoc(POSITION& rNextPosition, KEY& rKey, VALUE& rValue) const;

    Аргументы

    • rNextPosition - ссылка на величину типа POSITION, возвращенную при предыдущем вызове функцией GetNextAssoc или GetStartPosition.
    • KEY - параметр шаблона, определяющий тип значения ключа.
    • rkey - определяет ключ, по которому осуществляется доступ к элементу.
    • VALUE - определяет тип искомой переменной.
    • rValue - содержит значение искомой переменной.

    Описание

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


    GetStartPosition

    POSITION GetStartPosition() const;

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

    Значение типа POSITION, определяющее начальную позицию для поиска по карте отображений, или NULL, если карта пуста.

    Описание

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


    IsEmpty

    BOOL IsEmpty() const;

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

    Ненулевое, если карта отображений не содержит элементов, и ноль в противном случае.

    Описание

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


    Lookup

    BOOL Lookup(ARG_KEY key, VALUE& rValue) const;

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

    Ненулевое, если элемент был найден, и нулевое в противном случае.

    Аргументы

      ARG_KEY - параметр шаблона, определяющий тип значения ключа.
    • key - определяет ключ, по которому осуществляется доступ к элементу.
    • VALUE - определяет тип искомой переменной.
    • rValue - содержит значение искомой переменной.

    Описание

    Функция Lookup использует хеширование для быстрого поиска элемента карты отображений по заданному ключу. operator [ ]
    VALUE& operator[](ARG_KEY key);

    Аргументы

    • VALUE - определяет тип элемента карты отображений. ARG_KEY - параметр шаблона, определяющий тип значения ключа.
    • key - определяет ключ, по которому осуществляется доступ к элементу.

    Описание

    Этот оператор может использоваться вместо функции SetAt. Он может использоваться только в левой части оператора присваивания. Если в карте отображений не существует элемента, соответствующего данному ключу, то создается новый элемент. Поскольку нет никакой гарантии, что указанному ключу соответствует элемент в карте отображений, данный оператор не может использоваться в правой части оператора присваивания. Для получения элемента по ключу следует использовать функцию Lookup.


    RemoveKey

    BOOL RemoveKey(ARG_KEY key);

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

    Ненулевое, если элемент найден и успешно уничтожен, и нулевое в противном случае.

    Аргументы

      ARG_KEY - шаблон, определяющий тип ключа.
    • key - ключ удаляемого элемента.

    Описание

    Данная функция производит поиск элемента карты отображений, соответствующего заданному ключу, и, в случае успешного завершения поиска, удаляет его. Для удаления элемента используется вспомогательная глобальная функция DestructElements.


    RemoveAll

    void RemoveAll();

    Описание

    Данная функция уничтожает все элементы карты отображений, вызывая вспомогательную глобальную функцию DestructElements. Эта функция работает корректно, если карта отображений уже пуста.


    CMemoryState

    Класс CMemoryState используется для выявления утечек памяти в приложении. Утечки памяти возникают в тех случаях, когда выделенная под объект область памяти не освобождается после завершения работы с этим объектом. Утечки памяти могут привести к возникновению ошибок при выполнении приложения или к исчерпанию ресурса свободной памяти. Память может выделяться и освобождаться различными способами: с использованием функций malloc и free в библиотеках времени исполнения приложения;
    с использованием функций Windows API LocalAlloc и LocalFree или GlobalAlloc и GlobalFree;
    с использованием операций C++ new и delete.
    Функции класса CMemoryState позволяют обнаруживать только утечки памяти, связанные с использованием операций C++, поскольку программисты Microsoft, очевидно, уверены, что их программы к утечкам памяти никакого отношения иметь не могут. Нам бы их уверенность. Для получения дополнительной информации используется макрос DEBUG_NEW, заменяющий стандартную операцию new ee отладочной версией. Использование этой версии позволяет сохранять информацию о том, в каком файле и в какой его строке был выделен каждый из блоков памяти. Как и любые другие диагностические функции, методы класса CMemoryState работают только в отладочной версии приложения, отличающейся тем, что в ней определена константа _DEBUG. При поиске утечек памяти используются функции Checkpoint, Difference и DumpStatistics, позволяющие выявить различия в состоянии памяти в различных точках приложения. Если информации, полученной при этих сравнениях, окажется недостаточно для выявления источника утечек памяти, для получения дополнительной информации может быть вызвана функция DumpAllObjectsSince, выводящая информацию по всем объектам, память для которых была выделена после последнего вызова функции Checkpoint. Объекты в распечатке будут располагаться в порядке выделения для них оперативной памяти и для каждого из них будет указан файл и строка, в которой произошло выделение памяти, (если в программе использован макрос DEBUG_NEW), происхождение объекта, его адрес и размер. Кроме того, функция DumpAllObjectsSince вызывает для каждого объекта его функцию Dump, выводящую информацию о его текущем состоянии. Объявление объекта типа CMemoryState и вызов его функций должен производиться между директивами #if defined(_DEBUG) и #endif, что обеспечит обращение к ним только в отладочной версии приложения. Описание данной структуры содержится в файле заголовка afx.h.


    Checkpoint

    void Checkpoint();

    Описание

    Данная функция позволяет сохранить текущее состояние оперативной памяти и в данном объекте класса CMemoryState. Полученная информация анализируется в функциях Difference и DumpAllObjectsSince.


    Difference

    BOOL Difference(const CMemoryState& oldState, const CMemoryState& newState);

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

    Ненулевое, если два объекта содержат различную информацию, и нулевое в противном случае.

    Аргументы

    • oldState - исходное состояние памяти.
    • newState - новое состояние памяти.

    Описание

    Данная функция позволяет сравнить два состояния оперативной памяти, сохраненные с использованием функций Checkpoint в своих объектах CMemoryState.


    DumpAllObjectsSince

    void DumpAllObjectsSince() const;

    Описание

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


    CMenu

    Класс CMenu используется для работы с дескрипторами HMENU Windows. Он содержит функции для создания, отслеживания, обновления и уничтожения меню. Объект класса CMenu следует локально создавать в стеке. После этого необходимо вызвать функцию CWnd::SetMenu для замены меню в окне и сразу же вызвать функцию CMenu::Detach. Функция CWnd::SetMenu устанавливает в окне новое меню, вызывая его перерисовку для отображения нового меню, а также передает окну права собственности на меню. Функция Detach освобождает дескриптор HMENU из объекта класса CMenu, так что, при уничтожении данного объекта класса CMenu деструктор не попытается уничтожить меню, на которое он уже не имеет права собственности. Само меню уничтожается деструктором окна при его закрытии. Функция LoadMenuIndirect создает меню по шаблону, хранящемуся в памяти, однако, с меню, созданным функцией LoadMenu с использованием ресурсов, намного проще работать, а ресурсы меню могут создаваться и изменяться в редакторе меню. Описание данного класса содержится в файле заголовка afxwin.h.


    GetMenuContextHelpId

    DWORD GetMenuContextHelpId() const;

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

    Если с данным объектом класса CMenu связан идентификатор контекстной справки, возвращает этот идентификатор. В противном случае возвращает нулевое значение.

    Описание

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


    SetMenuContextHelpId

    BOOL SetMenuContextHelpId(DWORD dwContextHelpId);

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

    Ненулевое, в случае успешного завершения работы, и нулевое в противном случае.

    Аргументы

    • dwContextHelpId - идентификатор контекстной справки, связываемый с данным объектом класса CMenu.

    Описание

    Данная функция связывает идентификатор контекстной справки с объектом класса CMenu. Этот идентификатор разделяют все команды данного меню. Отсутствует возможность назначить идентификатор контекстной справки отдельной команде данного меню.


    CMonthCalCtrl

    Класс CMonthCalCtrl используется для работы с элементом управления, содержащим календарь на месяц. Используя интерфейс этого элемента управления пользователь может выбирать любую дату в текущем месяце или перейти к любому месяцу любого года. Для изменения формы отображения пользователь может предпринять следующие действия: просматривать месяцы вперед и назад;
    щелкните правой кнопкой мыши на элементе управления (если не используется стиль MCS_NOTODAY) и в появившемся контекстном меню выбрать единственную команду К сегодняшней дате, в результате в элементе управления будет отображен текущий месяц, а в нем будет выделена текущая дата;
    выбрать месяц и год из контекстного меню (вопрос только как его вывести). При создании данного элемента управления для него могут быть заданы следующие стили:

    • MCS_DAYSTATE - определяет, что элемент управления должен запрашивать информацию о том, какие дни недели нужно выделять жирным шрифтом. Для этого он посылает извещение MCN_GETDAYSTATE;
    • MCS_MULTYSELECT - позволяет пользователю задавать диапазон дат;
    • MCS_NOTODAY - в нижней части элемента управления не выводится текущая дата;
    • MCS_NOTODAYCIRCLE - текущая дата не обводится;
    • MCS_WEEKNUMBERS - Слева от каждой строки дней выводится номер недели (от 1 до 52).

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

    • MCN_GETDAYSTATE - элемент управления запрашивает о необходимости выделения некоторых дней жирным шрифтом;
    • MCN_SELCHANGE - изменилась текущая дата или диапазон дат;
    • MCN_SELECT - пользователь выбрал конкретную дату в календаре.

    Описание данного класса содержится в файле заголовка afxdtctl.h

    GetCurSel

    BOOL GetCurSel(COleDateTime& refDateTime) const;
    BOOL GetCurSel(CTime& refDateTime) const;
    BOOL GetCurSel(LPSYSTEMTIME pDateTime) const;

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

    Ненулевое, если функция завершилась успешно, и нулевое в противном случае.

    Аргументы

    • refDateTime - ссылка на объект класса COleDateTime или на объект класса CTime, в который будет записана информация о дате.
    • pDateTime - указатель на объект структуры SYSTEMTIME, в который будет записана информация о дате.

    Описание

    Позволяет получить информацию о системном времени, выделенную в соответствующем элементе управления. Эта функция выполняет те же действия, что и сообщение Win32 MCM_GETCURSEL. При реализации в библиотеке MFC функция SetCurSel может получать информацию не только из объекта структуры SYSTEMTIME, но и из объектов классов COleDateTime и CTime. Если в элементе управления установлен флаг MCS_MULTISELECT выполнение данной функции завершается с ошибкой.


    SetCurSel

    BOOL SetCurSel(const COleDateTime& refDateTime); BOOL SetCurSel(const CTime& refDateTime); BOOL SetCurSel(const LPSYSTEMTIME pDateTime);

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

    Ненулевое, если функция завершилась успешно, и нулевое в противном случае.

    Аргументы

    • refDateTime - ссылка на объект класса COleDateTime или на объект класса CTime, содержащий информацию о выделяемой дате.
    • pDateTime - указатель на объект структуры SYSTEMTIME, содержащий информацию о выделяемой дате.

    Описание

    Выделяет указанную дату в элементе управления календаря. Эта функция выполняет те же действия, что и сообщение Win32 MCM_SETCURSEL. При реализации в библиотеке MFC функция SetCurSel может получать информацию не только из объекта структуры SYSTEMTIME, но и из объектов классов COleDateTime и CTime.


    CObArray

    Класс CObArray представляет собой класс массива указателей на объект класса CObject. Этот массив объектов аналогичен массивам языка C, но способен динамически изменять свой размер. Индекс первого элемента массива всегда равен 0. Пользователь может зафиксировать верхнюю границу массива или позволить ему расти при добавлении новых элементов, если их индекс превышает его верхнюю границу. Для данного массива всегда выделяется единая область памяти, даже в том случае, когда отдельные его элементы не используются. При использовании Win32 размер объекта класса CObArray определяется только доступной областью памяти. Как и в случае массивов языка C, время доступа к любому элементу массива CObArray постоянно и не зависит от размера массива. Класс CObArray включает в себя макрос IMPLEMENT_SERIAL, позволяющий работать с архивом и выводить диагностические сообщения. Если массив указателей на объекты класса CObject сохраняется в архиве, независимо от того используется ли для этого перегруженный оператор << или функция Serialize, то в архиве сохраняется каждый объект класса CObject, для чего вызывается его собственная функция Serialize, и его индекс в массиве. При необходимости вывести диагностическую информацию об отдельном объекте класса CObject, хранящегося в массиве, необходимо указать глубину объекта CDumpContext равной 1 или большей величине. При уничтожении объекта класса CObArray или при удалении из него элементов уничтожаются только указатели на объекты класса CObject, а не сами объекты, на которые ссылаются данные указатели. Прежде чем использовать массив, необходимо вызвать функцию SetSize для установки его размера и резервирования необходимой памяти. Если при создании массива не использовалась функция SetSize, то при добавлении в него элементов часто будет производиться перераспределение памяти и копирование массива, что может привести к замедлению работы программы и к фрагментации памяти. Для работы с архивом необходимо использовать макрос IMPLEMENT_SERIAL для данного класса. Описание данного класса содержится в файле заголовка afxcoll.h.


    Add

    int Add(CObject* newElement); throw(CMemoryException);

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

    Индекс добавленного в массив элемента.

    Аргументы

    • newElement - указатель на объект класса CObject, добавляемый в массив.

    Описание

    Добавляет новый элемент в конец массива, увеличивая его размер на 1. Если в функции SetSize аргумент nGrowBy имеет значение больше 1 и увеличение размера массива на 1 привело к выходу за пределы отведенной ему памяти, то для массива выделяется дополнительная память, в которую могут быть записаны новые элементы без новой операции выделения памяти, размер которой определяется аргументом nGrowBy функции SetSize. Соответствующие функции, отличающиеся только типом своих аргументов, имеются в классах CByteArray, CDWordArray, CPtrArray, CStringArray, CUIntArray и CWordArray.


    GetSize

    int GetSize() const;

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

    Размер массива.

    Описание

    Возвращает размер массива. Поскольку первый элемент массива имеет нулевой индекс, размер массива всегда на 1 превышает максимальный индекс элемента массива. Идентичная функция имеется в классах CByteArray, CDWordArray, CPtrArray, CStringArray, CUIntArray и CWordArray


    GetUpperBound

    int GetUpperBound() const;

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

    Максимальный индекс элемента массива. Если возвращаемое значение равно -1, то данный массив не содержит элементов.

    Описание

    Возвращает максимальный индекс элемента массива. Поскольку первый элемент массива имеет нулевой индекс, максимальный индекс элемента массива всегда на 1 меньше, чем размер массива. Идентичная функция имеется в классах CByteArray, CDWordArray, CPtrArray, CStringArray, CUIntArray и CWordArray. operator [ ] CObject*& operator [](int nIndex);  CObject* operator [](int nIndex) const;

    Описание

    Эти операторы могут использоваться вместо функций SetAt и GetAt. Первый оператор используется для обычных массивов и может вызываться как с левой, так и с правой стороны от оператора присваивания. Второй оператор используется для массивов констант и может вызываться только с правой стороны оператора присваивания. В отладочной версии библиотеки производится проверка того, что используемый индекс массива находится в разрешенном диапазоне значений. Соответствующие операторы, отличающиеся только типом своих возвращаемых значений, имеются в классах CByteArray, CDWordArray, CPtrArray, CStringArray, CUIntArray и CWordArray.


    RemoveAll

    void RemoveAll();

    Описание

    Удаляет все указатели из массива, но не уничтожает сами объекты класса CObject. Если массив уже пуст, функция все равно работает. Функция RemoveAll освобождает всю память, используемую для хранения указателей. Идентичная функция имеется в классах CByteArray, CDWordArray, CPtrArray, CStringArray, CUIntArray и CWordArray.


    SetSize

    void SetSize(int nNewSize, int nGrowBy = -1); throw(CMemoryException);

    Аргументы

    • nNewSize - новый размер массива (количество элементов). Должен иметь значение большее или равное 0.
    • nGrowBy - минимальное количество элементов, на которое будет увеличен размер массива при необходимости.

    Описание

    Устанавливает размер пустого или существующего массива. Выделяет память в случае необходимости. Если новый размер массива меньше его прежнего размера, то массив усекается и вся неиспользуемая память освобождается. Для повышения производительности приложений, использующих массив, необходимо вызвать функцию SetSize до начала работы с ним. Правильный выбор ее аргументов позволит исключить или существенно уменьшить объем операций по перераспределению памяти и копирования массива при добавлении к нему элементов. Аргумент nGrowBy влияет только на распределение памяти при увеличении размеров массива. Его значение никак не отражается на возвращаемых значениях функций GetSize и GetUpperBound. Идентичная функция имеется в классах CByteArray, CDWordArray, CPtrArray, CStringArray, CUIntArray и CWordArray.


    CObject

    Класс CObject является одним из основных классов Microsoft Foundation Class Library. Он является базовым классом не только для классов библиотек, таких как CFile и CObList, но и для многих пользовательских классов. Использование класса CObject позволяет:

    • работать с архивами;
    • создавать классы в процессе выполнения приложения;
    • производить диагностику объектов;
    • обеспечивать совместимость с классами коллекций.

    Класс CObject не поддерживает множественное наследование. Создаваемые на его основе классы могут иметь в качестве базового класса только класс CObject, и этот класс должен быть самым старшим в иерархии. Для того чтобы воспользоваться всеми возможностями, предоставляемыми классом CObject необходимо использовать специальные макросы при объявлении и реализации производных от него классов. Макросами первого уровня являются DECLARE_DYNAMIC и IMPLEMENT_DYNAMIC, обеспечивающие доступ к имени класса и его положению в иерархии в процессе выполнения приложения. Это, в свою очередь, позволяет создавать осмысленные диагностические сообщения. Макросами второго уровня являются DECLARE_SERIAL и IMPLEMENT_SERIAL, обладающие всеми возможностями макросов первого уровня, но обеспечивающие возможность работы с архивами. Описание данного класса содержится в файле заголовка afx.h. Функции данного класса используются во всех демонстрационных приложениях, приведенных в данной книге.

    AssertValid

    virtual void AssertValid() const;

    Описание

    Функция CObject::AssertValid служит для целей отладки и производит проверку данного объекта на допустимость значений хранимых в нем величин. В отладочной версии библиотеки данная функция может посредством вызова исключения прервать выполнение программы и вывести сообщение, в котором будет указано имя файла программы и номер строки, из которой было вызвано исключение. При написании пользовательского класса необходимо перегрузить функцию AssertValid и поместить в ней необходимые проверки на допустимость значений хранящихся в объекте величин. Обычно, первым оператором перегруженной функции AssertValid является вызов соответствующей функции базового класса. Поскольку функция AssertValid является функцией-константой, пользователь не может изменять значения величин в проверяемом объекте. Перегруженная версия данной функции не должна сама вызывать исключения, а должна только сообщать, допустима ли данная комбинация параметров в объекте класса или нет. Понятие допустимости зависит от самого класса. Как правило, осуществляется только "поверхностная проверка". Так, например, если класс содержит указатели на другие объекты, то проверяется только тот факт, что эти указатели не нулевые, но не проверяется допустимость объектов, на которые они указывают.


    Dump

    virtual void Dump(CDumpContext& dc) const;

    Аргументы

    • dc - объект класса, осуществляющего потоковый вывод отладочной информации. Обычно это используемый по умолчанию объект afxDump.

    Описание

    Передает содержимое пользовательского объекта в объект класса CDumpContext. При создании пользовательского класса необходимо перегрузить функцию Dump, чтобы обеспечить выдачу диагностических сообщений об ошибках, произошедших в объекте данного класса. Обычно, первым оператором перегруженной функции является вызов соответствующей функции базового класса. Функция CObject::Dump печатает имя класса, если при его создании использовались макросы IMPLEMENT_DYNAMIC или IMPLEMENT_SERIAL. При выводе пользовательской информации перегруженная функция Dump не должна использовать символа перевода каретки в конце своей работы. Данная функция работает только в отладочной версии библиотеки MFC и ее описание должно располагаться между операторами условной трансляции #ifdef _DEBUG и #endif. Поскольку функция Dump является функцией-константой, пользователь не может изменять значения величин в проверяемом объекте. Функция Dump вызывается перегруженным оператором записи объекта CDumpContext::operator << при записи указателя на объект класса CObject. Функция Dump не предполагает рекуррентности, то есть пользователь может распечатать список объектов, но если один из объектов сам является списком, то его содержимое не будет распечатано.


    Serialize

    virtual void Serialize(CArchive& ar);
    throw(CMemoryException);
    throw(CArchiveException);
    throw(CFileException);

    Аргументы

    • ar - объект класса CArchive осуществляющий чтение и запись объекта на диске.

    Описание

    Читает объект с диска и записывает его на диск в с использованием объекта класса архива. Данная функция должна быть перегружена в каждом производном классе, предполагающем работу с архивом. Первым оператором перегруженной функции должен быть вызов функции Serialize базового класса. Для того, чтобы иметь возможность использовать данную функцию в своем классе, при его описании в файле заголовка должен быть использован макрос DECLARE_SERIAL, а в его файле реализации - макрос IMPLEMENT_SERIAL. Для того, чтобы определить, какая операция производится в данном случае, используются функции CArchive::IsLoading и CArchive::IsStoring. Функция Serialize вызывается функциями CArchive::ReadObject и CArchive::WriteObject, которые, в свою очередь, вызываются переопределенными операторами CArchive::operator << и CArchive::operator >>, первый из которых производит запись объекта в архив, а второй - извлечение объекта из архива.


    CPrintInfo

    Класс CPrintInfo используется для хранения информации о текущем задании принтера. Приложение создает объект класса CPrintInfo при выборе команд меню File|Print (Файл|Печать) или File|Print Preview (Файл|Предварительный просмотр) и уничтожает его при завершении выполнения этих команд. Объект класса CPrintInfo содержит информацию, касающуюся как всего процесса печати, например, диапазон печатаемых страниц, так и статус текущего задания, например, номер печатаемой страницы. Некоторая информация, касающаяся процесса печати, хранится, также, в связанном с данным объектом класса CPrintInfo объекте класса CPrintDialog, хранящем информацию об установках пользователя в диалоговом окне Печать. Объект класса CPrintInfo передается приложением в объект пользовательского класса представления и служит для обмена информацией между этими классами. Например, приложение передает объекту класса представления номер текущей печатаемой страницы в переменной данного класса m_nCurPage. Объект класса представления использует данную величину для определения того, какую страницу следует печатать. Другим примером использования объекта класса CPrintInfo является случай, когда размер документа не известен заранее и должен быть определен в процессе печати. В этом случае по достижении конца документа объект класса представления присваивает переменной m_bContinuePrinting, являющейся членом класса CPrintInfo, значение FALSE, тем самым информируя приложение о завершении процесса печати. Класс CPrintInfo не имеет базового класса. Описание данного класса содержится в файле заголовка afxext.h. 


    GetFromPage

    UINT GetFromPage() const;

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

    Возвращает номер первой печатаемой страницы документа.

    Описание

    Позволяет получить номер первой печатаемой страницы документа. Это значение задается пользователем в диалоговом окне Печать и сохраняется в объекте класса CPrintDialog, указатель на который содержится в переменной m_pPD объекта класса CPrintInfo. Если пользователь не задал первую печатаемую страницу, то печать начинается с первой страницы документа.


    GetMinPage

    UINT GetMinPage() const;

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

    Возвращает номер первой страницы документа.

    Описание

    Позволяет получить номер первой страницы документа. Это значение задается пользователем в диалоговом окне Печать и сохраняется в объекте класса CPrintDialog, указатель на который содержится в переменной m_pPD объекта класса CPrintInfo.


    GetMaxPage

    UINT GetMaxPage() const;

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

    Возвращает номер последней страницы документа.

    Описание

    Позволяет получить номер последней страницы документа. Это значение задается пользователем в диалоговом окне Печать и сохраняется в объекте класса CPrintDialog, указатель на который содержится в переменной m_pPD объекта класса CPrintInfo.


    GetToPage

    UINT GetToPage() const;

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

    Возвращает номер последней печатаемой страницы документа.

    Описание

    Позволяет получить но мер последней печатаемой страницы документа. Это значение задается пользователем в диалоговом окне Печать и сохраняется в объекте класса CPrintDialog, указатель на который содержится в переменной m_pPD объекта класса CPrintInfo. Если пользователь не задал последнюю печатаемую страницу, то печать производится до конца документа.


    SetMaxPage

    void SetMaxPage(UINT nMaxPage);

    Аргументы

    • nMaxPage - номер последней страницы в документе.

    Описание

    Данная функция позволяет задать номер последней страницы в документе. Это значение будет храниться в переменной m_pPD класса CPrintDialog. Если размер документа известен до начала процесса печати, то эта функция вызывается в функции CView::OnPreparePrinting. Если же размер документа зависит от установок пользователя сделанных им в диалоговом окне Печать, то эта функция вызывается из функции CView::OnBeginPrinting. Если же размер документа не может быть определен до завершения процесса печати, то для завершения этого процесса используется переменная m_bContinuePrinting.


    CProgressCtrl

    Линейный индикатор представляет собой окно, которое может быть использовано приложением для индикации степени завершения некоторой длинной операции. Данный элемент управления представляет собой прямоугольник, который заполняется системным цветом в направлении слева направо по мере завершения операции. Класс CProgressCtrl обеспечивает функционирование линейного индикатора в операционной системе Windows. Этот элемент управления (а следовательно и класс CProgressCtrl) может быть использован только в программах, работающих под управлением операционных систем Windows 95 и Windows NT версии 3.51 и более поздних версий данных операционных систем. Линейный индикатор характеризуется диапазоном отображаемых величин и своей текущей позицией. Диапазон отображаемых величин соответствует всему объему работы, выполняемому данной операцией, а текущая позиция характеризует ту часть работы, которую данная операция проделала на данный момент. Процедура окна линейного индикатора использует значения диапазона и текущей позиции для того, чтобы определить какую часть окна необходимо заполнить системным цветом и какой текст вывести в окне (если в данном окне предусмотрен вывод текста). Поскольку для задания диапазона и текущей позиции используются целые числа со знаком, нижняя граница диапазона не может быть меньше, чем -217483648, а верхняя граница диапазона не может быть больше, чем 217483647. Описание данного класса содержится в файле заголовка afxcmn.h.


    Create

    BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);

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

    TRUE, если был создан объект класса CProgressCtrl, в противном случае - FALSE.

    Аргументы

    • dwStyle - определяет стиль линейного индикатора. Окно линейного индикатора всегда создается как дочернее окно, родительским окном которого, обычно, является диалоговое окно. Данный аргумент может представлять собой любую допустимую комбинацию стандартных стилей окна, однако все стили, кроме перечисленных ниже будут игнорироваться:
      WS_BORDER - создает рамку вокруг окна;
      WS_CHILD - создает дочернее окно (обязательный стиль для объекта класса CProgressCtrl);
      WS_CLIPCHILDREN - исключает области, занимаемые дочерними окнами из области перерисовки родительского окна. Задается при создании объекта класса родительского окна;
      WS_CLIPSIBLINGS - исключает области, занимаемые другими дочерними окнами из области перерисовки данного дочернего окна;
      WS_DISABLED - создает неактивное окно;
      WS_VISIBLE - создает окно, которое сразу же отображается на экране;
      WS_TABSTOP - включает данное окно в последовательность окон, по которой можно перемещаться путем нажатия клавиши TAB. Кроме данных стилей, линейный индикатор использует два дополнительных стиля:
      PBS_VERTICAL - ориентирует полосу линейного индикатора в вертикальном направлении и ее заполнение производится сверху вниз. Если этот флаг не установлен, полоса линейного индикатора располагается в горизонтальном направлении и ее заполнение производится слева направо;
      PBS_SMOOTH - отображает сплошную полосу линейного индикатора. По умолчанию полоса линейного индикатора разделена на блоки.
    • rect - определяет размер и положение линейного индикатора. Этот аргумент может представлять собой объект класса CRect или объект структуры RECT. Поскольку данный элемент управления представляет собой дочернее окно, определяемые в данном аргументе координаты являются относительными и определяются системой координат, установленных в родительском окне.
    • pParentWnd - указатель на объект класса родительского окна, обычно это объект класса CDialog. Данный аргумент не может иметь нулевого значения.
    • nID - идентификатор ресурса линейного индикатора.

    Описание

    Создание объекта класса CProgressCtrl состоит из двух этапов: на первом этапе вызывается конструктор, создающий объект класса CProgressCtrl, а на втором этапе вызывается функция Create, создающая связанное с ним окно.


    SetPos

    int SetPos(int nPos);

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

    Старое значение позиции линейного индикатора.

    Аргументы

    • nPos - новая позиция линейного индикатора.

    Описание

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


    SetRange

    void SetRange(short nLower, short nUpper); void SetRange32(int nLower, int nUpper);

    Аргументы

    • nLower - определяет нижний предел диапазона (по умолчанию равен нулю).
    • nUpper - определяет верхний предел диапазона (по умолчанию равен 100).

    Описание

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


    CPropertyPage

    Объект класса CPropertyPage представляет собой отдельную страницу окна свойств, иначе называемую вкладкой диалогового окна. Как и для стандартного диалогового окна для каждой его вкладки необходимо создать отдельный класс, производный от класса CPropertyPage. Чтобы использовать объекты данного класса необходимо сначала создать объект класса CPropertySheet, а затем включить в него объекты классов всех составляющих его вкладок. Чтобы добавить в диалоговое окно новую вкладку необходимо вызвать для объекта ее класса функцию CPropertySheet::AddPage, а затем вывести это диалоговое окно на экран, вызвав функцию CPropertySheet::DoModal для модального диалогового окна или CPropertySheet::Create для немодального диалогового окна. Данное диалоговое окно может быть оформлено в стиле мастера, в котором диалоговое окно представляет собой последовательность вкладок, перемещение по которым происходит в определенной последовательности и управляется специальными кнопками в диалоговом окне. Такой тип окна часто применяется для установки программ и оборудования. Описание данного класса содержится в файле заголовка afxdlgs.h.


    OnSetActive

    virtual BOOL OnSetActive();

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

    Ненулевое, если вкладка успешно активизировалась, и нулевое в противном случае.

    Описание

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


    OnWizardBack

    virtual LRESULT OnWizardBack();

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

    Нулевое, для успешного перехода к предыдущей странице, и -1 для предотвращения перехода. Чтобы перейти к произвольной станице, возвратите идентификатор диалогового окна, которое необходимо вывести на экран.

    Описание

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


    OnWizardFinish

    virtual BOOL OnWizardFinish();

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

    Ненулевое, если окно мастера было уничтожено при завершении его работы, и нулевое в противном случае.

    Описание

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


    OnWizardNext

    virtual LRESULT OnWizardNext();

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

    Нулевое, для успешного перехода к следующей странице, и -1 для предотвращения перехода. Чтобы перейти к произвольной станице, возвратите идентификатор диалогового окна, которое необходимо вывести на экран.

    Описание

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


    CPropertySheet

    Объекты класса CPropertySheet представляют собой диалоговые окна со вкладками. Данный объект обычно включает в себя один или несколько объектов класса CPropertyPage. Данное диалоговое окно состоит из ярлыков вкладок, отображаемых в данном диалоговом окне и области, занимаемой текущей отображаемой вкладкой. Хотя класс CPropertySheet и не является производным от класса CDialog, многие функции данного класса, совпадают с функциями класса CDialog. Например, объект данного класса также создается в два этапа: сначала вызывается конструктор класса, а затем функция DoModal для создания модального диалогового окна со вкладками, или Create для создания немодального диалогового окна. Класс CPropertySheet имеет два типа конструкторов: CPropertySheet::Construct и CPropertySheet::CPropertySheet. Обмен данными между объектом класса CPropertySheet и некоторым внешним объектом осуществляется аналогично обмену данными с объектом класса CDialog. Основным отличием является то, что для инициализации объектов элементов управления вкладки используются переменные-члены класса CPropertyPage, а не переменные класса CPropertySheet. Класс CPropertySheet позволяет создать диалоговое окно, оформленное в стиле мастера, представляющее собой последовательность вкладок, перемещение по которым происходит в определенной последовательности и управляется специальными кнопками в диалоговом окне. В диалоговом окне мастера вкладки не имеют ярлыков и на экране отображается только одна вкладка. Вместо кнопок OK и Применить, в диалоговом окне мастера используются кнопки <Назад, Далее> или Готово. Кроме этого в нем используются кнопки Отмена и Справка. Чтобы создать диалоговое окно мастера, необходимо сначала создать простое диалоговое окно со вкладками, а затем, перед вызовом функции DoModal, вызвать функцию SetWizardButtons. Для того, чтобы после завершения работы пользователя с окном в нем появилась кнопка Готово, вызовите функцию SetFinishText. Описание данного класса содержится в файле заголовка afxdlgs.h.


    AddPage

    void AddPage(CPropertyPage *pPage);

    Аргументы

    • pPage - указатель на объект класса CPropertyPage, добавляемый в данное диалоговое окно. Не может принимать нулевое значение.

    Описание

    Данная функция добавляет вкладку в диалоговое окно и помещает ее ярлык в крайнюю правую позицию в окне. Поэтому, вкладки располагаются в диалоговом окне слева направо в порядке их включения в объект класса диалогового окна. Функция AddPage добавляет вкладку в окно, но не отображает ее на экране. Отображение происходит только после выбора соответствующего ярлыка вкладки. Диалоговое окно является родительским окном для вкладки, поэтому, для доступа к нему из объекта вкладки может быть использована функция CWnd::GetParent. Вызов функции AddPage может быть осуществлен до вызова функций DoModal или Create. При вызове данной функции в открытом диалоговом окне в ряду ярлыков немедленно произойдут соответствующие изменения.


    CPropertySheet::CPropertySheet

    CPropertySheet();
    CPropertySheet(UINT nIDCaption, CWnd *pParentWnd = NULL, UINT iSelectPage = 0);
    CPropertySheet(LPCTSTR pszCaption, CWnd *pParentWnd = NULL, UINT iSelectPage = 0);

    Аргументы

    • nIDCaption - идентификатор заголовка диалогового окна с вкладками.
    • pParentWnd - указатель на родительское окно диалогового окна с вкладками. Если данный аргумент равен нулю, то родительским окном для данного окна будет главное окно приложения.
    • iSelectPage - индекс вкладки, которая должна быть открытой при открытии окна. По умолчанию раскрывается первая вкладка. Нумерация вкладок определяется порядком включения их в диалоговое окно.
    • pszCaption - указатель на строку, содержащую заголовок диалогового окна со вкладками. Данный аргумент не может быть нулевым.

    Описание

    Данная функция используется для создания объектов класса CPropertySheet. Для вывода диалогового окна со вкладками на экран используются функции DoModal и Create. Строка, определяемая первым аргументом данной функции, помещается в заголовок диалогового окна.


    DoModal

    virtual int DoModal();

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

    IDOK или IDCANCEL, если работа с диалоговым окном завершилась без ошибок. В противном случае - 0 или -1. Если диалоговое окно было вызвано в режиме мастера, данная функция возвращает ID_WIZFINISH или IDCANCEL.

    Описание

    Данная функция вызывается для отображения диалогового окна со вкладками на экране. Возвращаемое значение определяется идентификатором элемента управления, с помощью которого было закрыто диалоговое окно. После выхода из функции объект класса окна уничтожается, но сам объект диалогового окна продолжает существовать. Обычно, информация из переменных объектов класса CPropertyPage извлекается после того, как функция DoModal возвратит значение IDOK. При первом создании вкладки диалогового окна из соответствующего ей ресурса диалогового окна может быть вызвано исключение. Это связано с тем, что объект класса CPropertyPage вносит изменения в стиль ресурса диалогового окна до создания самой вкладки. Поскольку обычно объекты ресурсов имеют атрибут только для чтения, это вызывает исключение. Это исключение обрабатывается программой, в результате чего в системе автоматически появляется модифицированная копия данного ресурса. Таким образом вызванное исключение игнорируется. Поскольку данное исключение должно обрабатываться операционной системой, не помещайте вызов функции CPropertySheet::DoModal в блок try/catch, обрабатывающий все исключения, например, с использованием оператора catch (...). Данный оператор возьмет на себя обработку исключения, предназначенного для операционной системы, что может привести к непредсказуемым последствиям. 


    SetFinishText

    void SetFinishText(LPCTSTR lpszText);

    Аргументы

    • lpszText - указатель на строку, отображаемую в кнопке Готово.

    Описание

    Данная функция вызывается для задания текста, отображаемого в кнопке Готово после завершения работы пользователя с окном мастера. Кроме отображения заданного теста данная функция убирает из диалогового окна кнопку <Назад.


    SetWizardButtons

    void SetWizardButtons(DWORD dwFlags);

    Аргументы

    • dwFlags - набор флагов, определяющих набор кнопок, используемых в мастере и их доступность. Этот аргумент может представлять собой комбинацию следующих значений:
      PSWIZB_BACK - доступна кнопка <Назад;
      PSWIZB_NEXT - доступна кнопка Далее>;
      PSWIZB_FINISH - присутствует кнопка Готово;
      PSWIZB_DISABLEDFINISH - кнопка Готово недоступна.

    Описание

    Данная функция вызывается для того, чтобы сделать доступными или недоступными кнопки <Назад, Далее> и Готово в диалоговом окне мастера. Функция SetWizardButtons может вызываться только в открытом диалоговом окне: ее нельзя вызывать до вызова функции DoModal. Обычно она вызывается в функции CPropertyPage::OnSetActive. Чтобы изменить текст в кнопке Готово и скрыть кнопки Далее> и <Назад, вызовите функцию SetFinishText. Поскольку кнопки Готово и Далее> разделяют одну и ту же физическую кнопку, они не могут отображаться одновременно. Кнопка Готово имеет приоритет и будет отображаться, если задано отображение сразу обеих кнопок.


    SetWizardMode

    void SetWizardMode();

    Описание

    Данная функция вызывается для установления режима отображения вкладок в стиле мастера. Основными отличительными особенностями отображения вкладок в режиме мастера является использование для перехода от одной вкладки к другой кнопок Далее>, <Назад, Готово и Отмена вместо ярлыков вкладок. Функция SetWizardMode вызывается перед функцией DoModal. После этого функция DoModal возвращает одно из значений: ID_WIZFINISH (если для закрытия диалогового окна использовалась кнопка Готово) или IDCANCEL (если для закрытия диалогового окна использовалась кнопка Отмена). Данная функция устанавливает флаг PSF_WIZARD.


    CRect

    Класс CRect во многом аналогичен структуре RECT, определенной в операционной системе Windows. Класс CRect включает в себя функции для работы с объектами данного класса и структуры RECT. Объекты класса CRect могут использоваться в аргументах функций вместо объектов структуры RECT, а также вместо указателей LPCRECT или LPRECT. Данный класс является производным от структуры tagRECT (имя tagRECT является менее распространенным именем для структуры RECT). Это означает, что переменные left, top, right и bottom структуры RECT являются доступными членами класса CRect. Объект класса CRect содержит переменные для задания левого верхнего и правого нижнего углов прямоугольника. При создании объекта класса CRect необходимо убедиться в том, что задаваемые координаты прямоугольника нормализованы, то есть координата left меньше координаты right, а координата top меньше координаты bottom. Например, координаты левого верхнего угла (10,10) и координаты правого нижнего угла (20,20) задают нормализованный прямоугольник, а координаты левого верхнего угла (20,20) и координаты правого нижнего угла (10,10) задают ненормализованный прямоугольник. Если прямоугольник не нормализован, то многие функции класса CRect могут возвращать неправильные результаты. Список этих функций приведен при описании функции NormalizeRect. Перед вызовом данных функций необходимо вызвать функцию NormalizeRect, нормализующую объект своего класса. При использовании объектов класса CRect в функциях CDC::DPtoLP и CDC::LPtoDP следует соблюдать осторожность. Если используемый режим отображения предполагает использование отрицательных вертикальных координат, как это имеет место в режиме отображения MM_LOENGLISH, то функция CDC::DPtoLP преобразует объект класса CRect таким образом, что его координата top будет иметь большее значение, чем координата bottom. Это приведет к тому, что функции Height и Size будут возвращать отрицательные значения высоты преобразованного объект класса CRect и данный прямоугольник станет ненормализованным. При перегрузке операторов класса CRect первым операндом должен быть объект класса CRect, а вторым - объект структуры RECT или объект класса CRect. Описание данного класса содержится в файле заголовка afxwin.h.


    PtInRect

    BOOL PtInRect(POINT point) const;

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

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

    Аргументы

    • point - объект структуры POINT или объект класса CPoint, положение которого требуется оценить.

    Описание

    Определяет, лежит ли данная точка в пределах прямоугольника, описываемого объектом класса CRect. Точка считается лежащей в пределах прямоугольника, описываемого объектом класса CRect, если она лежит на его левой или верхней стороне или находится внутри него. Точка, лежащая на правой или нижней сторонах данного прямоугольника считается находящейся за его пределами. Для нормальной работы данной функции прямоугольник должен быть нормализован. Для нормализации прямоугольника необходимо вызвать функцию NormalizeRect до вызова данной функции.


    CRgn

    Класс CRgn содержит методы для работы с областями окон Windows с использованием интерфейса графических устройств. Область может иметь эллиптическую или прямоугольную форму. Для работы с областями окон совместно используются функции-члены класса CRgn и функции отсечения неотображаемых фрагментов класса CDC. Функции класса CRgn позволяют создавать, изменять и получать информацию об областях окон Windows. Описание данного класса содержится в файле заголовка afxwin.h.


    CreateRectRgnIndirect

    BOOL CreateRectRgnIndirect(LPCRECT lpRect);

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

    Ненулевое, в случае успешного завершения операции, и ноль в противном случае.

    Аргументы

    • lpRect - указатель на объект структуры RECT или объект класса CRect, содержащий логические координаты левого верхнего и правого нижнего углов данной области.

    Описание

    Создает прямоугольную область и сохраняет ее в объекте класса CRgn. Размер области ограничен размером его сторон, каждая из которых не может превышать 32767 логических единиц, и объемом используемой данным объектом памяти, который не может превышать 64 КБ. По окончании использования объекта класса CRgn, созданного функцией CreateRectRgnIndirect, приложение должно использовать функцию CGDIObject::DeleteObject для его удаления.


    CRichEditView

    Расширенное текстовое поле представляет собой окно, в котором пользователь может редактировать текст. Для вывода текста в данном окне могут быть использованы различные шрифты, введенный текст может форматироваться и в него могут включаться различные объекты OLE. Хотя расширенное текстовое поле и позволяет осуществлять форматирование текста, однако все необходимые для этого элементы пользовательского интерфейса должны быть созданы самим пользователем. Класс CRichEditView, совместно с классами CRichEditDoc и CRichEditCntrItem, обеспечивают функционирование элемента управления расширенное текстовое поле в рамках заложенной в основу библиотеки MFC концепции документ/представление. Класс CRichEditView содержит методы для редактирования и форматирования текста. Класс CRichEditDoc позволяет работать со списками клиентов OLE используемыми в приложении. Класс CRichEditCntrItem обеспечивает доступ к клиентам OLE со стороны контейнера. Использование расширенного текстового поля (а следовательно и объектов класса CRichEditCtrl и связанных с ним классов) возможно только при работе под управлением операционной системы Windows 95 или Windows NT версии 3.51 или более поздних версий данных операционных систем. Описание данного класса содержится в файле заголовка afxrich.h.


    GetCharFormatSelection

    CHARFORMAT2& GetCharFormatSelection();

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

    Объект структуры CHARFORMAT2, содержащий текущие атрибуты форматирования выделенного участка текста.

    Описание

    Данная функция позволяет получить текущие атрибуты форматирования выделенного участка текста. Хотя в библиотеке MSDN указано, что данная функция возвращает объект структуры CHARFORMAT, при попытке запомнить его в объекте данной структуры компилятор выдает сообщение о невозможности преобразования объекта структуры CHARFORMAT2 в объект структуры CHARFORMAT.


    OnCharEffect

    void OnCharEffect(DWORD dwMask, DWORD dwEffect);

    Аргументы

    • dwMask - определяет параметры форматирования шрифтов, подлежащие изменению. Может представлять собой комбинацию следующих значений:
      CFM_BOLD - используется значение флага CFE_BOLD в аргументе dwEffects;
      CFM_COLOR - используется значение флага CFE_AUTOCOLOR в аргументе dwEffects;
      CFM_ITALIC - используется значение флага CFE_ITALIC в аргументе dwEffects;
      CFM_PROTECTED - используется значение флага CFE_PROTECTED в аргументе dwEffects;
      CFM_STRIKEOUT - используется значение флага CFE_STRIKEOUT в аргументе dwEffects;
      CFM_UNDERLINE - используется значение флага CFE_UNDERLINE в аргументе dwEffects.
    • dwEffect - содержит список операций форматирования. Может представлять собой комбинацию следующих значений:
      CFE_AUTOCOLOR - цвет текста принимает значение, возвращаемое функцией GetSysColor (COLOR_WINDOWTEXT);
      CFE_BOLD - текст отображается жирным шрифтом;
      CFE_ITALIC - текст отображается курсивом;
      CFE_STRIKEOUT - производится зачеркивание текста;
      CFE_UNDERLINE - производится подчеркивание текста;
      CFE_PROTECTED - устанавливается запрет на внесение изменений в параметры шрифта. При попытке внесения в него изменений посылается сообщение EN_PROTECTED.

    Описание

    Данная функция позволяет изменять формат символов в выделенном тексте. 


    OnParaAlign

    void OnParaAlign(WORD wAlign);

    Аргументы

    • wAlign - определяет формат абзаца. Может принимать одно из следующих значений:
      PFA_LEFT - абзац выравнивается по левому краю;
      PFA_RIGHT - абзац выравнивается по правому краю;
      PFA_CENTER - абзац выравнивается по центру.

    Описание

    Данная функция осуществляет форматирование выделенного абзаца.


    SetCharFormat

    void SetCharFormat(CHARFORMAT2 cf);

    Аргументы

    • cf - объект структуры CHARFORMAT2, содержащий новые атрибуты форматирования текста по умолчанию.

    Описание

    Данная функция позволяет установить атрибуты форматирования нового текста в объекте класса CRichEditView. В результате выполнения функции SetCharFormat изменяются только те атрибуты текста, которые определены в переменной dwMask аргумента cf. Хотя в библиотеке MSDN указано, что аргументом данной функции является объект структуры CHARFORMAT, при попытке передачи аргумента данного типа компилятор выдает сообщение о невозможности преобразования объекта структуры CHARFORMAT в объект структуры CHARFORMAT2.


    CScrollView

    Класс CScrollView реализует все возможности класса CView, дополняя их возможностью прокрутки изображения в окне. Чтобы реализовать возможности прокрутки изображения в любом классе, производном от класса CView достаточно перегрузить в нем функции обработки сообщений OnHScroll и OnVScroll, однако класс CScrollView позволяет использовать следующие возможности: самостоятельно обрабатывает информацию о размерах окна и его рабочей области, а также о режимах отображения;
    автоматически прокручивает изображение в ответ на сообщения, поступающие от полосы прокрутки;
    автоматически прокручивает изображение в ответ на сообщения, поступающие от клавиатуры, обычной мыши и от колесика мыши IntelliMouse.
    Для обработки сообщений от колесика мыши используются функции OnMouseWheel и OnRegisteredMouseWheel. В классе CScrollView реализация этих функции по умолчанию обеспечивает рекомендованную реакцию на сообщение WM_MOUSEWHEEL. Чтобы обеспечить в пользовательском классе просмотра возможность автоматической прокрутки окна следует использовать в качестве его базового класса класс CScrollView вместо класса CView. Для определения размера прокручиваемой области в функциях CView::OnInitialUpdate и CView::OnInitialUpdate вызывается функция SetScrollSizes (для определения значений ее аргументов пользователю необходимо написать свой программный код). Вызов функции SetScrollSizes позволяет установить режим отображения, общий размер прокручиваемой области и шаг вертикальной и горизонтальной прокрутки. Все размеры задаются в логических единицах. Логический размер области представления обычно определяется исходя из информации, хранящейся в документе, но в некоторых случаях используются фиксированные размеры области представления. Шаг горизонтальной и вертикальной прокрутки задается в логических единицах. По умолчанию, если пользователь щелкает левой кнопкой мыши в полосе прокрутки за пределами бегунка, то представление прокручивается на страницу. Если пользователь щелкает по стрелкам прокрутки, расположенным на концах полосы прокрутки, то представление прокручивается на строку. По умолчанию страница представляет собой 1/10 от общего размера области представления, а строка - 1/10 от размера страницы. Чтобы изменить эти величины следует вызвать функцию SetScrollSizes. Например при установке параметров вертикальной прокрутки текста размер страницы может быть установлен таким образом, чтобы после прокрутки вниз первой строкой нового окна была бы последняя строка старого окна, а размер строки равнялся бы высоте текстовой строки, выведенной с использованием текущего шрифта. Вместо прокрутки изображения в окне объект класса CScrollView может автоматически масштабировать область представления таким образом, чтобы ее размеры совпадали с размерами рабочей области окна. В этом режиме в окне отсутствуют полосы прокрутки. Чтобы использовать эту возможность нужно вызвать функцию CScrollView::SetScaleToFitSize (можно использовать функцию SetScaleToFitSize или SetScrollSizes, но не обе функции одновременно). Перед вызовом функции OnDraw пользовательского класса представления объект класса CScrollView автоматически устанавливает начало координат объекта класса CPaintDC, передаваемого в качестве аргумента данной функции. Чтобы установить начало координат в прокручиваемом окне класс CScrollView перегружает функцию CView::OnPrepareDC. Это позволяет автоматически установить начало координат объекта класса CPaintDC передаваемого классом CScrollView своей функции OnDraw. При использовании пользователем объектов класса CClientDC и других подобных объектов классов контекста устройств ему необходимо самому вызывать функцию CScrollView::OnPrepareDC. Перегрузка функции CScrollView::OnPrepareDC позволяет установить перо, цвет фона и другие атрибуты контекста устройств, но в этой функции обязательно должен быть вызван метод базового класса для реализации процедуры масштабирования. Различают следующие разновидности полос прокрутки: стандартные полосы прокрутки, имеющие стиль окна, и устанавливаемые стилями WS_HSCROLL и WS_VSCROLL;
    полосы прокрутки, добавляемые в главное окно приложения, содержащее данный объект класса представления. В этом случае главное окно приложения само посылает сообщения WM_HSCROLL и WM_VSCROLL активному объекту класса представления;
    главное окно приложения передает сообщения прокрутки от объекта класса элемента управления CSplitterWnd активной панели разделенного окна (представлению). Если объект класса CSplitterWnd использует разделяемые полосы прокрутки, то объект класса CScrollView использует эту полосу прокрутки, а не создает новую.
    Описание данного класса содержится в файле заголовка afxwin.h.


    SetScrollSizes

    void SetScrollSizes(int nMapMode, SIZE sizeTotal, const SIZE& sizePage = sizeDefault, const SIZE& sizeLine = sizeDefault);

    Аргументы

    • nMapMode - режим отображения, установленный в данном объекте класса просмотра. Значения, которые может принимать данный аргумент перечислены в таблице П2.6. Таблица П2.6. Характеристики режимов отображения
      Режим отображения Логические единицы Направление по оси Y
      MM_TEXT 1 элемент изображения Вниз
      MM_HIMETRIC 0.01 мм Вверх
      MM_TWIPS 1/1440 дюйма Вверх
      MM_HIENGLISH 0.001 дюйма Вверх
      MM_LOMETRIC 0.1 мм Вверх
      MM_LOENGLISH 0.01 дюйма Вверх

      Режим отображения Логические единицы Направление по оси Y
      Все эти режимы определены в Windows. Класс CScrollView не использует два стандартных режима: MM_ISOTROPIC и MM_ANISOTROPIC. В библиотеке MFC предусмотрена функция SetScaleToFitSize, производящая масштабирование области представления к размерам рабочей области окна.
    • sizeTotal - общий размер прокручиваемой области представления. Переменная cx данного объекта структуры SIZE содержит ее размер по горизонтали, а переменная cy - ее размер по вертикали. Размеры определяются в логических единицах. Как переменная cx, так и переменная cy должны иметь значение большее либо равное нулю.
    • sizePage - шаг перемещения изображения по горизонтали или по вертикали при щелчке левой кнопкой мыши в полосе прокрутки за пределами бегунка. Переменная cx данного объекта структуры SIZE содержит шаг перемещения по горизонтали, а переменная cy - шаг перемещения по вертикали.
    • sizeLine - шаг перемещения изображения по горизонтали и по вертикали при щелчке левой кнопкой мыши по стрелкам полосы прокрутки. Переменная cx данного объекта структуры SIZE содержит шаг перемещения по горизонтали, а переменная cy - шаг перемещения по вертикали.

    Описание

    Функция SetScrollSizes вызывается при обновлении окна представления. Обычно она вызывается в функции OnUpdate для настройки параметров прокрутки, например при первом выводе документа на экран или при изменении его размеров. Обычно информация, на основании которой вычисляются размеры области представления, получается из связанного с данным представлением документа. Например, если размер документа возвращается функцией GetMyDocSize, вызов данной функции будет выглядеть следующим образом: SetScrollSizes(nMapMode, GetDocument()->GetMyDocSize()); В противном случае можно использовать фиксированный размер области представления, например: SetScrollSizes(nMapMode, CSize(100, 100)); В данной функции может использоваться любой режим отображения Windows, кроме MM_ISOTROPIC и MM_ANISOTROPIC. При использовании данных стилей вместо функции SetScrollSizes используется функция SetScaleToFitSize


    CSingleLock

    Объекты класса CSingleLock используются для контроля доступа к ресурсам в приложении, использующем несколько потоков. Для работы с классами синхронизации CSemaphore, CMutex, CCriticalSection и CEvent необходимо создать объект класса CSingleLock или CMultiLock для ожидания и освобождения объекта класса синхронизации. Объект класса CSingleLock используется в том случае, когда необходимо работать только с одним объектом класса синхронизации. Объект класса CMultiLock используется в том случае, когда необходимо одновременно работать с несколькими объектами классов синхронизации. Для использования объект класса CSingleLock необходимо вызвать его конструктор в функции-члене класса контролируемого ресурса. После этого вызывается функция IsLocked для определения того, доступен ли данный ресурс. Если он доступен, то можно продолжать выполнение функции-члена класса контролируемого ресурса. Если ресурс недоступен, нужно или подождать его освобождения, или аварийно завершить данную функцию. После того, как использование ресурса будет завершено, необходимо или вызвать функцию Unlock, если предполагается дальнейшее использование объекта класса CSingleLock, или уничтожить объект данного класса. Класс CSingleLock не имеет базового класса. Описание данного класса содержится в файле заголовка afxmt.h.


    IsLocked

    BOOL IsLocked();

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

    Ненулевое, если объект недоступен, и нулевое в противном случае.

    Описание

    Определяет является ли объект, связанный с данным объектом класса CSingleLock, неотмеченным (недоступным).


    Lock

    BOOL Lock(DWORD dwTimeOut = INFINITE);

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

    Ненулевое, в случае успешного завершения работы функции, и нулевое в противном случае.

    Аргументы

    • dwTimeOut - определяет интервал времени в течение которого данная функция будет ожидать отметки объекта синхронизации (его доступности). Если данный аргумент имеет значение INFINITE, то функция Lock будет ждать до тех пор, пока объект не станет доступным.

    Описание

    Данная функция позволяет получить доступ к ресурсу, контролируемому объектом синхронизации, указанным в конструкторе данного класса. Если объект синхронизации устанавливается в отмеченное состояние, функция Lock успешно завершает свою работу и поток, в котором она вызывается получает право собственности на объект. Если объект синхронизации находится в неотмеченном состоянии (недоступен), функция Lock ожидает его отметки в течение указанного в аргументе dwTimeOut промежутка времени (измеряемого в миллисекундах). Если в течение этого промежутка времени объект синхронизации не отмечается, то функция Lock возвращает нулевое значение.


    CSingleLock

    CSingleLock(CSyncObject* pObject, BOOL bInitialLock = FALSE);

    Аргументы

    • pObject - указатель на объект класса синхронизации, к которому необходимо обеспечить доступ. Не может иметь нулевое значение.
    • bInitialLock - определяет необходимость запросить доступ к объекту класса синхронизации при создании данного объекта.

    Описание

    Создает объект CSingleLock. Как правило, данный объект создается в функции-члене класса, осуществляющей доступ к разделяемому ресурсу.


    Unlock

    BOOL Unlock(); BOOL Unlock(LONG lCount, LPLONG lPrevCount = NULL);

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

    Ненулевое, в случае успешного завершения работы функции, и нулевое в противном случае.

    Аргументы

    • lCount - количество доступов, которые необходимо освободить. Значение данного аргумента должно быть больше нуля. Если указанное количество приведет к переполнению счетчика объектов значение счетчика не изменяется, а функция возвращает значение FALSE.
    • lPrevCount - указатель на переменную, в которую будет записано предыдущее значение счетчика синхронизации объектов. Если данный аргумент имеет значение NULL, то предыдущее значение счетчика не возвращается.

    Описание

    Освобождает объекты синхронизации, принадлежащие данному объекту класса CSingleLock. Эта функция вызывается деструктором класса CSingleLock. Если необходимо освободить более одного объекта в семафоре, используйте вторую версию данной функции и укажите число освобождаемых объектов.


    CSliderCtrl

    Линейный регулятор представляет собой окно, содержащее бегунок и метки шкалы. Метки шкалы могут не отображаться. Когда пользователь перемещает бегунок, используя мышь или клавиши управления курсором, данный элемент управления посылает сообщения о перемещении. Этот элемент управления может использоваться для выбора дискретных или непрерывных значений из определенного диапазона значений. Например, линейный регулятор может использоваться для установки скорости повторения символов при нажатой клавише. Класс CSliderCtrl обеспечивает функционирование линейного регулятора в операционной Windows. Этот элемент управления (а следовательно и класс CSliderCtrl) доступен только в программах, работающих под управлением Windows 95 и Windows NT версии 3.51 или более поздних версий данных операционных систем. Бегунок линейного регулятора может перемещаться только на те приращения, которые определил пользователь при его создании. Например, если для данного линейного регулятора задан диапазон пять, то его бегунок может занимать только шесть позиций: крайнюю левую позицию в окне линейного регулятора и по одной позиции для каждого приращения в данном диапазоне. Обычно, каждая из этих позиций идентифицируется меткой шкалы. При создании объекта класса линейного регулятора используется его конструктор и функция Create. После создания объекта данного класса необходимо использовать его функции для задания параметров его отображения и масштабных параметров. Эти параметры включают в себя минимальную и максимальную позицию для бегунка, шаг меток шкалы, шаг перемещения при нажатии клавиш управления курсором и начальную позицию бегунка. Описание данного класса содержится в файле заголовка afxcmn.h.


    GetPos

    int GetPos() const;

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

    Текущее положение бегунка.

    Описание

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


    SetLineSize

    int SetLineSize(int nSize);

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

    Предыдущее значение размера строки.

    Аргументы

    • nSize - новый размер строки в линейном регуляторе.

    Описание

    Данная функция используется для установления нового размера строки в линейном регуляторе. Этот параметр определяет шаг перемещения бегунка при обработке сообщений TB_LINEUP и TB_LINEDOWN. Эти сообщения посылаются соответствующими клавишами управления курсором.


    SetPageSize

    int SetPageSize(int nSize);

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

    Предыдущее значение размера страницы.

    Аргументы

    • nSize - новый размер страницы в линейном регуляторе.

    Описание

    Данная функция используется для установления нового размера страницы в линейном регуляторе. Этот параметр определяет шаг перемещения бегунка при обработке сообщений TB_PAGEUP и TB_PAGEDOWN. Эти сообщения посылаются клавишами управления курсором и .


    SetRange

    void SetRange(int nMin, int nMax, BOOL bRedraw = FALSE);

    Аргументы

    • nMin - нижняя граница диапазона изменения.
    • nMax - верхняя граница диапазона изменения.
    • bRedraw - флаг перерисовки. Если этот аргумент имеет значение TRUE, то окно линейного регулятора будет перерисовано после установки новых параметров, в противном случае оно не будет перерисовано.

    Описание

    Данная функция вызывается для задания диапазона (максимальной и минимальной его границ) перемещения бегунка в окне линейного регулятора.


    SetTicFreq

    void SetTicFreq(int nFreq);

    Аргументы

    • nFreq - шаг меток шкалы.

    Описание

    Данная функция устанавливает шаг меток шкалы, отображаемых в окне линейного регулятора. Например, если шаг меток шкалы задан равным двум, то метки шкалы отображаются для каждой второй позиции бегунка в окне линейного регулятора. По умолчанию эта величина равна единице (метка устанавливается у каждой позиции бегунка). Чтобы иметь возможность использовать данную функцию необходимо установить в функции CSliderCtrl::Create стиль TBS_AUTOTICKS


    CStatusBar

    Объект класса CStatusBar представляет собой панель управления, состоящую из ряда панелей, содержащих текстовую информацию, или "индикаторов". Эти панели обычно используются для вывода сообщений и индикации различных состояний. Они используются, например, для вывода справочной информации о командах меню и индикации состояния клавиш , и . В библиотеке MFC версии 4.0 появилась функция CStatusBar::GetStatusBarCtrl, позволяющая пользователю получить непосредственный доступ к элементу управления Windows. Непосредственное использование элемента управления Windows позволяет вносить в него изменения и использовать дополнительные возможности данного элемента управления. Функции-члены класса CStatusBar обеспечивают достаточно широкие возможности для работы с панелью инструментов, но функция GetStatusBarCtrl позволяет использовать дополнительные возможности строки состояния в Windows 95. Функция GetStatusBarCtrl возвращает ссылку на объект класса CStatusBarCtrl. Приложение хранит информацию об индикаторе строки состояния в массиве, в котором крайнему левому индикатору соответствует нулевой индекс. При создании объекта класса строки состояния используется массив идентификаторов индикаторов, который приложение связывает с соответствующим массивом индикаторов. После этого для доступа к индикатору может использоваться как его идентификатор, так и его индекс в массиве. По умолчанию первый индикатор является "эластичным": он занимает все место, не занятое в строке состояния другими индикаторами. Таким образом другие панели индикаторов выравниваются по правому краю. Чтобы создать в приложении строку состояния: 1. Создайте объект класса CStatusBar. 2. Вызовите функцию Create (или CreateEx), создающую в окне строку состояния Windows и связывающую ее с объектом класса CStatusBar. 3. Вызовите функцию SetIndicators, сопоставляющую каждой панели индикатора свой идентификатор. Существует три способа обновления текста в панели строки состояния:

    • вызвать функцию CWnd::SetWindowText для обновления текста нулевой панели;
    • вызвать функцию CCmdUI::SetText в функции обработки сообщения ON_UPDATE_COMMAND_UI в классе строки состояния;
    • вызвать функцию SetPaneText для обновления текста в каждой панели.

    Для изменения стиля панели строки состояния вызывается функция SetPaneStyle. Описание данного класса содержится в файле заголовка afxext.h.

    CommandToIndex

    int CommandToIndex(UINT nIDFind) const;
    Возвращаемое значение Индекс панели индикатора, в случае успешного завершения функции, и -1 в противном случае.

    Аргументы

    • nIDFind - идентификатор панели, индекс которой требуется получить.

    Описание

    Позволяет получить индекс индикатора по заданному идентификатору. Первый индикатор имеет нулевой индекс.


    Create

    BOOL Create(CWnd* pParentWnd, DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_BOTTOM, UINT nID = AFX_IDW_STATUS_BAR);

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

    Ненулевое, в случае успешного завершения функции, и нулевое в противном случае.

    Аргументы

    • pParentWnd - указатель на объект класса CWnd окно которого является родительским окном окна строки состояния.
    • dwStyle - стиль строки состояния. В дополнение к стандартным стилям Windows в данном аргументе могут присутствовать следующие стили:
      CBRS_TOP - панель управления расположена над рабочей областью главного окна приложения;
      CBRS_BOTTOM - панель управления расположена под рабочей областью главного окна приложения;
      CBRS_NOALIGN - панель управления не изменяет своего положения при изменении размеров и положения родительского окна.
    • nID - идентификатор дочернего окна строки состояния.

    Описание

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


    SetIndicators

    BOOL SetIndicators(const UINT* lpIDArray, int nIDCount);

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

    Ненулевое, в случае успешного завершения функции, и нулевое в противном случае.

    Аргументы

    • lpIDArray - указатель на массив идентификаторов.
    • nIDCount - размерность массива, на который указывает аргумент lpIDArray.

    Описание

    Сопоставляет каждому идентификатору индикатора значение, указанное для него в массиве lpIDArray, загружает строковый ресурс, определенный для каждого идентификатора, и выводит его в соответствующей панели.


    SetPaneInfo

    void SetPaneInfo(int nIndex, UINT nID, UINT nStyle, int cxWidth);

    Аргументы

    • nIndex - индекс панели индикатора, для которой устанавливается данный стиль.
    • nID - новый идентификатор для панели индикатора.
    • nStyle - новый стиль панели индикатора. Может принимать следующие значения:
      SBPS_NOBORDERS - панель не имеет объемной рамки;
      SBPS_POPOUT - инвертированная рамка, такая что панель выглядит выступающей;
      SBPS_DISABLED - запрещает вывод текста в панель;
      SBPS_STRETCH - данная панель растягивается таким образом, чтобы заполнить все свободное место. Этот стиль может иметь только одна панель в строке состояния;
      SBPS_NORMAL - панель не растягивается, не имеет рамки и не выступает.
    • cxWidth - новая ширина панели индикатора.

    Описание

    Устанавливает для панели индикатора новые идентификатор, стиль и ширину.


    SetPaneText

    BOOL SetPaneText(int nIndex, LPCTSTR lpszNewText, BOOL bUpdate = TRUE);

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

    Ненулевое, в случае успешного завершения функции, и нулевое в противном случае.

    Аргументы

    • nIndex - индекс панели, в которую необходимо вывести текст.
    • lpszNewText - указатель на текстовую строку, содержащую выводимый текст.
    • bUpdate - если этот аргумент имеет значение TRUE, то содержимое панели обновляется для отображения в ней нового текста.

    Описание

    Выводит в панель индикаторов текст, на который указывает аргумент lpszNewText.


    CString

    Объект класса CString используется для хранения текстовой строки переменного размера. Функции и операции данного класса во многом аналогичны операторам языка Basic. Использование операций конкатенации и сравнения строк, а также упрощение операций по работе с памятью, существенно облегчают работу с объектом класса CString по сравнению с обычным массивом символов. Для представления символов в объекте класса CString используется тип TCHAR. Если для программы определен символ _UNICODE, то типу TCHAR соответствует тип wchar_t (16-разрядный символ), в противном случае этому типу соответствует тип char (обычный 8-разрядный символ). При использовании кодировки Unicode объекты класса CString состоят из 16-разрядных символов. При использовании кодировки Windows они состоят из 8-разрядных символов. Если не определен символ _UNICODE, объект класса CString позволяет использовать многобайтные наборы символов (MBCS известные так же, как DBCS). При этом следует помнить, что объект класса CString при проведении строковых операций рассматривает строки MBCS как набор 8-разрядных символов. Поэтому приложение должно само взять на себя задачу подготовки аргументов для данных операций и правильной интерпретации полученных результатов. Объекты класса CString имеют следующие особенности:
    • объект класса CString позволяет увеличивать размер хранимой в нем строки для размещения результата операции слияния строк;
    • объект класса CString следует рассматривать как строку, а не как указатель на нее;
    • объект класса CString самостоятельно преобразуется к типу const char* и LPCTSTR, что позволяет использовать его в качестве аргументов функций, имеющих данный тип;
    • оператор явного преобразования типов позволяет получить доступ к содержимому объекта данного класса как к строке символов, имеющей атрибут только для чтения.
    По возможности следует избегать создания динамических объектов класса CString. Это поможет сэкономить память, и упростит доступ к данному объекту. Класс CString позволяет незначительно уменьшить объем используемой оперативной памяти за счет того, что две строки, имеющие одно и то же содержимое, разделяют одну и ту же область памяти. Однако эта копеечная экономия приводит к тому, что в случае непосредственного изменения содержимого буфера, содержащего данную строку (в обход функций библиотеки MFC) изменения будут внесены сразу в обе строки. Класс CString включает в себя две функции, позволяющие защитить данные от подобных изменений: CString::LockBuffer и CString::UnlockBuffer. При вызове функции LockBuffer создается копия данной строки, а ее счетчик обращений устанавливается в -1, что означает передачу данной копии в безраздельное пользование данному объекту класса CString. В этом режиме никакой другой объект класса CString не может получить доступ к данной строке, а данный объект класса не может получить доступ к другой строке. Этот режим гарантирует, что все изменения, внесенные в данный объект, не приведут к порче информации, хранимой в других объектах. После завершения модификации новой строки вызывается функция UnlockBuffer, устанавливающая счетчик обращений в 1. Класс CString не имеет базового класса. Описание данного класса содержится в файле заголовка afx.h. 


    Empty

    void Empty();

    Описание

    Очищает объект класса CString и освобождает память в случае необходимости.


    Format

    void Format(LPCTSTR lpszFormat, ...);
    void Format(UINT nFormatID, ...);

    Аргументы

    • lpszFormat - строка форматирования.
    • nFormatID - идентификатор строкового ресурса, содержащий строку форматирования.

    Описание

    Данная функция позволяет записать в объект класса CString форматированную строку аналогично тому, как это делает функция sprintf для символьных массивов. В результате выполнения данной функции в объекте класса CString сохраняется форматированная последовательность символов и значений величин. Каждый дополнительный аргумент, если он присутствует, преобразуется и выводится в соответствии со спецификациями формата, содержащимися в аргументе lpszFormat или в строковом ресурсе, определяемом идентификатором nFormatID. Функция аварийно завершит свою работу, если в качестве аргумента функции Format будет указана сама строка. Например, выполнение следующего программного кода приведет к непредсказуемым результатам:
    CString str = "Some Data";
    str.Format("%s%d", str, 345);
    Если в качестве дополнительного аргумента передается строка символов, ее необходимо явным образом преобразовать к типу LPCTSTR. Строка форматирования имеет ту же форму и функцию, что и формат аргументов функции printf. В конец записанной строки символов добавляется нулевой символ.


    LoadString

    BOOL LoadString(UINT nID);
    throw(CMemoryException);

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

    Ненулевое, в случае успешного завершения функции, и нулевое в противном случае.

    Аргументы

    • nID - идентификатор строкового ресурса Windows.

    Описание

    Считывает строковый ресурс Windows, определяемый аргументом nID, в существующий объект класса CString.


    CToolBar

    Объекты класса CToolBar представляют собой панели управления, представляющие собой ряд кнопок, на которых помещены битовые образы, между которыми могут находиться разделители. Кнопки панели инструментов могут действовать как обычные кнопки, переключатели или флажки. Обычно объекты класса CToolBar внедряются в объекты оконных классов, производных от класса CFrameWnd или от класса CMDIFrameWnd. В библиотеке MFC версии 4.0 появилась функция CToolBar::GetToolBarCtrl, позволяющая пользователю получить непосредственный доступ к элементу управления Windows. Непосредственное использование элемента управления Windows позволяет вносить в него изменения и использовать дополнительные возможности данного элемента управления. Функции-члены класса CToolBar обеспечивают достаточно широкие возможности для работы с панелью инструментов, но функция GetToolBarCtrl позволяет использовать дополнительные возможности панелей инструментов в Windows 95. Функция GetToolBarCtrl возвращает ссылку на объект класса CToolBarCtrl. Чтобы создать панель инструментов с помощью редактора ресурсов:
    1. Создайте ресурс панели инструментов.
    2. Создайте объект класса CToolBar.
    3. Вызовите функцию Create (CreateEx) для создания панели инструментов Windows и связывания ее с объектом класса CToolBar.
    4. Вызовите функцию LoadToolBar для загрузки ресурса панели инструментов.
    Чтобы создать панель инструментов другим способом:
    1. Создайте объект класса CToolBar.
    2. Вызовите функцию Create (CreateEx) для создания панели инструментов Windows и связывания ее с объектом класса CToolBar.
    3. Вызовите функцию LoadBitmap для загрузки битового образа, содержащего значки для кнопок панели инструментов.
    4. Вызовите функцию SetButtons для установки стиля кнопок и сопоставьте каждой кнопке соответствующий ее битовый образ.
    Все значки для кнопок панели инструментов хранятся в одном битовом образе. Все значки должны иметь одинаковые размеры. По умолчанию каждый значок имеет 16 элементов изображения в ширину и 15 элементов изображения в высоту. Значки должны располагаться в битовом образе без промежутков между ними. Функция SetButtons получает указатель на массив идентификаторов элементов управления и целочисленную величину, определяющую количество элементов в массиве. Функция сопоставляет каждому идентификатору кнопки сегмент битового образа и назначает каждой кнопке индекс значка, определяющий положение значка кнопки в битовом образе. Если элемент массива имеет значение ID_SEPARATOR, ему не назначается никакого индекса значка. Порядок значков в битовом образе обычно совпадает с порядком их отображения на экране, но с использованием функции SetButtonInfo порядок вывода значков может быть изменен. Все кнопки в панели инструментов имеют одинаковый размер. По умолчанию их размер составляет 24х22 элементов изображения. Этот размер определен в документе Windows Interface Guidelines for Software Design. Дополнительное пространство, образовавшееся вследствие разницы размеров кнопки и значка, используется для формирования рамки вокруг значка. Каждая кнопка имеет один значок. Все изображения на кнопке, отображающие ее состояние (нажата, отжата, недоступна, недоступна и нажата и промежуточное состояние) формируются из одного значка, связанного с кнопкой. Хотя битовый образ может иметь любой цвет, наилучшие результаты достигаются при использовании черного цвета и оттенков серого. По умолчанию кнопки панели инструментов имитируют простые кнопки. Однако они могут имитировать также и переключатели и флажки. Флажки имеют три состояния: установлен, сброшен и неопределенное. Переключатели имеют только два состояния: установлен и сброшен. Для установки стиля отдельной кнопки или разделителя без обращения к массиву сначала необходимо вызвать функцию GetButtonStyle, чтобы получить ее текущее состояние, а затем вызвать функцию SetButtonStyle вместо вызова функции SetButtons. Функцию SetButtonStyle целесообразно использовать при изменении стиля кнопки в процессе работы с приложением. Если необходимо, чтобы в кнопке появился текст, вызовите функцию GetButtonText, чтобы получить текст, который должен быть выведен в кнопке, а затем вызовите функцию SetButtonText для установки текста. Чтобы создать флажок в панели инструментов, необходимо использовать стиль TBBS_CHECKBOX или вызвать функцию CCmdUI::SetCheck при обработке сообщения ON_UPDATE_COMMAND_UI. Вызов функции SetCheck превращает обычную кнопку во флажок. Если аргумент функции SetCheck имеет значение 0, то флажок сбрасывается, если он имеет значение 1, то флажок устанавливается, а значение 2 соответствует неопределенному состоянию. Чтобы создать переключатель, необходимо вызвать функцию CCmdUI::SetRadio при обработке сообщения ON_UPDATE_COMMAND_UI. При передаче функции SetRadio нулевого аргумента переключатель сбрасывается, в противном случае он устанавливается. Чтобы создать группу переключателей, необходимо создать функции обработки сообщения ON_UPDATE_COMMAND_UI для всех кнопок группы. Описание данного класса содержится в файле заголовка afxext.h.


    CreateEx

    BOOL CreateEx(CWnd* pParentWnd, DWORD dwCtrlStyle = TBSTYLE_FLAT, DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP, CRect rcBorders = CRect(0, 0, 0, 0), UINT nID = AFX_IDW_TOOLBAR);

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

    Ненулевое, в случае успешного завершения функции, и нулевое в противном случае.

    Аргументы

    • pParentWnd - указатель на родительское окно панели инструментов.
    • dwCtrlStyle - дополнительные стили для создания внедренного объекта класса CToolBarCtrl. По умолчанию этот аргумент имеет значение TBSTYLE_FLAT.
    • dwStyle - стили панели инструментов.
    • rcBorders - объект класса CRect, определяющий ширину рамки окна панели инструментов. По умолчанию этот аргумент имеет значение 0,0,0,0, поэтому окно панели инструментов не имеет рамки.
    • nID - идентификатор дочернего окна панели инструментов.

    Описание

    Данная функция создает панель инструментов Windows (дочернее окно) и связывает ее с объектом класса CToolBar. Кроме того, она устанавливает заданное по умолчанию значение высоты панели инструментов. Использование функции CreateEx вместо функции Create позволяет устанавливать стили при создании внедренного объекта класса CToolBarCtrl. Например, если аргумент dwCtrlStyle имеет значение TBSTYLE_FLAT|TBSTYLE_TRANSPARENT, то создается панель инструментов в стиле Internet Explorer 4.0.


    LoadToolBar

    BOOL LoadToolBar(LPCTSTR lpszResourceName); BOOL LoadToolBar(UINT nIDResource);

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

    Ненулевое, в случае успешного завершения функции, и нулевое в противном случае.

    Аргументы

    • lpszResourceName - указатель на имя ресурса загружаемой панели инструментов.
    • nIDResource - идентификатор ресурса загружаемой панели инструментов.

    Описание

    Данная функция загружает панель инструментов (дочернее окно Windows) определяемую аргументом lpszResourceName или аргументом nIDResource


    CView

    Класс CView обеспечивает основные функциональные возможности определяемых пользователем классов представления. Класс представления ассоциирован с классом документа и осуществляет интерфейс между документом и пользователем: класс представления реализует отображение документа на экране или принтере, а также передает информацию о реакции пользователя в документ. Класс представления является производным от класса CWnd. Одна и та же рабочая область окна может совместно использоваться несколькими классами представления. Связь между классом представления и классом окна осуществляется в шаблоне документа. Когда пользователь открывает новое окно или разбивает существующее, шаблон документа создает новый класс представления и присоединяет это к документу. Класс представления может быть присоединен только к одному документу, но к одному документу могут быть присоединены несколько классов представления. Эта ситуация может возникнуть при отображении документа в разделенном окне или в нескольких дочерних окнах в многооконного приложения (MDI). Приложение может поддерживать несколько различных классов представления, соответствующих одному и тому же классу документа. Например, программа обработки текстов могла бы обеспечивать как просмотр текста документа, так и просмотр его иерархической структуры, в котором содержатся только заголовки разделов. Эти различные классы представления могут выводить информацию в различные окна или в различные панели разделенного окна, если окно открыто в этом режиме. Класс представления может получать информацию от пользователя через различные устройства, например, с клавиатуры, через щелчки и перемещения мыши, из команд меню, инструментальных панелей или полос прокрутки. Сообщения в данный класс поступают из связанного с ним окна. Если класс представления не обрабатывает данную команду, он передает ее связанному с ним классу документа. Для сопоставления идентификатору сообщения функции его обработки класс представления использует карту сообщений. Класс представления осуществляет только отображение и изменение данных в документе, но не хранит эти изменения. Вся отображаемая на экране информация содержится в классе документа. Класс представления может непосредственно обращаться к данным, хранящимся в документе, если в последнем предусмотрены методы для доступа к этим данным. После внесения изменений в документ класс представления, производящий данную операцию, обычно вызывает функцию CDocument::UpdateAllViews, посылающую другим классам просмотра, связанным с данным документом, сообщение о том, что в документ внесены изменения и классам просмотра необходимо обновить выводимую ими информацию. Эти сообщения обрабатываются функцией OnUpdate соответствующего класса просмотра. Обычно, для вывода информации на экран используется функция CView::OnDraw. Эту функцию можно использовать, также, для осуществления предварительного просмотра печати и самой печати. Реализация цикла печати и предварительного просмотра документа возложена на приложение. Описание данного класса содержится в файле заголовка afxwin.h. Данный класс используется во многих демонстрационных приложениях, описанных в данной книге. Наиболее полное его описание приведено в главах 2 и 10.


    DoPreparePrinting

    BOOL DoPreparePrinting(CPrintInfo* pInfo);

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

    Ненулевое, если может начаться процесс печати или предварительного просмотра печати. Нулевое, если выполнение операции было прервано.

    Аргументы

    • pInfo - указатель на объект класса CPrintInfo, содержащий описание текущего задания для принтера.

    Описание

    Данная функция вызывается из перегруженной функции OnPreparePrinting для вызова диалогового окна Печать и создания контекста устройства принтера. Операции, выполняемые данной функцией зависят от того, был ли вызван режим печати или режим предварительного просмотра печати (определяется значением переменной m_bPreview, являющейся членом класса CPrintInfo, на объект которого указывает аргумент pInfo). Если производится распечатка файла, данная функция выводит диалоговое окно Печать, используя значения переменных объекта класса CPrintInfo, на который указывает аргумент pInfo. После закрытия диалогового окна функция DoPreparePrinting создает объект класса контекста устройства принтера, основываясь на значениях переменных аргумента pInfo, хранящих установки пользователя в диалоговом окне Печать. Этот контекст устройства используется для печати документа. Если функция вызывается в режиме предварительного просмотра печати, данная функция создает контекст устройства принтера, основываясь на его текущих установках. Контекст устройства используется для имитации принтера в процессе предварительного просмотра.


    GetDocument

    CDocument* GetDocument() const;

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

    Указатель на объект класса CDocument, связанный с данным классом представления или NULL, если с данным классом не связан никакой документ.

    Описание

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


    OnBeginPrinting

    virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);

    Аргументы

    • pDC - указатель на объект класса контекста устройства принтера.
    • pInfo - указатель на объект класса CPrintInfo, содержащий описание текущего задания для принтера.

    Описание

    Данная функция вызывается приложением при инициализации процесса печати или предварительного просмотра печати после вызова функции OnPreparePrinting. По умолчанию эта функция не выполняет никаких операций. Перегрузка данной функции позволяет включить в контекст устройства любые ресурсы GDI такие, как перья или шрифты, необходимые для осуществления процесса печати. Выбор объектов GDI в контекст устройства производится в функции OnPrint отдельно для каждой страницы. Если одни и те же объекты класса представления используются для вывода изображения на экран и для его печати, используйте различные идентификаторы для ресурсов GDI, используемых в каждом из этих режимов. Это позволит обновлять экран в процессе печати документа. Функция OnBeginPrinting может использоваться, также и для инициализации величин, зависящих от параметров используемого принтера. Например, количество страниц, необходимое для печати документа может зависеть от установок, которые сделал пользователь в диалоговом окне Настройка принтера (таких, как размер страницы). В этом случае размер документа не может быть определен в функции OnPreparePrinting, в которой недоступна вся необходимая для этого информация, содержащаяся в объекте класса контекста устройства принтера, создаваемого на основании информации, полученной из диалогового окна Настройка принтера. Функция OnBeginPrinting является первой перегружаемой функцией, имеющей доступ к объекту класса CDC, представляющего контекст устройства принтера. Поэтому размер документа может быть определен в этой функции. Если размер документа не будет определен в этой функции, в окне предварительного просмотра печати не появится полоса прокрутки.


    OnDraw

    virtual void OnDraw(CDC* pDC) = 0;

    Аргументы

    • pDC - указатель на объект класса контекста устройства, используемого для отображения информации, хранящейся в документе.

    Описание

    Данная функция вызывается приложением для отображения информации, хранящейся в документе. Приложение вызывает данную функцию, чтобы вывести изображение на экран, на печать или на предварительный просмотр печати. В каждом из этих случаев передаются указатель на объект класса контекста устройства, используемый в данном конкретном случае. Данная функция не имеет реализации по умолчанию. Данная функция должна перегружаться в каждом пользовательском классе представления. Передаваемый в качестве параметра функции объект класса CDC позволяет функции получить доступ к таким ресурсам GDI, как перья, шрифты и кисти. Вызов функции CDC::RectVisible позволяет сократить объем вычислений при рисовании за счет отказа от рисования невидимых участков изображения. Значение, возвращаемое функцией CDC::IsPrinting, позволяет определить, будет ли данное изображение выводиться на принтер.


    OnEndPrinting

    virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);

    Аргументы

    • pDC - указатель на контекст устройства принтера.
    • pInfo - указатель на объект класса CPrintInfo, содержащий описание данной работы.

    Описание

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


    OnPrepareDC

    virtual void OnPrepareDC(CDC* pDC, CPrintInfo* pInfo = NULL);

    Аргументы

    • pDC - указатель на объект класса контекста устройства, используемого для отображения документа.
    • pInfo - указатель на объект структуры CPrintInfo, описывающей текущее задание печати, если функция OnPrepareDC используется для печати или предварительного просмотра печати документа. Переменная m_nCurPage данной структуры содержит номер печатаемой страницы документа. Если функция OnPrepareDC вызывается для вывода на экран, данный аргумент имеет нулевое значение.

    Описание

    Вызывается приложением перед вызовом функции OnDraw при выводе на экран или перед функцией OnPrint перед печатью каждой станицы документа или ее предварительным просмотром. По умолчанию данная функция не выполняет никаких действий при выводе изображения на экран. Однако, данная функция может быть перегружена в производных классах, таких как CScrollView, для настройки атрибутов контекста устройства. Поэтому при ее перегрузке в пользовательских классах следует вызывать метод базового класса перед выполнением пользовательских операторов. Если данная функция вызывается для печати документа, то по умолчанию она проверяет содержимое объекта структуры, на который указывает аргумент pInfo. Если размер документа в данном объекте структуры не задан, функция OnPrepareDC считает, что документ содержит всего одну страницу и останавливает процесс печати после распечатки первой страницы документа. Для остановки процесса печати данная функция присваивает переменной m_bContinuePrinting, являющейся членом структуры CPrintInfo, значение FALSE. Обычно функция OnPrepareDC перегружается чтобы:
    • установить атрибуты контекста устройства для указанной страницы при ее печати. Например, в данной функции может быть установлен режим отображения;
    • осуществить разбивку документа на страницы в процессе печати. Обычно, размер документа определяется при инициализации процесса его печати в функции OnPreparePrinting. Однако, в том случае, когда размер документа не может быть определен заранее (например, при печати неизвестного заранее числа записей базы данных), перегрузка функции OnPrepareDC позволяет проверять признак конца документа в процессе его печати. При достижении последней страницы документа данная функция присваивает переменной m_bContinuePrinting, являющейся членом структуры CPrintInfo, значение FALSE;
    • посылать принтеру управляющие последовательности для его настройки на печать каждой страницы. Для посылки принтеру управляющих последовательностей вызовите функцию CDC::Escape для объект класса, на который указывает аргумент pDC.
    При перегрузке данной функции первым ее оператором должен быть вызов метода базового класса.


    OnPreparePrinting

    virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);

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

    Ненулевое для начала печати, и нулевое, если процесс печати был прерван.

    Аргументы

    • pInfo - указатель на объект класса CPrintInfo, содержащий описание текущего задания для принтера.

    Описание

    Вызывается приложением перед печатью или предварительным просмотром документа. По умолчанию не производит никаких действий. Данная функция должна быть перегружена для обеспечения возможности печати или предварительного просмотром документа. В ней необходимо вызвать функцию DoPreparePrinting и передать ей аргумент pInfo. Значение, возвращаемое функцией DoPreparePrinting, является возвращаемым значением данной функции. Функция DoPreparePrinting выводит диалоговое окно Печать и создает контекст устройства принтера. Если при инициализации диалогового окна Печать следует указать значения параметров, отличные от значений, используемых для них по умолчанию, следует присвоить эти значения соответствующим переменным аргумента pInfo. Например, при известном числе страниц в документе следует вызвать функцию SetMaxPage, являющуюся членом класса CPrintInfo, на объект которого указывает аргумент pInfo, перед вызовом функции DoPreparePrinting. Эта величина определит значения, выводимые в текстовых полях Страницы с: и по: диалогового окна Печать. Функция DoPreparePrinting не выводит диалоговое окно Печать в режиме предварительного просмотра печати. Чтобы не выводить диалоговое окно Печать при печати документа, проверьте, что переменная m_bPreview, являющаяся членом класса CPrintInfo, на объект которого указывает аргумент pInfo, имеет значение FALSE, присвойте ей значение TRUE перед вызовом функции DoPreparePrinting и восстановите значение FALSE после выхода из этой функции. Если необходимо произвести инициализацию, использующую объект класса CDC, представляющий контекст устройства принтера (например, для определения размера печатаемой страницы для определения количества страниц в документе), перегрузите функцию OnBeginPrinting. Если необходимо установить значение переменных m_nNumPreviewPages или m_strPageDesc, являющихся членами класса CPrintInfo, на объект которого указывает аргумент pInfo, сделайте это после вызова функции DoPreparePrinting. Функция DoPreparePrinting присваивает переменной m_nNumPreviewPages значение из файла инициализации и присваивает переменной m_strPageDesc ее значение по умолчанию.


    OnPrint

    virtual void OnPrint(CDC* pDC, CPrintInfo* pInfo);

    Аргументы

    • pDC - указатель на объект класса контекста устройства принтера.
    • pInfo - указатель на объект класса CPrintInfo, содержащий описание текущего задания для принтера.

    Описание

    Вызывается приложением для печати или предварительного просмотра страницы документа. Для каждой печатаемой страницы приложение вызывает данную функцию сразу же после вызова функции OnPrepareDC. Номер печатаемой страницы определяется значением переменной m_nCurPage, являющейся членом класса CPrintInfo, на объект которого указывает аргумент pInfo. По умолчанию данная функция вызывает функцию OnDraw и передает ей контекст устройства принтера. Данная функция перегружается для решения следующих задач:
    • для печати многостраничных документов. При печати документа с использованием функции OnDraw для определения фрагмент документа, который будет распечатываться на данной странице, необходимо установить начало отсчета рабочей области (однако данная операция обычно производится в функции OnPrepareDC);
    • для изменения формы отображения документа при печати (в том случае, если приложение не соответствует принципу "Что вы видите, то вы и имеете"). В данном случае вместо того, чтобы передавать контекст устройства функции OnDraw, пользователь может вызвать собственную функцию, выводящую документ на печать и использующую для обработки изображения параметры, отличные от тех, которые используются при выводе его на экран;
    • для использования при печати документа дополнительных ресурсов GDI, не используемых при выводе его на экран. Ресурсы GDI должны выбираться в контекст устройства перед началом процесса печати и освобождаться после его завершения. Эти ресурсы создаются в функции OnBeginPrinting и уничтожаться в функции OnEndPrinting;
    • для вывода колонтитулов. При этом можно использовать функцию OnDraw, ограничив ей область печати.
    Переменная m_rectDraw, являющаяся членом класса CPrintInfo, на объект которого указывает аргумент pInfo, содержит размеры области печати страницы, выраженные в логических единицах. Не следует вызывать функцию OnPrepareDC при перегрузке функции OnPrint, поскольку приложение автоматически вызывает функцию OnPrepareDC перед вызовом функции OnPrint.


    OnUpdate

    virtual void OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint);

    Аргументы

    • pSender - указатель на объект класса представления или NULL, если необходимо модифицировать все классы представления.
    • lHint - содержит информацию об изменениях.
    • pHint - указатель на объект, хранящий информацию об изменениях.

    Описание

    Данная функция является функцией обработки сообщения, посылаемого функцией CDocument::UpdateAllViews. Функция UpdateAllViews вызывается классом представления после внесения изменений в связанный с ним документ. Функция OnUpdate вызывается, также, функцией CView::OnInitialUpdate. По умолчанию функция OnUpdate посылает сообщение о необходимости перерисовки всей рабочей области окна, которая будет произведена после получения очередного сообщения WM_PAINT. Для того чтобы перерисовывалась не вся рабочая область окна, а только ее часть, необходимо перегрузить данную функцию в пользовательском классе представления. Информация об области перерисовки должна передаваться во втором или третьем параметре данной функции. Параметр lHint данной функции обычно используется для передачи битовой маски или переменной перечислимого типа. Параметр pHint является указателем на объект класса CObject, который может содержать достаточно сложные структуры данных. Для определения типа передаваемого объекта в перегруженной функции OnUpdate, обычно, используется функция CObject::IsKindOf. Как правило, функция OnUpdate не содержит вызовов функций отображения графической информации. Вместо этого она определяет прямоугольник, заданный в экранной системе координат, определяющий область экрана, нуждающуюся в обновлении, и передает указатель на него в качестве первого аргумента функции CWnd::InvalidateRec. Содержимое указанной области будет обновлено после получения очередного сообщения WM_PAINT. Если аргумент lHint имеет значение 0, а аргумент pHint - NULL, то документ посылает стандартное сообщение о необходимости перерисовки рабочей области данного класса представления. После получения стандартного сообщения о необходимости перерисовки рабочей области или в том случае, когда класс представления не смог определить, какую информацию ему передали в параметрах сообщения, он производит обновление всей своей рабочей области. 


    CWinApp

    Класс CWinApp является базовым классом для создания объектов классов приложений Windows. Объект класса представления содержит функции, позволяющие инициализировать приложение пользователя (и каждый его экземпляр), а также запускать приложение на исполнение. Каждое приложение, использующее библиотеку MFC, может содержать только один объект класса CWinApp. Этот объект создается на этапе создания глобальных объектов и уже существует к моменту вызова функции WinMain, содержащейся в библиотеке MFC. Объявление объектов классов, производных от класса CWinApp, также должно быть глобальным. Функция InitInstance, принадлежащая данному классу, служит для создания объекта класса главного окна приложения. Кроме функций класса CWinApp библиотека MFC содержит следующие функции, позволяющие получить доступ к объектам класса CWinApp и к содержащейся в них информации.
    • AfxGetApp - позволяет получить указатель на объект класса CWinApp.
    • AfxGetInstanceHandle - позволяет получить указатель на текущую копию объекта класса приложения.
    • AfxGetResourceHandle - позволяет получить дескриптор ресурсов приложения. AfxGetAppName - позволяет получить указатель на строку, содержащую имя приложения. Другим способом получить эту информацию является использование указателя на объект класса CWinApp для доступа к переменной-члену данного класса m_pszExeName, содержащей указатель на ту же самую строку.
    Описание данного класса содержится в файле заголовка afxwin.h. Данный класс используется во многих демонстрационных приложениях, описанных в данной книге.


    AddDocTemplate

    void AddDocTemplate(CDocTemplate* pTemplate);

    Аргументы

    • pTemplate - указатель на объект класса CDocTemplate, который необходимо добавить в данное приложение.

    Описание

    Данная функция добавляет объект класса шаблона документа в список доступных шаблонов документов данного приложения. Список доступных шаблонов документов должен быть заполнен до вызова функции RegisterShellFileTypes.


    EnableHtmlHelp

    void EnableHtmlHelp();

    Описание

    Данная функция вызывается в конструкторе класса, производного от класса CWinApp, для обеспечения возможности использования в приложении справочной системы HTML. Эта функция присваивает переменной m_bUseHtmlHelp значение TRUE.


    GetProfileString

    CString GetProfileString(LPCTSTR lpszSection, LPCTSTR lpszEntry, LPCTSTR lpszDefault = NULL);

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

    Строка, хранящаяся в файле приложения с расширением .ini, или строка, передаваемая в аргументе lpszDefault, если указанная строка не содержится в файле с расширением .ini. Максимальная длина строки, которая может быть получена подобным образом, равна величине _MAX_PATH. Если величина lpszDefault равна нулю, то возвращается пустая строка.

    Аргументы

    • lpszSection - указатель на символьную строку, заканчивающуюся нулем, определяющую секцию, содержащую данную строку.
    • lpszEntry - указатель на символьную строку, заканчивающуюся нулем, определяющую идентификатор строки в записи. Этот аргумент не может принимать нулевое значение.
    • lpszDefault - указатель на символьную строку, заканчивающуюся нулем, содержащую строку, которая будет возвращаться функцией, если в соответствующем файле не будет найдена указанная строка.

    Описание

    Данная функция возвращает строку, связанную с идентификатором, содержащимся в указанной секции раздела системного реестра, отведенного данному приложению, или в файле с расширением .ini.


    InitInstance

    virtual BOOL InitInstance();

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

    Ненулевое, если инициализация прошла успешно, в противном случае - ноль.

    Описание

    Операционная система Windows допускает одновременную работу нескольких копий одного приложения. Процесс создания приложения концептуально подразделяется на два этапа: предварительное создание приложения, которое осуществляется при первом запуске программы на исполнение, и инициализация экземпляра приложения, которая происходит при запуске на исполнение любой копии программы, включая и первую. Данная функция вызывается функцией WinMain, принадлежащей классу главного окна. Обычно, в процессе выполнения перегруженной пользователем функции InitInstance производится создание объекта главного окна программы и устанавливается значение члена класса CWinThread::m_pMainWnd, содержащего указатель на это окно.


    LoadStdProfileSettings

    void LoadStdProfileSettings(UINT nMaxMRU = _AFX_MRU_COUNT);

    Аргументы

    • nMaxMRU - текущее число элементов в списке недавно использованных файлов.

    Описание

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


    OnContextHelp

    afx_msg void OnContextHelp();

    Описание

    Как правило, данная функция вызывается в том случае, когда пользователь нажимает комбинацию клавиш +.При перегрузке данной функции в карту сообщений класса, производного от класса CWinApp, включается строка ON_COMMAND(ID_CONTEXT_HELP, OnContextHelp) а в таблицу акселераторов приложения включается соответствующая запись. Функция OnContextHelp переводит приложение в режим вывода контекстной справки. Указатель мыши в этом режиме представляет собой комбинацию наклонной стрелки и знака вопроса. При помещении данного указателя на элемент управления диалогового окна, элемент окна или команду меню и нажатии левой кнопки мыши на экран выводится окно контекстной справки по данному элементу.


    OnHelp

    afx_msg void OnHelp();

    Описание

    Для вызова данной функции необходимо добавить в карту сообщений пользовательского класса, производного от класса CWinApp следующий макрос ON_COMMAND(ID_HELP, OnHelp) Обычно для вызова данной команды используется клавиша , однако, использование данной клавиши представляет собой общепринятую практику и нигде не регламентировано. По умолчанию данная функция обработки сообщения определяет контекст справки, соответствующий активному окну, диалоговому окну или команде меню, а затем вызывает на исполнение файл WinHelp.exe. Если для данного объекта не определен контекст, то используется контекст, определенный по умолчанию. Перегрузка данной функции позволяет задать контекст для объекта, отличного от объектов окна, диалогового окна, команды меню или кнопки панели инструментов, которым в данный момент принадлежит фокус ввода. В данной функции вызывается функция WinHelp, которой передается контекстный идентификатор справки.


    OnHelpIndex

    afx_msg void OnHelpIndex();

    Описание

    Если это разрешено, приложение вызывает эту функцию обработки сообщения при выборе пользователем команды меню Help|Index (Справка|Предметный указатель). В этой функции вызывается функция WinHelp с аргументом HELP_INDEX. Чтобы воспользоваться данной функцией, необходимо поместить в карту сообщений класса CWinApp макрос ON_COMMAND(ID_HELP_INDEX, OnHelpIndex).


    ParseCommandLine

    void ParseCommandLine(CCommandLineInfo& rCmdInfo);

    Аргументы

    • rCmdInfo - ссылка на объект класса CCommandLineInfo.

    Описание

    Данная функция вызывается для преобразования параметров командной строки в значения, присваиваемые элементам объекта класса CCommandLineInfo. Для заполнения каждого элемента данного объекта вызывается своя функция CCommandLineInfo::ParseParam.
     
    При создании с использованием мастера AppWizard нового приложения, использующего библиотеку MFC, мастер AppWizard создает в функции InitInstance локальный объект класса CCommandLineInfo, а затем вызывает функции ProcessShellCommand и ParseCommandLine. Обработка параметров командной строки производится следующим образом: 1. После своего создания в функции InitInstance объект класса CCommandLineInfo передается в качестве параметра функции ParseCommandLine. 2. Функция ParseCommandLine последовательно вызывает функцию CCommandLineInfo::ParseParam для каждого параметра командной строки. 3. Функция ParseParam присваивает значения переменным в объекте класса CCommandLineInfo, который затем передается в качестве аргумента функции ProcessShellCommand. 4. Функция ProcessShellCommand производит действия, указанные в параметрах командной строки.


    PreTranslateMessage

    virtual BOOL PreTranslateMessage(MSG* pMsg);

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

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

    Аргументы

    • pMsg - указатель на объект структуры MSG, содержащий обрабатываемое сообщение.

    Описание

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


    ProcessShellCommand

    BOOL ProcessShellCommand(CCommandLineInfo& rCmdInfo);

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

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

    Аргументы

    • rCmdInfo - ссылка на объект класса CCommandLineInfo.

    Описание

    Данная функция вызывается в функции InitInstance для обработки параметров командной строки, передаваемых ей в объекте структуры CCommandLineInfo. При создании с использованием мастера AppWizard нового приложения, использующего библиотеку MFC, мастер AppWizard создает в функции InitInstance локальный объект класса CCommandLineInfo, а затем вызывает функции ProcessShellCommand и ParseCommandLine. Обработка параметров командной строки производится следующим образом:
    1. После своего создания в функции InitInstance объект класса CCommandLineInfo передается в качестве параметра функции ParseCommandLine.
    2. Функция ParseCommandLine последовательно вызывает функцию CCommandLineInfo::ParseParam для каждого параметра командной строки.
    3. Функция ParseParam присваивает значения переменным в объекте класса CCommandLineInfo, который затем передается в качестве аргумента функции ProcessShellCommand.
    4. Функция ProcessShellCommand производит действия, указанные в параметрах командной строки.
    Переменная CCommandLineInfo::m_nShellCommand представляет собой переменную перечислимого типа, определенную в классе CCommandLineInfo следующим образом:
    enum{
      FileNew,
      FileOpen,
      FilePrint,
      FilePrintTo,
      FileDDE,
    };


    SetRegistryKey

    void SetRegistryKey(LPCTSTR lpszRegistryKey);
    void SetRegistryKey(UINT nIDRegistryKey);

    Аргументы

    • lpszRegistryKey - указатель на строку, содержащую имя ключа.
    • nIDRegistryKey - идентификатор или индекс ключа в реестре.

    Описание

    Вызов данной функции позволяет сохранять параметры начальной установки вашего приложения в системном реестре, а не в файлах с расширением ini, как это имело место в старых версиях Windows. В ней устанавливается ключ m_pszRegistryKey, который может затем использоваться в функциях, членах класса CWinApp, таких, как GetProfileInt, GetProfileString, WriteProfileInt и WriteProfileString. Вызов данной функции приводит к сохранению в системном регистре списка недавно использованных файлов. В качестве ключа регистрации обычно выбирается название компании. В этом случае адрес конкретной переменной в системном реестре выглядит следующим образом HKEY_CURRENT_USER\Software\<название компании>\<имя приложения>\<имя секции>\<идентификатор переменной>.


    WinHelp

    virtual void WinHelp(DWORD dwData, UINT nCmd = HELP_CONTEXT);

    Аргументы

    • dwData - определяет дополнительную информацию. Трактовка данного аргумента зависит от значения аргумента nCmd.
    • nCmd - определяет тип запрашиваемой справочной информации. Список возможных значений данного аргумента совпадает со списком возможных значений аргумента dwData глобальной функции WinHelp.

    Описание

    Данная функция вызывается для запуска приложения WinHelp. Приложение WinHelp автоматически закрывается при закрытии вызвавшего его приложения.


    WriteProfileString

    BOOL WriteProfileString(LPCTSTR lpszSection, LPCTSTR lpszEntry, LPCTSTR lpszValue);

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

    Ненулевое, если операция прошла успешно, и ноль в противном случае.

    Аргументы

    • lpszSection - указатель на символьную строку, заканчивающуюся нулем, определяющее секцию, содержащую данную строку. Если данная секция не существует, то она создается. Имя секции не зависит от регистра используемых в ней символов, и она может представлять собой любую комбинацию заглавных и прописных букв.
    • lpszEntry - указатель на символьную строку, заканчивающуюся нулем, определяющую идентификатор строки в записи. Если данный идентификатор в секции не существует, то он создается.
    • lpszValue - указатель на строку, которую необходимо сохранить. Если этот параметр имеет значение NULL, то идентификатор, указанный в аргументе lpszEntry, удаляется из записи.

    Описание

    Данная функция вызывается для сохранения указанной строки в указанной секции реестра приложения или в файле с расширением .ini.


    CWinThread

    Объекты класса CWinThread представляют собой потоки, исполняющиеся в приложении. Основной поток приложения обычно представлен объектом класса, производного от класса CWinApp, который, в свою очередь, является производным от класса CWinThread. Дополнительные объекты класса CWinThread позволяют создавать несколько потоков в одном приложении. Существуют две основные разновидности потоков: рабочие потоки и интерфейсные потоки. Рабочие потоки не содержат цикла обработки сообщений. Примером такого потока может служить выполнение фоновых вычислений в приложении, использующем рабочие листы. Интерфейсные потоки содержат цикл обработки сообщений и могут обрабатывать сообщения, поступающие от системы. Класс CWinApp и производные от него классы являются примером интерфейсных потоков. Другие классы интерфейсных потоков могут производиться непосредственно от класса CWinThread. Объекты класса CWinThread обычно уничтожаются при завершении потоком своей работы. Для того чтобы эти объекты сохранялись после завершения потоком своей работы необходимо присвоить переменной m_bAutoDelete значения FALSE. Вся информация, необходимая для взаимодействия потока с приложением содержится в соответствующем объекте класса CWinThread. Поэтому любой поток, использующий библиотеку MFC должен быть производным от данного класса. Например, поток, созданный функцией _beginthreadex, не может использоваться в приложениях, использующих библиотеку MFC. Поток создается функцией AfxBeginThread. Эта функция имеет две версии, первая из которых создает рабочий поток, а вторая - интерфейсный поток. При создании рабочего потока первым аргументом функции AfxBeginThread является указатель на исполняющую функцию данного потока. При создании интерфейсного потока первым аргументом функции AfxBeginThread является указатель на объект структуры CRuntimeClass пользовательского класса, производного от класса CWinThread. В обеих версиях функций могут быть указаны дополнительные аргументы, определяющие приоритет потока, размер его стека и атрибуты безопасности. Функция AfxBeginThread возвращает указатель на созданный ею объект класса, производного от класса CWinThread. Вместо вызова функции AfxBeginThread объект класса, производного от класса CWinThread, может быть создан своим конструктором, после чего для него должна быть вызвана функция CreateThread. Этот двухэтапный метод может использоваться для последовательного создания нескольких потоков с использованием одного объекта класса CWinThread. Описание данного класса содержится в файле заголовка afxwin.h.


    CreateThread

    BOOL CreateThread(DWORD dwCreateFlags = 0, UINT nStackSize = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL);

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

    Ненулевое, если создание потока завершилось успешно, и нулевое в противном случае.

    Аргументы

    • dwCreateFlags - определяет дополнительный флаг, устанавливающий режим создания потока. Этот флаг может иметь два значения:
      CREATE_SUSPENDED - при создании потока его счетчик остановки устанавливается в единицу. Чтобы запустить поток, необходимо вызвать функцию ResumeThread;
      0 - поток запускается на исполнение немедленно после своего создания.
    • nStackSize - определяет размер стека нового потока в байтах. Если эта величина равно нулю, то у создаваемого потока создается стек того же размера, что и у вызывающего потока.
    • lpSecurityAttrs - указатель на объект структуры SECURITY_ATTRIBUTES, определяющий атрибуты безопасности данного потока. Если эта величина равна нулю, то создаваемый поток имеет те же атрибуты безопасности, что и вызывающий поток.

    Описание

    Создает поток в адресном пространстве вызывающего процесса. Чтобы создать объект класса потока и одновременно запустить его, используйте функцию AfxBeginThread. Функция CreateThread обычно применяется в том случае, когда один и тот же объект класса потока используется для последовательного создания нескольких потоков. 


    Run

    virtual int Run();

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

    Целочисленное значение, возвращаемое потоком. Это значение может быть получено с использованием функции ::GetExitCodeThread.

    Описание

    Содержит цикл обработки сообщений интерфейсного потока, используемый по умолчанию. Функция Run получает и распределяет сообщения Windows до тех пор, пока приложение не получит сообщение WM_QUIT. Если в настоящее время очередь сообщений потока пуста, то функция Run вызывает функцию OnIdle, осуществляющую фоновую обработку. Поступающие сообщения сначала обрабатываются функцией PreTranslateMessage, производящей их специальную обработку, а затем - функцией Windows ::TranslateMessage, обрабатывающей сообщения от клавиатуры. После этого вызывается функция Windows ::DispatchMessage. Функция Run очень редко перегружается для обеспечения нестандартного пользовательского интерфейса. Эта функция используется только в интерфейсных потоках.


    SetThreadPriority

    BOOL SetThreadPriority(int nPriority);

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

    Ненулевое, если создание потока завершилось успешно, и нулевое в противном случае.

    Аргументы

    • nPriority - определяет новое значение уровня приоритета в своем классе приоритета. Этот аргумент может принимать следующие значения, перечисленные в порядке убывания приоритета. THREAD_PRIORITY_TIME_CRITICAL
      THREAD_PRIORITY_HIGHEST
      THREAD_PRIORITY_ABOVE_NORMAL
      THREAD_PRIORITY_NORMAL
      THREAD_PRIORITY_BELOW_NORMAL
      THREAD_PRIORITY_LOWEST
      THREAD_PRIORITY_IDLE
      Дополнительная информация об уровнях приоритета потока содержится в описании функции ::SetThreadPriority.

    Описание

    Данная функция устанавливает уровень приоритета текущего потока в своем классе приоритета. Функция SetThreadPriority может вызываться только после успешного завершения работы функции CreateThread.


    CWnd

    Класс CWnd обеспечивает основные функциональные возможности всех классов окон в библиотеке MFC. Объект класса CWnd не является окном Windows, но тесно с ним связан. Если объект класса CWnd является полноценным объектом класса, создается своим конструктором и уничтожается своим деструктором, то окно Windows является внутренней структурой данных Windows, создаваемой функцией CWnd::Create и уничтожаемой виртуальным деструктором класса CWnd. Функция CWnd::DestroyWindow уничтожает окно Windows, не уничтожая объект класса CWnd. Класс CWnd и механизм карты сообщения скрывают от пользователя функцию WndProc. Поступающие в объект данного класса сообщения Windows автоматически направлены через карту сообщения к соответствующим функциям обработки сообщений класса CWnd. Чтобы обработать в пользовательском классе сообщение, поступающее от некоторого элемента управления, пользователю необходимо включить в свой класс функцию обработки данного сообщения. Класс CWnd позволяет пользователю создать дочернее окно Windows для своего приложения. Для этого достаточно создать пользовательский класс, производный от класса CWnd, а затем добавить в него переменные для хранения данных, характерных для данного окна приложения. После этого необходимо включить в карту сообщений макросы для обработки приходящих в класс сообщений и написать тела функций обработки сообщений, объявленных в карте сообщений. Дочернее окно создается в два этапа. Сначала вызывается конструктор класса CWnd, создающий объект данного класса, а затем вызывается функция Create, создающая дочернее окно и присоединяющая его к объекту класса CWnd. Когда пользователь закрывает дочернее окно, происходит уничтожение объекта класса CWnd или вызывается функция DestroyWindow, уничтожающая окно и связанные с ним структуры данных. В библиотеке MFC собрано множество классов, производных от CWnd. Многие из этих классов, включая CFrameWnd, CMDIFrameWnd, CMDIChildWnd, CView и CDialog, сами используются в качестве базовых классов для различных пользовательских классов. Классы элементов управления, являющиеся производными от класса CWnd, такие, как класс CButton, могут использоваться непосредственно или могут использоваться в качестве базовых для пользовательских классов. Описание данного класса содержится в файле заголовка afxwin.h.


    BeginPaint

    CDC* BeginPaint(LPPAINTSTRUCT lpPaint);

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

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

    Аргументы

    • lpPaint - указатель на объект структуры PAINTSTRUCT, в которую будет записана информация, необходимая для вывода на экран.

    Описание

    Данная функция подготавливает объект класса CWnd к выводу графической информации и соответствующим образом заполняет объект структуры PAINTSTRUCT. Объект структуры PAINTSTRUCT содержит объект структуры RECT, в котором содержатся координаты минимального по размерам прямоугольника, полностью включающего в себя область обновления окна, и флаг, определяющий необходимость уничтожения фона в процессе обновления окна. Область обновления окна устанавливается функциями Invalidate, InvalidateRect или InvalidateRgn или операционной системой при изменении ею размеров окна, его перемещении, осуществлении прокрутки в окне или при проведении ею других операций, приводящих к необходимости обновления рабочей области окна. Если область обновления окна имеет флаг, указывающий на необходимость стирания отображаемой в ней информации, функция BeginPaint посылает сообщение WM_ONERASEBKGND. Функция BeginPaint может вызываться только при обработке сообщения WM_PAINT. Каждому вызову функции BeginPaint должен соответствовать вызов функции EndPaint. Если в области обновления окна располагается текстовый курсор, функция BeginPaint автоматически его скрывает для того, чтобы он не был уничтожен.


    DefWindowProc

    virtual LRESULT DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam);

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

    Зависит от посланного сообщения.

    Аргументы

    • message - определяет обрабатываемое сообщение Windows.
    • wParam - содержит дополнительную информацию, определяемую сообщением.
    • lParam - содержит дополнительную информацию, определяемую сообщением.

    Описание

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


    DoDataExchange

    virtual void DoDataExchange(CDataExchange* pDX);

    Аргументы

    • pDX - указатель на объект класса CDataExchange.

    Описание

    Данная функция вызывается приложением для обмена данными и проверки корректности данных передаваемых между объектами классов диалогового окна и включенных в него объектов классов элементов управления. Эта функция не должна вызываться непосредственно. Ее вызов допустим только через вызов функции UpdateData, вызываемой для инициализации переменных в объектах классов элементов управления и для передачи значений этих переменных обратно в класс диалогового окна. При создании пользовательского класса, производного от класса CDialog, для того, чтобы иметь возможность воспользоваться методами автоматического обмена данными между объектами классов диалогового окна и элементов управления, а также автоматической проверки передаваемых при этом данных, пользователь должен перегрузить функцию DoDataExchange в своем диалоговом классе. Эту работу выполняет за него среда программирования Visual Studio.NET, включающая в эту функцию карту обмена данными данного диалогового окна и вызовы глобальных функций проверки допустимости значений передаваемых данных. Заполнение карты обмена данными происходит в процессе включения в класс диалогового окна переменных, связанных с элементами управления, с использованием соответствующих мастеров, вызываемых из окна Class View (Просмотр классов). Описание перегруженной функции DoDataExchange должно предшествовать описаниям макросов в файле реализации.


    EndPaint

    void EndPaint(LPPAINTSTRUCT lpPaint);

    Аргументы

    • lpPaint - указатель на объект структуры PAINTSTRUCT, содержащий информацию, необходимую для вывода на экран и полученную в функции BeginPaint.

    Описание

    Отмечает конец процесса рисования в текущем окне. Функция EndPaint должна вызываться для каждого вызова функции BeginPaint после того, как инициированный данной функцией процесс рисования будет завершен. Если функция BeginPaint скрыла текстовый курсор, то функция EndPaint выведет его на экран. 


    GetClientRect

    void GetClientRect(LPRECT lpRect) const;

    Аргументы

    • lpRect - указатель на объект структуры RECT или объект класса CRect в который будут записаны координаты рабочей области окна. Переменные left и top в данном объекте структуры всегда имеют нулевое значение. В переменные right и bottom записывается ширина и высота рабочей области окна.

    Описание

    Копирует пользовательские координаты рабочей области окна, связанного с объектом класса CWnd, в структуру, на которую указывает аргумент lpRect. Пользовательские координаты определяют левый верхний и правый нижний углы рабочей области окна. Поскольку пользовательские координаты отсчитываются от верхнего левого угла рабочей области окна, связанного с объектом класса CWnd, координаты левого верхнего угла всегда (0,0)


    GetDC

    CDC* GetDC();

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

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

    Описание

    Данная функция возвращает указатель на объект класса обычного, принадлежащего классу или частного контекста устройства в зависимости от стиля класса, определенного при создании объекта класса CWnd. Для обычных контекстов устройств функция GetDC использует атрибуты, установленные по умолчанию, при каждом их вызове. Для контекстов устройств, принадлежащих классу, или частных контекстов устройств функция GetDC оставляет без изменения установленные ранее атрибуты. Контекст устройства может использоваться в последовательности функций графического интерфейса пользователя (GDI), осуществляющих вывод в рабочую область окна. Если контекст устройства принадлежит классу окна, после его использования следует вызвать функцию ReleaseDC для освобождения контекста устройства. Поскольку в операционной системе одновременно может находиться не более пяти объектов класса обычного контекста устройств, отсутствие операции освобождения контекста устройства после его использования в данном приложении может привести к тому, что другие приложения не смогут получить доступ к контексту устройств. Функция GetDC возвращает контекст устройства, принадлежащий классу CWnd, в том случае, если при регистрации данного класса в структуре WNDCLASS были установлены флаги CS_CLASSDC, CS_OWNDC или CS_PARENTDC.


    GetParentOwner

    CWnd* GetParentOwner() const;

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

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

    Описание

    Данная функция позволяет получить указатель на родительское окно данного дочернего окна или на владельца окна. Функция GetParentOwner возвращает указатель на ближайшее в иерархии родительское окно или на владельца окна, который сам не является дочерним окном (не имеет стиля WS_CHILD). Текущий владелец окна может быть установлен при вызове функции SetOwner. По умолчанию родительское окно любого окна одновременно является и его владельцем. В отличие от данной функции функция GetParent возвращает указатель на непосредственного родителя независимо от того, является ли он дочерним окном или нет. В том случае, если родительским окном для данного окна является дочернее окно другого окна, то функции GetParent и GetParentOwner возвращают указатели на различные объекты класса CWnd.


    GetSafeHwnd

    HWND GetSafeHwnd() const;

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

    Возвращает дескриптор текущего окна. Если объект класса CWnd не связан с окном, или в нем использован нулевой указатель на окно, возвращает нулевое значение.

    Описание

    Позволяет получить значение переменной m_hWnd. Если указатель this имеет нулевое значение, возвращает значение NULL.


    GetStyle

    DWORD GetStyle() const;

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

    Стиль окна.

    Описание

    Возвращает текущий стиль окна.


    GetWindowContextHelpId

    DWORD GetWindowContextHelpId() const;

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

    Если с данным объектом класса CWnd связан идентификатор контекстной справки, возвращает этот идентификатор. В противном случае возвращает нулевое значение.

    Описание

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


    Invalidate

    void Invalidate(BOOL bErase = TRUE);

    Аргументы

    • bErase - определяет необходимость уничтожения фона при перерисовке.

    Описание

    Вызывает перерисовку всей рабочей области окна, связанного с объектом класса CWnd. Рабочая область отмечается как нуждающаяся в перерисовке при поступлении следующего сообщения WM_PAINT. В рабочей области окна может быть отменена перерисовка, если до прихода следующего сообщения WM_PAINT будут вызваны функции ValidateRect или ValidateRgn. Аргумент bErase определяет необходимость уничтожения фона в процессе перерисовки рабочей области окна. Если данный аргумент принимает значение TRUE, то при вызове функции BeginPaint происходит уничтожение фона, в противном случае фон остается без изменений. Если аргумент bErase принимает значение TRUE для любой части перерисовываемой области, фон уничтожается во всей этой области. Окно посылает сообщение WM_PAINT в том случае, если в окне имеются области, нуждающиеся в перерисовке, и в очереди сообщений приложения отсутствуют другие сообщения для данного окна.


    ModifyStyleEx

    BOOL ModifyStyleEx(DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0);

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

    Ненулевое, если произошло изменение стиля окна, в противном случае - ноль.

    Аргументы

    • dwRemove - определяет дополнительные стили, которые необходимо удалить в процессе изменения стиля окна.
    • dwAdd - определяет дополнительные стили, которые необходимо добавить в процессе изменения стиля окна.
    • nFlags - флаги, передаваемые функции SetWindowPos, или ноль, если нет необходимости вызывать функцию SetWindowPos. По умолчанию данный аргумент имеет нулевое значение. В данном аргументе могут быть установлены следующие флаги:
      SWP_NOSIZE - сохраняется прежний размер окна;
      SWP_NOMOVE - сохраняется прежнее положение окна;
      SWP_NOZORDER - сохраняется прежний Z порядок;
      SWP_NOACTIVATE - окно не активизируется.

    Описание

    Данная функция вызывается для внесения изменений в дополнительные стили окна. Добавляемые и удаляемые стили объединяются с использованием оператора побитового ИЛИ. Для внесения изменений в обычные стили окна используется функция ModifyStyle.


    OnContextMenu

    afx_msg void OnContextMenu(CWnd* pWnd, CPoint pos);

    Аргументы

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

    Описание

    Вызывается приложением при щелчке правой кнопки мыши в окне. Для обработки данного сообщения и вывода контекстного меню может использоваться функция TrackPopupMenu. Если пользователь не вывел контекстное меню, он должен передать это сообщение функции DefWindowProc. Если щелчок правой кнопкой мыши был произведен в дочернем окне, то функция DefWindowProc посылает сообщение родительскому окну. В противном случае, если щелчок правой кнопкой мыши был произведен в области заголовка окна, функция DefWindowProc выводит контекстное меню, определенное по умолчанию.


    OnHelpInfo

    afx_msg BOOL OnHelpInfo(HELPINFO* lpHelpInfo);

    Аргументы

    • lpHelpInfo - указатель на объект структуры HELPINFO, содержащий информацию о команде меню, элементе управления, диалоговом окне или окне по которым запрошена справочная информация.

    Описание

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


    OnHScroll

    afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);

    Аргументы

    • nSBCode - определяет код полосы прокрутки, содержащий запрос пользователя на прокрутку окна. Этот аргумент может принимать одно из следующих значений:
      SB_LEFT - перемещение в крайнюю левую позицию;
      SB_ENDSCROLL - завершение операции прокрутки;
      SB_LINELEFT - перемещение на строку позицию влево;
      SB_LINERIGHT - перемещение на строку позицию вправо;
      SB_PAGELEFT - перемещение на одну страницу влево;
      SB_PAGERIGHT - перемещение на одну страницу вправо;
      SB_RIGHT - перемещение в крайнюю правую позицию;
      SB_THUMBPOSITION - перемещение в указанную позицию. Эта позиция определяется аргументом nPos;
      SB_THUMBTRACK - перемещает бегунок в указанную позицию. Эта позиция определяется аргументом nPos.
    • nPos - определяет положение бегунка полосы прокрутки, если аргумент nSBCode принимает значение SB_THUMBPOSITION или SB_THUMBTRACK. В противном случае данный аргумент не используется. В зависимости от значения диапазона прокрутки данный аргумент, имеющий тип целого числа без знака, может принимать отрицательное значение. Это следует понимать так: в действительности этот аргумент имеет тип целого числа со знаком и только при преобразовании его в этот формат функция будет работать абсолютно надежно, но в силу патологической любви разработчиков фирмы Microsoft к целым числам без знака этот аргумент объявлен как целое число без знака. Поэтому, если вы не уверены, что данная функция будет работать только с положительными границами диапазона, то лучше во всех случаях, перед использованием данного аргумента корректно преобразуйте его к родному типу целого со знаком. Самый большой идиотизм заключается в том, что для этого достаточно присвоить величину, имеющую тип целого числа без знака, величине, имеющей тип целого со знаком, что является нарушением всех правил преобразования типов данных.
    • pScrollBar - если обрабатываемое данной функцией сообщение пришло от полосы прокрутки, данный аргумент содержит указатель на объект класса данного элемента управления. Если пользователь произвел щелчок кнопкой мыши в полосе прокрутки окна, этот параметр имеет значение NULL. Данный указатель может быть временным и не должен сохраняться для дальнейшего использования.

    Описание

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


    OnNotify

    virtual BOOL CWnd::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult);

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

    Приложение возвращает ненулевое значение, если оно обработало данное сообщение, и нулевое значение в противном случае.

    Аргументы

    • wParam - определяет элемент управления, пославший данное сообщение. Если сообщение послано не элементом управления, имеет нулевое значение.
    • lParam - указатель на объект структуры извещения (NMHDR), содержащую код извещения и дополнительную информацию. Если используется структура большего размера, ее первым элементом является объект структуры NMHDR.
    • pResult - указатель на переменную типа LRESULT, в которую будет занесен код завершения обработки сообщения.

    Описание

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


    OnPaint

    afx_msg void OnPaint();

    Описание

    Приложение вызывает данную функцию, когда Windows или функции самого приложения посылают запрос на перерисовку части окна приложения. Сообщение WM_PAINT посылается функциями UpdateWindow и RedrawWindow. Объект класса окна может получать, также, внутренние сообщения о необходимости перерисовки в результате вызова функции RedrawWindow с установленным флагом RDW_INTERNALPAINT. В этом случае окну может не передаваться обновляемый участок окна. Для его определения приложение должно вызвать функцию GetUpdateRect. Если данная функция возвращает нулевое значение, то приложение не должно вызывать функции BeginPaint и EndPaint. Приложение должно само следить за необходимостью обновления рабочей области своего окна, используя внутренние структуры данных для хранения информации, необходимой для перерисовки окна после получения сообщения WM_PAINT, поскольку данное сообщение может быть вызвано как необходимостью перерисовки области окна после того, как она стала видимой, так и вызовом функции RedrawWindow с установленным флагом RDW_INTERNALPAINT. Внутреннее сообщение WM_PAINT посылается Windows только один раз. После того, как внутреннее сообщение WM_PAINT будет послано окну функцией UpdateWindow, не могут быть посланы никакие другие сообщения WM_PAINT, пока окно не будет перерисовано или пока не будет вызвана функция RedrawWindow с установленным флагом RDW_INTERNALPAINT. Отображение документов рассмотрено при описании функции CView::OnDraw.


    PreCreateWindow

    virtual BOOL PreCreateWindow(CREATESTRUCT& cs);

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

    Ненулевое, если процесс создания окна должен быть продолжен, или ноль, если в процессе создания окна возникла ошибка.

    Аргументы

    • cs - объект структуры CREATESTRUCT.

    Описание

    Данная функция вызывается приложением перед созданием окна Windows, связанного с данным объектом класса CWnd. Эта функция никогда не должна вызываться непосредственно пользователем. По умолчанию данная функция проверяет, равняется ли нулю имя класса окна и, при положительном результате проверки, подставляет вместо него соответствующее имя по умолчанию. При перегрузке данной функции производится изменение значений, присвоенных переменным-членам структуры CREATESTRUCT для изменения режима открытия окна и его параметров. Каждый класс, производный от класса CWnd, вносит свои изменения в объект структуры CREATESTRUCT, которые нигде не документируются. Поэтому, прежде чем вносить свои изменения в элементы данной структуры в перегруженной версии функции PreCreateWindow, программисту необходимо сначала ознакомиться с исходным текстом данной функции базового класса и решить, какие изменения вам необходимо внести в установки по умолчанию и не будут ли они изменены функцией базового класса.


    ReleaseDC

    int ReleaseDC(CDC* pDC);

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

    Ненулевое, в случае успешного завершения функции, и нулевое в противном случае.

    Аргументы

    • pDC - указатель на объект класса контекста устройства, который нужно освободить.

    Описание

    Освобождает контекст устройства, делая его доступным для использования другими приложениями. Результат выполнения функции ReleaseDC зависит от типа освобождаемого контекста устройства. Приложение должно вызвать функцию ReleaseDC после каждого вызова функции GetWindowDC и после каждого вызова функции GetDC.


    ScreenToClient

    void ScreenToClient(LPPOINT lpPoint) const; void ScreenToClient(LPRECT lpRect) const;

    Аргументы

    • lpPoint - указатель на объект класса CPoint или объект структуры POINT, содержащий экранные координаты, которые требуется преобразовать.
    • lpRect - указатель на объект класса CRect или объект структуры RECT, содержащий экранные координаты, которые требуется преобразовать.

    Описание

    Преобразует экранные координаты указанной точки или прямоугольника в координаты рабочей области окна. Функция ScreenToClient замещает экранные координаты, содержащиеся в объектах lpPoint или lpRect соответствующими координатами рабочей области окна. Новые координаты отсчитываются от верхнего левого угла рабочей области окна, связанного с данным объектом класса CWnd.


    SetDlgItemText

    void SetDlgItemText(int nID, LPCTSTR lpszString);

    Аргументы

    • nID - идентификатор элемента управления, для которого необходимо задать текст.
    • lpszString - указатель на объект класса CString или заканчивающуюся нулем строку символов, которую следует скопировать в элемент управления.

    Описание

    Устанавливает заголовок или текст в элементе управления, принадлежащем окну или диалоговому окну. Функция SetDlgItemText посылает сообщение WM_SETTEXT соответствующему элементу управления. 


    SetWindowContextHelpId

    BOOL SetWindowContextHelpId(DWORD dwContextHelpId);

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

    Ненулевое, в случае успешного завершения работы, и нулевое в противном случае.

    Аргументы

    • dwContextHelpId - идентификатор контекстной справки, связываемый с данным объектом класса CWnd.

    Описание

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


    SetWindowText

    void SetWindowText(LPCTSTR lpszString);

    Аргументы

    • lpszString - указатель на объект класса CString или заканчивающуюся нулем строку, содержащую новый заголовок окна или новый текст элемента управления.

    Описание

    Устанавливает новый заголовок окна. Если окно представляет собой элемент управления, текст помещается в данный элемент управления. Данная функция посылает сообщение WM_SETTEXT данному окну.


    ShowWindow

    BOOL ShowWindow(int nCmdShow);

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

    Ненулевое, если окно до этого отображалось, и ноль, если оно было до этого скрыто.

    Аргументы

    • nCmdShow - определяет режим отображения окна, связанного с объектом класса CWnd. Он может принимать одно из следующих значений:
      SW_HIDE - скрывает окно и активизирует другое окно;
      SW_MINIMIZE - свертывает окно в пиктограмму и активизирует самое верхнее окно в иерархическом списке окон системы;
      SW_RESTORE - активизирует и отображает окно. Если окно было до этого свернуто в пиктограмму или развернуто на весь экран, Windows восстанавливает его прежние размеры и положение;
      SW_SHOW - активизирует окно и отображает его с текущими размерами и положением;
      SW_SHOWMAXIMIZED - активизирует окно и отображает его развернутым на весь экран;
      SW_SHOWMINIMIZED - активизирует окно и отображает его свернутым в пиктограмму;
      SW_SHOWMINNOACTIVE - отображает окно свернутым в пиктограмму. При этом активное окно сохраняет свою активность;
      SW_SHOWNA - отображает окно в его текущем состоянии. При этом активное окно сохраняет свою активность;
      SW_SHOWNOACTIVATE - отображает окно в его последнем зафиксированном состоянии. При этом активное окно сохраняет свою активность;
      SW_SHOWNORMAL - активизирует и отображает окно. Если окно было до этого свернуто в пиктограмму или развернуто на весь экран, Windows восстанавливает его прежние размеры и положение.

    Описание

    Устанавливает режим отображения окна. Данная функция должна вызываться один раз за все приложение с аргументом CWinApp::m_nCmdShow. При последующих вызовах данной функции в качестве ее аргумента необходимо использовать одно из перечисленных выше значений переменной.


    UpdateData

    BOOL UpdateData(BOOL bSaveAndValidate = TRUE);

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

    Ненулевое, если операция прошла успешно, и нулевое в противном случае. Если аргумент bSaveAndValidate имеет значение TRUE, то ненулевое возвращаемое значение означает успешный исход проверки передаваемых данных.

    Аргументы

    • bSaveAndValidate - определяет, используется ли данная функция для инициализации объектов классов элементов управления диалогового окна (FALSE) или для получения информации, содержащейся в данных объектах (TRUE).

    Описание

    Данная функция вызывается для инициализации объектов классов элементов управления диалогового окна или для получения информации, содержащейся в этих объектах. Приложение автоматически вызывает функцию UpdateData с параметром bSaveAndValidate имеющим значение FALSE при создании модального диалогового окна функцией CDialog::OnInitDialog. Вызов данной функции производится перед выводом диалогового окна на экран. Функция CDialog::OnOk вызывает данную функцию с параметром bSaveAndValidate имеющим значение TRUE для сохранения данных, хранящихся в объектах классов элементов управления, в переменных класса диалогового окна и, в случае успешного завершения данной операции, закрытия диалогового окна (если в диалоговом окне нажимается кнопка Cancel (Отмена), то при закрытии диалогового окна функция UpdateData не вызывается). UpdateWindow void UpdateWindow();

    Описание

    Обновляет рабочую область окна, посылая сообщение WM_PAINT, если область обновления не пуста. Функция UpdateWindow посылает данное сообщение непосредственно, миную очередь сообщений приложения.


    Структуры

    AFX_EXTENSION_MODULE

    struct AFX_EXTENSION_MODULE
    {
      BOOL bInitialized;
      HMODULE hModule;
      HMODULE hResource;
      CRuntimeClass* pFirstSharedClass;
      COleObjectFactory* pFirstSharedFactory;
    };

    Переменные

    • bInitialized - имеет значение TRUE, если модуль библиотеки динамической компоновки инициализирован функцией AfxInitExtensionModule.
    • hModule - дескриптор модуля библиотеки динамической компоновки.
    • hResource - дескриптор пользовательского модуля ресурсов библиотеки динамической компоновки.
    • pFirstSharedClass - указатель на объект структуры CRuntimeClass, содержащий информацию о первом классе данного модуля библиотеки динамической компоновки. Используется для инициализации списка классов.
    • pFirstSharedFactory - указатель на первую фабрику объектов библиотеки динамической компоновки (объект COleObjectFactory).
    Используется для инициализации списка фабрик классов.

    Описание

    Объект структуры AFX_EXTENSION_MODULE используется при инициализации библиотеки расширения MFC для хранения состояния модуля этой библиотеки. Он хранит копию состояния модуля библиотеки расширения MFC, включая копии объектов классов, инициализированных данной библиотекой в процессе вызова статических конструкторов объектов перед вызовом функции DllMain. В функции DllMain библиотеки расширения MFC необходимо произвести две операции: вызвать функцию AfxInitExtensionModule и проверить возвращаемое ею значение;
    создать объект класса CDynLinkLibrary, если библиотека динамической компоновки экспортирует объекты CRuntimeClass или имеет собственные пользовательские ресурсы. 


    BITMAPINFO

    typedef struct tagBITMAPINFO
    {
    BITMAPINFOHEADER bmiHeader;
    RGBQUAD bmiColors[1];
    } BITMAPINFO;

    Переменные

  • bmiHeader - объект структуры BITMAPINFOHEADER, содержащий информацию о размере и формате цветов аппаратно-независимого битового образа.
  • bmiColors - массив переменных типа RGBQUAD или DWORD, определяющий цвета в используемой палитре.
  • Описание

    Объект структуры BITMAPINFO используется для хранения информации о размере и палитре аппаратно-независимого битового образа (DIB). Описание аппаратно-независимого битового образа состоит из двух частей:
    • объекта структуры BITMAPINFO, описывающего размеры и палитру, используемую данным битовым образом, и массива, содержащего информацию о яркости и цвете каждого из элементов изображения данного битового образа. Информация в массиве упакована по строкам и должна быть выровнена по границе двойного слова (переменной типа LONG). Для этого в конец каждой строки добавляются нулевые значения, выравнивающие ее длину до указанной границы. При задании положительного значения высоты битового образа его нулевая позиция будет располагаться в левом нижнем углу выделенного прямоугольника. В противном случае нулевая позиция будет располагаться в левом верхнем углу этого прямоугольника. Переменная biBitCount объекта структуры BITMAPINFOHEADER определяет число бит, используемых для кодирования цвета одного элемента изображения. Эта переменная может принимать одно из следующих значений: при использовании монохромного битового образа массив bmiColors имеет два элемента. Каждому элементу изображения соответствует один бит в массиве битового образа. При нулевом значении этого бита для вывода элемента изображения используется цвет, определенный в нулевом элементе массива bmiColors. В противном случае для задания цвета используется первый элемент данного массива;
    • если битовый образ использует не более 16 цветов, то массив bmiColors может содержать до 16 элементов. Каждому элементу изображения в этом случае соответствует 4-битовый индекс в таблице цветов. Например, если первый байт массива битового образа содержит значение 0x1F, то в нем содержится информация о цвете двух элементов изображения. Цвет первого из них определяется первым элементом массива цветов, а цвет второго - пятнадцатым;
    • если битовый образ использует не более 256 цветов, то массив bmiColors может содержать до 256 элементов. В этом случае каждому из элементов изображения будет соответствовать свой байт в массиве битового образа;
    • если битовый образ использует не более 216 цветов, то переменная biCompression объекта структуры BITMAPINFOHEADER может иметь значение BI_BITFIELDS. В этом случае элемент массива bmiColors содержит три маски для красного, зеленого и синего цветов соответственно, каждая из которых имеет формат двойного слова (DWORD). Биты в масках должны располагаться смежно и не перекрываться с битами других масок. При этом некоторые биты могут быть не использованы ни в одной из масок. Каждому из элементов изображения соответствует отдельное слово в массиве битового образа;
    • если битовый образ использует не более 224 цветов и переменная bmiColors имеет нулевое значение, то каждые 3 байта в массиве битового образа представляют собой относительную интенсивность синего, зеленого и красного цветов изображения;
    • если битовый образ использует не более 232 цветов, то переменная biCompression объекта структуры BITMAPINFOHEADER может иметь значение BI_BITFIELDS. В этом случае элемент массива bmiColors содержит три маски для красного, зеленого и синего цветов соответственно, каждая из которых имеет формат двойного слова (DWORD). Биты в масках должны располагаться смежно и не перекрываться с битами других масок. При этом некоторые биты могут быть не использованы ни в одной из масок. Каждому из элементов изображения соответствует двойное слово (DWORD) в массиве битового образа.
    • Переменная biClrUsed объекта структуры BITMAPINFOHEADER определяет число используемых индексов в таблице цветов битового образа. Если переменная biClrUsed имеет нулевое значение, то битовый образ использует максимальное количество цветов, определяемое значением переменной biBitCount. Цвета в массиве bmiColors должны располагаться в порядке их важности. Вместо цветов формата RGB в массиве bmiColors могут быть указаны 16-разрядные индексы цветов в текущей реализованной логической палитре. В этом случае при вызове функций, работающих с аппаратно-независимыми битовыми образами, в аргументе iUsage следует передавать значение DIB_PAL_COLORS. Если битовый образ упакован (то есть, если массив битового образа следует за объектом структуры BITMAPINFO и для обращения к нему используется один указатель), переменная biClrUsed при установке флага DIB_PAL_COLORS должна иметь четное значение, чтобы массив аппаратно-независимого битового образа был бы выровнен по границе двойного слова. Переменная bmiColors не должна содержать индексы палитры, если данный битовый образ предполагается сохранить в файле или передать другому приложению. Если приложение не может обеспечить полный контроль за используемой палитрой, таблица цветов битового образа должна содержать только значения цветов в формате RGB. Для доступа к переменной bmiColorsBITMAPINFO может быть использована следующая конструкция:
      pColor = ((LPSTR)pBitmapInfo + (WORD)(pBitmapInfo->bmiHeader.biSize)); Описание данной структуры содержится в файле заголовка wingdi.h объекта структуры


    BITMAPINFOHEADER

    typedef struct tagBITMAPINFOHEADER { // bmih
       DWORD  biSize;
       LONG  biWidth;
       LONG  biHeight;
       WORD  biPlanes;
       WORD  biBitCount;
       DWORD  biCompression;
       DWORD  biSizeImage;
       LONG  biXPelsPerMeter;
       LONG  biYPelsPerMeter;
       DWORD  biClrUsed;
       DWORD  biClrImportant;
     } BITMAPINFOHEADER; 

    Переменные

    • biSize - содержит размер структуры в байтах.
    • biWidth - содержит ширину битового образа в элементах изображения. В Windows 98, Windows NT 5.0 и более поздних версиях: если переменная biCompression имеет значение BI_JPEG, то переменная biWidth содержит ширину декомпрессированного файла формата JPEG.
    • biHeight - содержит высоту битового образа в элементах изображения. Если переменная biHeight содержит положительное значение, то битовый образ строится снизу вверх и его нулевая точка расположена в левом нижнем углу. Если переменная biHeight содержит отрицательное значение, то битовый образ строится сверху вниз и его нулевая точка расположена в левом верхнем углу. Если переменная biHeight содержит отрицательное значение, то переменная biCompression может принимать значения или BI_RGB или BI_BITFIELDS, поскольку данный битовый образ не сжимается.
      В Windows 98, Windows NT 5.0 и более поздних версиях: Если переменная biCompression имеет значение BI_JPEG, то переменная biWidth содержит высоту декомпрессированного файла формата JPEG.
    • biPlanes - содержит число битовых плоскостей в используемом устройстве. Данная переменная всегда должна содержать значение 1.
    • biBitCount - содержит число бит, используемых для кодирования одного элемента изображения. Эта величина определяет максимальное число цветов в палитре битового образа. Может принимать следующие значения.
      0 - может быть установлено только в Windows 98, Windows NT 5.0 и более поздних версиях. Число бит на элемент изображения определяется форматом JPEG.
      1 - выводится монохромный битовый образ. Массив образа bmiColors имеет два элемента. Каждому элементу изображения соответствует один бит в массиве битового образа. При нулевом значении этого бита для вывода элемента изображения используется цвет, определенный в нулевом элементе массива bmiColors. В противном случае для задания цвета используется первый элемент данного массива.
      4 - битовый образ использует не более 16 цветов. Массив bmiColors может содержать до 16 элементов. Каждому элементу изображения в этом случае соответствует 4-битовый индекс в таблице цветов. Например, если первый байт массива битового образа содержит значение 0x1F, то в нем содержится информация о цвете двух элементов изображения. Цвет первого из них определяется первым элементом массива цветов, а цвет второго - пятнадцатым.
      8 - битовый образ использует не более 256 цветов. Массив bmiColors может содержать до 256 элементов. В этом случае каждому из элементов изображения будет соответствовать свой байт в массиве битового образа.
      16 - битовый образ использует не более 216 цветов. Если переменная biCompression данного объекта структуры имеет значение BI_RGB, то переменная bmiColors имеет нулевое значение. В данном случае каждому элементу изображения битового образа соответствует одно слово (WORD) его массива. Для представления относительной интенсивности красного, зеленого и синего цветов используется по 5 бит на каждый из цветов. Значение интенсивности синего цвета помещается в младшие 5 бит. Затем следуют значения интенсивности зеленого и красного цветов. Старший бит слова не используется. Массив bmiColors используется для оптимизации цветов на устройствах, использующих палитры и должен иметь размерность, равную значению переменной biClrUsed данного объекта структуры.
      Если переменная biCompression имеет значение BI_BITFIELDS, то массив bmiColors объекта структуры BITMAPINFODWORD). Каждому из элементов изображения соответствует отдельное слово в массиве битового образа. В Windows NT добавляется требование того, чтобы биты в масках располагались смежно и не перекрывались бы с битами других масок. При этом некоторые биты могут быть не использованы ни в одной из масок. В Windows 95 и Windows 98 в том случае, если переменная biCompression имеет значение BI_BITFIELDS, могут использоваться только перечисленные ниже 16-разрядные битовые маски: маска 5-5-5, в которой синий цвет имеет маску 0x001F, зеленый - 0x03E0 и красный - 0x7C00; и маска 5-6-5, , в которой синий цвет имеет маску 0x001F, зеленый - 0x07E0 и красный - 0xF80. 24 - битовый образ использует не более 224 цветов и переменная bmiColors имеет нулевое значение. Каждые 3 байта в массиве битового образа представляют собой относительную интенсивность синего, зеленого и красного цветов изображения. Массив bmiColorsbiClrUsed данного объекта структуры.
      32 - битовый образ использует не более 232 цветов. Если переменная biCompression данного объекта структуры имеет значение BI_RGB, то переменная bmiColors имеет нулевое значение. В данном случае каждому элементу изображения битового образа соответствует одно двойное слово (DWORD) его массива, содержащее информацию об интенсивности красного, зеленого и синего цветов. Старший байт двойного слова не используется. Массив bmiColors используется для оптимизации цветов на устройствах, использующих палитры и должен иметь размерность, равную значению переменной biClrUsed данного объекта структуры.
      Переменная biCompression объекта структуры BITMAPINFOHEADER может иметь значение BI_BITFIELDS. В этом случае элемент массива bmiColors содержит три маски для красного, зеленого и синего цветов соответственно, каждая из которых имеет формат двойного слова (DWORD). Каждому из элементов изображения соответствует двойное слово (DWORD) в массиве битового образа.
      В Windows NT добавляется требование того, чтобы биты в масках располагались смежно и не перекрывались бы с битами других масок. При этом некоторые биты могут быть не использованы ни в одной из масок.
      В Windows 95 и Windows 98 в том случае, если переменная biCompression имеет значение BI_BITFIELDS, может использоваться только приведенная ниже 32-разрядная битовая маска: синий цвет имеет маску 0x000000FF, зеленый - 0x0000FF00 и красный - 0x00FF0000.
    • biCompression - определяет тип сжатия информации в битовом образе, строящемся снизу вверх (битовый образ, строящийся сверху вниз, не может сжиматься). Определены следующие значения:
      BI_RGB - сжатие отсутствует;
      BI_RLE8 - кодирование потоковым кодом (RLE) для битовых образов, использующих 8-битовое кодирование элемента изображения. Код состоит из двух байт, первый из которых содержит счетчик повторов, а второй - повторяемый индекс цвета;
      BI_RLE4 - кодирование потоковым кодом (RLE) для битовых образов, использующих 4-битовое кодирование элемента изображения. Код состоит из двух байт, первый из которых содержит счетчик повторов, а второй - два повторяемых индекса цвета;
      BI_BITFIELDS
      - указывает на то, что битовый образ не сжимался, а таблица цветов содержит три маски формата DWORD, определяющие интенсивность красного, зеленого и синего цветов для каждого элемента изображения;
      BI_JPEG - может устанавливаться в Windows 98, Windows NT 5.0 и более поздних версиях. Указывает на то, что битовый образ имеет формат JPEG.
    • biSizeImage - содержит размер изображения в байтах. При работе с битовыми образами формата BI_RGB может принимать нулевое значение. В Windows 98, Windows NT 5.0 и более поздних версиях: если переменная biCompressionBI_JPEG, то переменная biSizeImage содержит размер буфера изображения JPEG.
    • biXPelsPerMeter - содержит горизонтальное разрешение используемого устройства отображения, измеряемое в элементах изображения на метр. Приложение может использовать эту величину для выбора из группы ресурсов битового образа, наиболее соответствующего характеристикам используемого устройства.
    • biYPelsPerMeter - содержит вертикальное разрешение используемого устройства отображения, измеряемое в элементах изображения на метр.
    • biClrUsed - определяет число индексов в таблице цветов, используемых данным битовым образом. Если эта переменная имеет нулевое значение, то битовый образ использует максимальное число цветов, определяемое значением переменной biBitCount и режимом компрессии, определяемым переменной biCompression. Если переменная biClrUsedbiBitCount меньше 16, то переменная biClrUsed определяет истинное число цветов, используемое графическим устройством или драйвером. Если значение переменной biBitCount больше или равно 16, то значение переменной biClrUsed определяет размер таблицы цветов, используемый для оптимизации работы с системными палитрами. Если значение переменной biBitCount равно 16 или 32, то оптимальная цветовая палитра помещается непосредственно за тремя масками формата DWORD. Если битовый образ упакован (то есть, если массив битового образа следует за объектом структуры BITMAPINFO и для обращения к нему используется один указатель), переменная biClrUsed должна иметь нулевое значение или содержать истинный размер таблицы цветов.
    • biClrImportant - определяет число индексов в таблице цветов, необходимое для вывода битового образа. Если эта переменная имеет нулевое значение, для вывода битового образа необходимы все цвета. Содержит три маски для красного, зеленого и синего цветов соответственно, каждая из которых имеет формат двойного слова (DWORD). Каждому из элементов изображения соответствует отдельное слово в массиве битового образа. В Windows NT добавляется требование того, чтобы биты в масках располагались смежно и не перекрывались бы с битами других масок. При этом некоторые биты могут быть не использованы ни в одной из масок. В Windows 95 и Windows 98 в том случае, если переменная biCompression имеет значение BI_BITFIELDS, могут использоваться только перечисленные ниже 16-разрядные битовые маски: маска 5-5-5, в которой синий цвет имеет маску 0x001F, зеленый - 0x03E0 и красный - 0x7C00; и маска 5-6-5, , в которой синий цвет имеет маску 0x001F, зеленый - 0x07E0 и красный - 0xF80. 24 - битовый образ использует не более 224 цветов и переменная bmiColors имеет нулевое значение. Каждые 3 байта в массиве битового образа представляют собой относительную интенсивность синего, зеленого и красного цветов изображения. Массив bmiColors используется для оптимизации цветов на устройствах, использующих палитры и должен иметь размерность, равную значению переменной biClrUsed данного объекта структуры. 32 - битовый образ использует не более 232 цветов. Если переменная biCompression данного объекта структуры имеет значение BI_RGB, то переменная bmiColors имеет нулевое значение. В данном случае каждому элементу изображения битового образа соответствует одно двойное слово (DWORD) его массива, содержащее информацию об интенсивности красного, зеленого и синего цветов. Старший байт двойного слова не используется. Массив bmiColors используется для оптимизации цветов на устройствах, использующих палитры и должен иметь размерность, равную значению переменной biClrUsed данного объекта структуры. Переменная biCompression объекта структуры BITMAPINFOHEADER может иметь значение BI_BITFIELDS. В этом случае элемент массива bmiColors содержит три маски для красного, зеленого и синего цветов соответственно, каждая из которых имеет формат двойного слова (DWORD). Каждому из элементов изображения соответствует двойное слово (DWORD) в массиве битового образа. В Windows NT добавляется требование того, чтобы биты в масках располагались смежно и не перекрывались бы с битами других масок. При этом некоторые биты могут быть не использованы ни в одной из масок. В Windows 95 и Windows 98 в том случае, если переменная biCompression имеет значение BI_BITFIELDS, может использоваться только приведенная ниже 32-разрядная битовая маска: синий цвет имеет маску 0x000000FF, зеленый - 0x0000FF00 и красный - 0x00FF0000.
    • biCompression - определяет тип сжатия информации в битовом образе, строящемся снизу вверх (битовый образ, строящийся сверху вниз, не может сжиматься). Определены следующие значения:
      BI_RGB - сжатие отсутствует;
      BI_RLE8 - кодирование потоковым кодом (RLE) для битовых образов, использующих 8-битовое кодирование элемента изображения. Код состоит из двух байт, первый из которых содержит счетчик повторов, а второй - повторяемый индекс цвета;
      BI_RLE4 - кодирование потоковым кодом (RLE) для битовых образов, использующих 4-битовое кодирование элемента изображения. Код состоит из двух байт, первый из которых содержит счетчик повторов, а второй - два повторяемых индекса цвета;
      BI_BITFIELDS - указывает на то, что битовый образ не сжимался, а таблица цветов содержит три маски формата DWORD, определяющие интенсивность красного, зеленого и синего цветов для каждого элемента изображения;
      BI_JPEG - может устанавливаться в Windows 98, Windows NT 5.0 и более поздних версиях. Указывает на то, что битовый образ имеет формат JPEG.
    • biSizeImage - содержит размер изображения в байтах. При работе с битовыми образами формата BI_RGB может принимать нулевое значение. В Windows 98, Windows NT 5.0 и более поздних версиях: если переменная biCompression имеет значение BI_JPEG, то переменная biSizeImage содержит размер буфера изображения JPEG. biXPelsPerMeter - содержит горизонтальное разрешение используемого устройства отображения, измеряемое в элементах изображения на метр. Приложение может использовать эту величину для выбора из группы ресурсов битового образа, наиболее соответствующего характеристикам используемого устройства. biYPelsPerMeter - содержит вертикальное разрешение используемого устройства отображения, измеряемое в элементах изображения на метр.
    • biClrUsed - определяет число индексов в таблице цветов, используемых данным битовым образом. Если эта переменная имеет нулевое значение, то битовый образ использует максимальное число цветов, определяемое значением переменной biBitCount и режимом компрессии, определяемым переменной biCompression. Если переменная biClrUsed имеет ненулевое значение, а значение переменной biBitCount меньше 16, то переменная biClrUsed определяет истинное число цветов, используемое графическим устройством или драйвером. Если значение переменной biBitCount больше или равно 16, то значение переменной biClrUsed определяет размер таблицы цветов, используемый для оптимизации работы с системными палитрами. Если значение переменной biBitCount равно 16 или 32, то оптимальная цветовая палитра помещается непосредственно за тремя масками формата DWORD. Если битовый образ упакован (то есть, если массив битового образа следует за объектом структуры BITMAPINFO и для обращения к нему используется один указатель), переменная biClrUsed должна иметь нулевое значение или содержать истинный размер таблицы цветов. 
    • biClrImportant - определяет число индексов в таблице цветов, необходимое для вывода битового образа. Если эта переменная имеет нулевое значение, для вывода битового образа необходимы все цвета.

    Описание

    Объект структуры BITMAPINFOHEADER содержит информацию о размере и формате цветов аппаратно-независимого битового образа (DIB). Приложения, разработанные для операционных систем Windows NT 4.0 и Windows 95, могут использовать структуру BITMAPV4HEADER, а приложения, разработанные для операционных систем Windows NT 5.0 и Windows 98, могут использовать структуру BITMAPV5HEADER, предоставляющую дополнительные возможности. Объект структуры BITMAPINFO, включающий в себя объект структуры BITMAPINFOHEADER и таблицу цветов, содержит исчерпывающую информацию по размерам и цветам аппаратно-независимого битового образа. В Windows 98, Windows NT 5.0 и более поздних версиях структура BITMAPINFOHEADER расширена таким образом, чтобы позволить передавать битовый образ в формате JPEG функции StretchDIBBits. Описание данной структуры содержится в файле заголовка wingdi.h. 


    CHARFORMAT2

    typedef struct _charformat2 {
       UINT    cbSize;
       DWORD    dwMask;
       DWORD    dwEffects;
       LONG    yHeight;
       LONG    yOffset;
       COLORREF  crTextColor;
       BYTE    bCharSet;
       BYTE    bPitchAndFamily;
       TCHAR    szFaceName [LF_FACESIZE];
       WORD    wWeight;
       SHORT    sSpacing;
       COLORREF  crBackColor;
       LCID    lcid;
       DWORD    dwReserved;
       SHORT    sStyle;
       WORD    wKerning;
       BYTE    bUnderlineType;
       BYTE    bAnimation;
       BYTE    bRevAuthor;
       BYTE    bReserved1;
     } CHARFORMAT2;

    Переменные

    • cbSize - размер данной структуры в байтах. Должен быть определен до того, как объект данной структуры будет использован в элементе управления "расширенное текстовое поле". Может быть задан равным размеру структуры CHARFORMAT или CHARFORMAT2. Если переменная cbSize содержит размер объекта структуры CHARFORMAT, то в ней могут использоваться только элементы структуры CHARFORMAT.
    • dwMask - определяет, какие переменные данной структуры содержат достоверную информацию или должны быть установлены. Эта переменная может быть комбинацией следующих флагов, взятых из двух различных наборов. Первый из них определяет, какие из членов данной структуры содержат корректные значения, а второй - определяет корректные атрибуты переменной dwEffects. Для определения корректности значений членов данной структуры могут быть установлены следующие флаги:
      CFM_ANIMATION - переменная bAnimation содержит достоверную информацию;
      CFM_BACKCOLOR - переменная crBackColor содержит достоверную информацию;
      CFM_CHARSET - переменная bCharSet содержит достоверную информацию;
      CFM_COLOR - переменная crTextColor содержит достоверную информацию, если не установлен флаг CFE_AUTOCOLOR в аргументе dwEffects;
      CFM_FACE - переменная szFaceName содержит достоверную информацию;
      CFM_KERNING - переменная wKerning содержит достоверную информацию;
      CFM_LCID - переменная lcid содержит достоверную информацию;
      CFM_OFFSET - переменная yOffset содержит достоверную информацию;
      CFM_REVAUTHOR - переменная bRevAuthor содержит достоверную информацию;
      CFM_SIZE - переменная yHeight содержит достоверную информацию;
      CFM_SPACING - переменная sSpacing содержит достоверную информацию;
      CFM_STYLE - переменная sStyle содержит достоверную информацию;
      CFM_UNDERLINETYPE - переменная bUnderlineType содержит достоверную информацию;
      CFM_WEIGHT - переменная wWeight содержит достоверную информацию.
      Для определения корректных атрибутов переменной dwEffects могут быть установлены следующие флаги.
      CFM_ALLCAPS - используется значение флага CFE_BOLD.
      CFM_BOLD - используется значение флага CFE_BOLD.
      CFM_COLOR - используется значение флага CFE_AUTOCOLOR или переменной crTextColor.
      CFM_DISABLED - используется значение флага CFE_DISABLED.
      CFM_EMBOSS - используется значение флага CFE_EMBOSS.
      CFM_HIDDEN - используется значение флага CFE_HIDDEN.
      CFM_IMPRINT - используется значение флага CFE_IMPRINT.
      CFM_ITALIC - используется значение флага CFE_ITALIC.
      CFM_LINK - используется значение флага CFM_LINK.
      CFM_OUTLINE - используется значение флага CFM_OUTLINE.
      CFM_PROTECTED - используется значение флага CFE_PROTECTED.
      CFM_REVISED - используется значение флага CFE_REVISED.
      CFM_SHADOW - используется значение флага CFE_SHADOW.
      CFM_SMALLCAPS - используется значение флага CFE_SMALLCAPS.
      CFM_STRIKEOUT - используется значение флага CFE_STRIKEOUT.
      CFM_SUBSCRIPT - используются значения флагов CFE_SUBSCRIPT и CFE_SUPERSCRIPT.
      CFM_SUPERSCRIPT - используются значения флагов CFE_SUBSCRIPT и CFE_SUPERSCRIPT.
      CFM_UNDERLINE - используется значение флага CFE_UNDERLINE.
    • dwEffects - содержит список операций форматирования. Некоторые флаги включены только для обеспечения совместимости с интерфейсом Text Object Model (Модель текстовых объектов или TOM). Элемент управления расширенное текстовое поле сохранит установленные значения, но не будет использовать их при выводе текста. Может представлять собой комбинацию следующих значений.
      CFE_ALLCAPS - для вывода текста будут использоваться только заглавные буквы. Это значение не влияет на вывод текста в элементе управления. Используется только в версиях, предшествующих версии Rich Edit 3.0.
      CFE_AUTOCOLOR - цвет текста принимает значение, возвращаемое функцией GetSysColor (COLOR_WINDOWTEXT). Если этот флаг установлен, значение переменной crTextColor игнорируется.
      CFE_BOLD - текст отображается жирным шрифтом.
      CFE_DELETED - текст помечается как уничтоженный.
      CFE_EMBOSS - текст рельефно выделяется. Это значение не влияет на вывод текста в элементе управления.
      CFE_HIDDEN - в Rich Edit 3.0 и более поздних версиях текст не выводится.
      CFE_IMPRINT - текст отображается как впечатанный. Это значение не влияет на вывод текста в элементе управления.
      CFE_ITALIC - текст отображается курсивом.
      CFE_LINK - элемент управления расширенное текстовое поле посылает извещение EN_LINK при получении сообщений мыши о нахождении ее указателя на тексте, для которого установлен данный флаг.
      CFE_OUTLINE - текст выводится контурными буквами. Это значение не влияет на вывод текста в элементе управления.
      CFE_PROTECTED - устанавливается запрет на внесение изменений в параметры шрифта. При попытке внесения в него изменений посылается сообщение EN_PROTECTED.
      CFE_REVISION - текст отмечается как измененный.
      CFE_SHADOW - текст выводится оттененными знаками. Это значение не влияет на вывод текста в элементе управления.
      CFE_SMALLCAPS - текст выводится маленькими заглавными буквами. Это значение не влияет на вывод текста в элементе управления.
      CFE_STRIKEOUT - производится зачеркивание текста.
      CFE_SUBSCRIPT - выводится подстрочный текст. Флаги CFE_SUBSCRIPT и CFE_SUPERSCRIPT несовместимы. В обоих случаях в элементе управления вычисляется смещение и используется шрифт меньшего размера. Вместо установки этих флагов пользователь может использовать переменные данной структуры yHeight и yOffset для непосредственного задания размера шрифта и смещения надстрочного и подстрочного текста.
      CFE_SUPERSCRIPT - выводится надстрочный текст.
      CFE_UNDERLINE - производится подчеркивание текста.
    • yHeight - определяет высоту символов в пиках. Пика равняется 1/1440 дюйма или 1/20 точки принтера. Для использования этой переменной в перемененной dwMask должен быть установлен флаг CFM_SIZE.
    • yOffset - смещение символа относительно базовой линии, заданное в пиках. Если эта величина имеет положительное значение, то символ является верхним индексом, если негативное - нижним индексом. Для использования этой переменной в перемененной dwMask должен быть установлен флаг CFM_OFFSET.
    • crTextColor - определяет цвет текста. Для использования этой переменной в перемененной dwMask должен быть установлен флаг CFM_COLOR. Эта величина игнорируется, если определена операция форматирования CFE_AUTOCOLOR. Для заполнения объектов структуры COLORREF может использоваться макрос RGB.
    • bCharSet - определяет используемый набор символов. Этот аргумент может принимать те же значения, что и переменная lfCharSet в структуре LOGFONT. Для использования этой переменной в перемененной dwMask должен быть установлен флаг CFM_CHARSET.
    • bPitchAndFamily - определяет будет ли шрифт иметь фиксированную или переменную ширину литер, а также семейство, к которому принадлежит данный шрифт. Этот аргумент может принимать те же значения, что и переменная lfPitchAndFamily в структуре LOGFONT.
    • szFaceName - текстовая строка, завершающаяся нулем, в которой хранится имя шрифта. Для использования этой переменной в перемененной dwMask должен быть установлен флаг CFM_FACE.
    • wWeight - определяет начертание шрифта. Этот аргумент может принимать те же значения, что и переменная lfWeight в структуре LOGFONT. Для использования этой переменной в перемененной dwMask должен быть установлен флаг CFM_WEIGHT.
    • sSpacing - горизонтальное расстояние между символами в пиках. Это значение не влияет на вывод текста в элементе управления. Оно включено для обеспечения совместимости с интерфейсом Text Object Model (TOM). Для использования этой переменной в перемененной dwMask должен быть установлен флаг CFM_SPACING.
    • crBackColor - цвет фона. Для использования этой переменной в перемененной dwMask должен быть установлен флаг CFM_BACKCOLOR. Для заполнения объектов структуры COLORREF может использоваться макрос RGB.
    • lcid - 32-разрядный локальный идентификатор, младшее слово которого содержит идентификатор языка, а старшее слово - идентификатор сортировки. Часть старшего слова данного идентификатора зарезервирована. Это значение не влияет на вывод текста в элементе управления расширенное текстовое поле, но оно может использоваться при проверке правописания и грамматики. Для создания значения LCID может использоваться макрос MAKELCID. Для использования этой переменной в перемененной dwMask должен быть установлен флаг CFM_LCID.
    • dwReserved - зарезервирована, должна иметь нулевое значение.
    • sStyle - дескриптор стиля символа. Это значение не влияет на вывод текста в элементе управления. Оно включено для обеспечения совместимости с интерфейсом Text Object Model (TOM). Для использования этой переменной в перемененной dwMask должен быть установлен флаг CFM_STYLE.
    • wKerning - размер шрифта (yHeight), начиная с которого апроши уменьшаются. Это значение не влияет на вывод текста в элементе управления. Оно включено для обеспечения совместимости с интерфейсом Text Object Model (TOM). Для использования этой переменной в перемененной dwMask должен быть установлен флаг CFM_KERNING.
    • bUnderlineType - определяет тип подчеркивания. Для использования этой переменной в перемененной dwMask должен быть установлен флаг CFM_UNDERLINETYPE. Может принимать одно из следующих значений:
      CFU_CF1UNDERLINE - использует тот же стиль подчеркивания. что и CHARFORMAT;
      CFU_UNDERLINE - подчеркивание сплошной линией;
      CFU_UNDERLINEDOTTED - подчеркивание пунктирной линией. В версиях, предшествующих Rich Edit 3.0, текст подчеркивается сплошной линией;
      CFU_UNDERLINEDOUBLE - подчеркивание двойной линией. В расширенном текстовом поле будет произведено подчеркивание сплошной линией;
      CFU_UNDERLINENONE - подчеркивание отсутствует. Устанавливается по умолчанию;
      CFU_UNDERLINEWORD - подчеркиваются только слова. В расширенном текстовом поле будет произведено подчеркивание всего текста сплошной линией.
    • bAnimation - тип анимации текста. Это значение не влияет на вывод текста в элементе управления. Оно включено для обеспечения совместимости с интерфейсом Text Object Model (TOM). Для использования этой переменной в перемененной dwMask должен быть установлен флаг CFM_ANIMATION.
    • bRevAuthor - индекс, идентифицирующий автора, вносящего изменения. В расширенном текстовом поле для различных индексов авторов используются различные цвета текста. Для использования этой переменной в перемененной dwMask должен быть установлен флаг CFM_REVAUTHOR. bReserved1 - зарезервирована, должна иметь нулевое значение.

    Описание

    Структура CHARFORMAT2 содержит информацию о форматировании символов в расширенном текстовом поле. Эта структура является расширением структуры CHARFORMAT для элемента управления Rich Edit 2.0. Rich Edit 2.0 позволяет использовать любую из этих структур в сообщениях EM_GETCHARFORMAT и EM_SETCHARFORMAT. Описание данной структуры содержится в файле заголовка Richedit.h. 


    CHOOSEFONT

    typedef struct {
        DWORD lStructSize;
        HWND hwndOwner;
        HDC hDC;
        LPLOGFONT lpLogFont;
        INT iPointSize;
        DWORD Flags;
        DWORD rgbColors;
        LPARAM lCustData;
        LPCFHOOKPROC lpfnHook;
        LPCTSTR lpTemplateName;
        HINSTANCE hInstance;
        LPTSTR lpszStyle;
        WORD nFontType;
        WORD ___MISSING_ALIGNMENT__;
        INT nSizeMin;
        INT nSizeMax;
    } CHOOSEFONT;

    Переменные

    • lStructSize - определяет размер объекта данной структуры в байтах.
    • hwndOwner - дескриптор окна, которому принадлежит данное диалоговое окно. В данной переменной может размещаться любой допустимый дескриптор окна или значение NULL, если диалоговое окно не имеет владельца.
    • hDC - дескриптор контекста устройства (или информационного контекста) принтера, чей шрифт будет отображаться в диалоговом окне. Значение этой переменной будет использоваться только в том случае, когда в переменной Flags установлен флаг CF_PRINTERFONTS или CF_BOTH. В противном случае значение данной переменной игнорируется.
    • lpLogFont - указатель на объект структуры LOGFONT. Если в переменной Flags установлен флаг CF_INITTOLOGFONTSTRUCT, функция ChooseFont использует значения переменных объекта структуры LOGFONT для инициализации диалогового окна. При этом выбираются параметры шрифта наиболее близкого к заданным параметрам. Если пользователь нажал кнопку OK, функция ChooseFont устанавливает значения переменных в объекте структуры LOGFONT исходя из установок элементов управления диалогового окна.
    • iPointSize - устанавливает размер выделенного шрифта в единицах, равных 1/10 пики. Функция ChooseFont устанавливает значение данной переменной после закрытия диалогового окна.
    • Flags - набор битовых флагов используемых для инициализации диалогового окна Шрифт. После закрытия данного диалогового окна эти флажки содержат информацию об установках элементов управления диалогового окна. Эта переменная может включать в себя следующие флаги.
      CF_APPLY - диалоговое окно будет включать в себя кнопку Применить. При установке данного флажка пользователь должен написать функцию обратного вызова для обработки сообщения WM_COMMAND, посылаемого кнопкой Применить. Функция обратного вызова может посылать диалоговому окну сообщение WM_CHOOSEFONT_GETLOGFONT для получения указателя на объект структуры LOGFONT, содержащей текущие параметры выделенного шрифта.
      CF_ANSIONLY - данный флаг является устаревшим. Чтобы ограничить выбор шрифтов всеми рукописными шрифтами, кроме использующих набор символов OEM или Symbol, используйте флаг CF_SCRIPTSONLY. Чтобы эмулировать поведение флажка CF_ANSIONLY, используемого в Windows 3.1, используйте флажок CF_SELECTSCRIPT и присвойте значение ANSI_CHARSET переменной lfCharSet объекта структуры LOGFONT, на который указывает переменная lpLogFont.
      CF_BOTH - выводит в диалоговом окне все имеющиеся шрифты принтеров и дисплея. Переменная hDC данного объекта содержит в этом случае контекст устройства (или информационный контекст), связанный с принтером. Этот флажок представляет собой комбинацию флагов CF_SCREENFONTS и CF_PRINTERFONTS.
      CF_TTONLY - определяет, что функция ChooseFont должна пронумеровать и предоставить выбор исключительно из шрифтов TrueType.
      CF_EFFECTS - выводит в диалоговом окне элементы управления, позволяющие пользователю задать подчеркивание, зачеркивание и цвет шрифта. Если этот флажок установлен, пользователь может использовать переменную rgbColors для задания изначального цвета шрифта. Пользователь может также использовать переменные lfStrikeOut и lfUnderline объекта структуры LOGFONT, на который указывает переменная lpLogFont, для установки или сброса флажков подчеркивания и зачеркивания шрифта. Функция ChooseFont использует данные переменные для сохранения состояния этих флажков.
      CF_ENABLEHOOK - позволяет использовать функцию обратного вызова, указатель на которую располагается в переменной lpfnHook.
      CF_ENABLETEMPLATE - указывает на то, что переменные hInstance и lpTemplateName содержат шаблон диалогового окна, который следует использовать вместо стандартного шаблона.
      CF_ENABLETEMPLATEHANDLE - указывает на то, что переменная hInstance определяет блок данных, в котором содержится шаблон диалогового окна. В этом случае система игнорирует значение переменной lpTemplateName.
      CF_FIXEDPITCHONLY - указывает на то, что функция ChooseFont должна выделять только шрифты фиксированного размера (не пропорциональные).
      CF_FORCEFONTEXIST - указывает на то, что функция ChooseFont должна сообщать о возникновении ошибки, если пользователь пытается выбрать несуществующий шрифт или стиль.
      CF_INITTOLOGFONTSTRUCT - указывает на то, что функция ChooseFont должна использовать объект структуры LOGFONT, на который указывает переменная lpLogFont при инициализации элементов управления диалогового окна.
      CF_LIMITSIZE - указывает на то, что функция ChooseFont должна выделять шрифты, размеры которых находятся в диапазоне, заданном переменными nSizeMin и nSizeMax.
      CF_NOOEMFONTS - аналогичен флажку CF_NOVECTORFONTS.
      CF_NOFACESEL - при использовании объекта структуры LOGFONT для инициализации элементов управления диалогового окна данный флаг предотвращает преждевременный вывод имени шрифта в соответствующий комбинированный список. Эта установка бывает полезной, если в выделенном фрагменте текста используются различные шрифты.
      CF_NOSCRIPTSEL - делает недоступным раскрывающийся список Набор символов:. При установке данного флага переменной lfCharSet объекта структуры LOGFONT при закрытии диалогового окна присваивается значение DEFAULT_CHARSET. Этот флаг используется только при инициализации диалогового окна.
      CF_NOSTYLESEL - при использовании объекта структуры LOGFONT для инициализации элементов управления диалогового окна, данный флаг предотвращает преждевременный вывод стиля шрифта в соответствующий комбинированный список. Эта установка бывает полезной, если в выделенном фрагменте текста используются различные шрифты.
      CF_NOSIZESEL - при использовании объекта структуры LOGFONT для инициализации элементов управления диалогового окна данный флаг предотвращает преждевременный вывод размера шрифта в соответствующий комбинированный список. Эта установка бывает полезной, если в выделенном фрагменте текста используются различные шрифты.
      CF_NOSIMULATIONS - указывает на то, что функция ChooseFont не должна допускать эмуляции шрифтов интерфейсом графических устройств Windows (GDI).
      CF_NOVECTORFONTS - указывает на то, что функция ChooseFont не должна допускать выделения векторных шрифтов.
      CF_NOVERTFONTS - указывает диалоговому окну Шрифт на необходимость вывода шрифтов только с горизонтальной ориентацией символов.
      CF_PRINTERFONTS - указывает диалоговому окну на необходимость вывода только тех шрифтов, которые поддерживаются принтером, связанным с контекстом устройства (или информационным контекстом), определяемым переменной hDC.
      CF_SCALABLEONLY - указывает на то, что функция ChooseFont должна допускать выделение только масштабируемых шрифтов (к масштабируемым относятся векторные шрифты, масштабируемые шрифты принтеров, шрифты TrueType и шрифты, масштабируемые с использованием других технологий).
      CF_SCREENFONTS - указывает диалоговому окну на необходимость вывода только экранных шрифтов, поддерживаемых системой.
      CF_SCRIPTSONLY - указывает на то, что функция ChooseFont должна допускать выделение шрифтов, использующих набор символов Symbol и ANSI OEM, и не допускать выбора шрифтов, использующих набор символов OEM. Этот флаг заменяет флаг CF_ANSIONLY.
      CF_SELECTSCRIPT - при инициализации диалогового окна этот флажок указывает на то, что в нем необходимо выводить только шрифты, использующие набор символов, определенный в переменной lfCharSet объекта структуры LOGFONT. При этом пользователю запрещается вносить изменения в набор символов, определенный в раскрывающемся списке Набор символов:.
      CF_SHOWHELP - в диалоговом окне будет выведена кнопка Справка. В переменной hwndOwner должно быть определено окно, которое будет получать сообщение HELPMSGSTRING, посылаемое диалоговым окном при нажатии этой кнопки.
      CF_USESTYLE - указывает на то, что в переменной lpszStyle содержится указатель на буфер, содержащий данные о стиле, которые функция ChooseFont должна использовать при инициализации комбинированного списка Начертание:. При закрытии диалогового окна функция ChooseFont копирует данные из этого раскрывающегося списка в указанный буфер.
      CF_WYSIWYG - указывает на то, что функция ChooseFont должна допускать выделение только тех шрифтов, которые присутствуют как на принтере, так и на дисплее. Если установлен данный флажок, то одновременно должны быть установлены флажки CF_BOTH и CF_SCALABLEONLY.
    • rgbColors - если установлен флаг CF_EFFECTS, переменная rgbColors содержит исходный цвет текста. После успешного завершения работы функции ChooseFont эта переменная содержит значения RGB цвета выделенного пользователем текста.
    • lCustData - указатель на блок данных, передаваемых системой функции обратного вызова, указатель на которую содержится в переменной lpfnHook. Когда система посылает сообщение WM_INITDIALOG функции обратного вызова, в аргументе lParam данного сообщения содержится указатель на объект структуры CHOOSEFONT, определенный при создании данного диалогового окна. Функция обратного вызова может использовать этот указатель для получения доступа к переменной lCustData.
    • lpfnHook - указатель на функцию обратного вызова CFHookProc, обрабатывающую сообщения диалогового окна. Значение данной переменной игнорируется, если не установлен флаг CF_ENABLEHOOK в переменной Flags.
    • lpTemplateName - указатель на заканчивающуюся нулем текстовую строку, содержащую имя шаблона ресурса диалогового окна, определенного в переменной hInstance. Этот шаблон используется вместо стандартного шаблона диалогового окна. Для перечислимых ресурсов диалогового окна переменная lpTemplateName может хранить значение, возвращаемое макросом MAKEINTRESOURCE. Значение данной переменной игнорируется, если не установлен флаг CF_ENABLETEMPLATE в переменной Flags.
    • hInstance - если в переменной Flags установлен флаг CF_ENABLETEMPLATEHANDLE, в переменной hInstance содержит дескриптор объекта, расположенного в оперативной памяти, и содержащего шаблон диалогового окна. Если установлен флаг CF_ENABLETEMPLATE, переменная hInstance определяет модуль, содержащий шаблон диалогового окна, имя которого содержится в переменной lpTemplateName. Если ни один из указанных выше флажков не установлен, значение данной переменной игнорируется.
    • lpszStyle - указатель на буфер, содержащий информацию о стиле. Если установлен флаг CF_USESTYLE, функция ChooseFont использует эту информацию при инициализации диалогового окна. При закрытии диалогового окна функция ChooseFont копирует в этот буфер информацию о стилях.
    • nFontType - определяет тип выделенного шрифта при завершении работы функции ChooseFont. Эта переменная может содержать следующие флаги. BOLD_FONTTYPE - шрифт является полужирным. Эта информация дублируется в переменной lfWeight объекта структуры LOGFONT и эквивалентна флагу FW_BOLD.
      ITALIC_FONTTYPE - установлен атрибут курсива. Эта информация дублируется в переменной lfItalic объекта структуры LOGFONT.
      PRINTER_FONTTYPE - шрифт является внутренним шрифтом принтера.
      REGULAR_FONTTYPE - шрифт является нормальным. Эта информация дублируется в переменной lfWeight объекта структуры LOGFONT и эквивалентна флагу FW_REGULAR.
      SCREEN_FONTTYPE - шрифт является экранным шрифтом.
      SIMULATED_FONTTYPE - шрифт эмулируется интерфейсом графических устройств Windows (GDI).
    • nSizeMin - определяет минимальный размер выделяемого пользователем шрифта. Функция ChooseFont использует значение этой переменной только при установленном флаге CF_LIMITSIZE.
    • nSizeMax - определяет максимальный размер выделяемого пользователем шрифта. Функция ChooseFont использует значение этой переменной только при установленном флаге CF_LIMITSIZE.

    Описание

    Объект структуры CHOOSEFONT содержит информацию, используемую функцией ChooseFont для инициализации стандартного диалогового окна Шрифт. После того, как пользователь закроет это диалоговое окно, в данную структуру будет помещена информация об установках элементов управления данного диалогового окна. 


    HELPINFO

    typedef struct tagHELPINFO
    {
        UINT cbSize;
        int iContextType
        int iCtrlId;
        HANDLE hItemHandle;
        DWORD dwContextId;
        POINT MousePos;
    } HELPINFO, FAR *LPHELPINFO;

    Переменные

    • cbSize - размер структуры в байтах.
    • iContextType - определяет тип контекста, для которого запрашивается справка. Данный аргумент может принимать одно из следующих значений:
      HELPINFO_MENUITEM - справка по команде меню;
      HELPINFO_WINDOW - справка по элементу управления или окну.
    • iCtrlId - если аргумент iContextType имеет значение HELPINFO_WINDOW, то в данном аргументе содержится идентификатор окна или элемента управления. Если аргумент iContextType имеет значение HELPINFO_MENUITEM, то в данном аргументе содержится идентификатор команды меню.
    • hItemHandle - если аргумент iContextType имеет значение HELPINFO_WINDOW, то в данном аргументе содержится идентификатор дочернего окна или элемента управления. Если аргумент iContextType имеет значение HELPINFO_MENUITEM, то в данном аргументе содержится идентификатор связанного меню.
    • dwContextId - контекстный идентификатор окна или элемента управления.
    • MousePos - объект структуры POINT, содержащий экранные координаты курсора мыши. Эта информация используется при выводе справки на основании текущей позиции курсора мыши.

    Описание

    Данная структура используется для хранения информации о теме контекстной справки.


    HH_WINTYPE

    typedef struct tagHH_WINTYPE {
      int cbStruct;
      BOOL fUniCodeStrings;
      LPCTSTR pszType;
      DWORD fsValidMembers;
      DWORD fsWinProperties;
      LPCTSTR pszCaption;
      DWORD dwStyles;
      DWORD dwExStyles;
      RECT rcWindowPos;
      int nShowState;
      HWND hwndHelp;
      HWND hwndCaller;
      HH_INFOTYPE* paInfoTypes;
      HWND hwndToolBar;
      HWND hwndNavigation;
      HWND hwndHTML;
      int iNavWidth;
      RECT rcHTML;
      LPCTSTR pszToc;
      LPCTSTR pszIndex;
      LPCTSTR pszFile;
      LPCTSTR pszHome;
      DWORD fsToolBarFlags;
      BOOL fExpanded;
      int curNavType;
      int tabpos;
      int idNotify;
      BYTE tabOrder[HH_MAX_TABS + 1];
    } HH_WINTYPE;

    Переменные

    • cbStruct - размер объекта структуры. Значение этой переменной должно быть определено до того, как данный объект структуры будет передан функции HtmlHelp.
    • fUniCodeStrings - определяет, являются ли строки данной структуры строками Unicode.
    • pszType - указатель на заканчивающуюся нулем строку, содержащую имя типа окна.
    • fsValidMembers - используется при изменении свойств сушествующего типа окна и определяет его обновляемые свойства. В данной переменной могут быть установлены следующие флаги. HHWIN_PARAM_PROPERTIES - используется переменная fsWinProperties.
      HHWIN_PARAM_STYLES - используется переменная dwStyles.
      HHWIN_PARAM_EXSTYLES - используется переменная dwExStyles.
      HHWIN_PARAM_RECT - используется переменная rcWindowPos.
      HHWIN_PARAM_NAV_WIDTH - используется переменная rcNavigation.
      HHWIN_PARAM_SHOWSTATE - используется переменная nShowState.
      HHWIN_PARAM_INFOTYPES - используется переменная ainfoTypes.
      HHWIN_PARAM_TB_FLAGS - используется переменная fsToolBarFlags.
      HHWIN_PARAM_EXPANSION - используется переменная fExpanded.
      HHWIN_PARAM_TABPOS - используется переменная tabpos.
      HHWIN_PARAM_TABORDER - используется переменная tabOrder.
      HHWIN_PARAM_HISTORY_COUNT - используется переменная cHistory.
    • fsWinProperties - используется для задания различных свойств окна. В данной переменной могут быть установлены следующие флаги. HHWIN_PROP_ONTOP - определяет, что окно будет отображаться не только поверх родительского окна, но и поверх всех остальных окон на рабочем столе.
      HHWIN_PROP_NOTITLEBAR - запрещает вывод заголовка окна.
      HHWIN_PROP_NODEF_STYLES - запрещает использование при создании окна стилей, заданных по умолчанию. По умолчанию задается следующая комбинация стилей: WS_THICKFRAME | WS_OVERLAPPED | WS_VISIBLE.
      HHWIN_PROP_NODEF_EXSTYLES - запрещает использование при создании окна расширенных стилей, заданных по умолчанию. При задании этого флага флаг HHWIN_PROP_ONTOP игнорируется.
      HHWIN_PROP_TRI_PANE - создает окно с тремя панелями. Этот флаг не изменяет вида уже созданного окна.
      HHWIN_PROP_NOTB_TEXT - запрещает вывод текста под кнопками панели инструментов окна с тремя панелями.
      HHWIN_PROP_POST_QUIT - при закрытии окна справки оно посылает сообщение WM_QUIT в очередь сообщений вызвавшего приложения, что приведет к его закрытию.
      HHWIN_PROP_AUTO_SYNC - определяет, что при выводе вкладок оглавления или индекса в них отображается заголовок темы или ключевое слово, соответствующее текущему URL. Если URL для нового файла HTML отсутствует, в этих вкладках не происходит никаких изменений.
      HHWIN_PROP_TRACKING - задает режим посылки вызвавшему приложению следящих извещений.
      HHWIN_PROP_TAB_SEARCH - включает вкладку текстового поиска в панель навигации окна с тремя панелями.
      HHWIN_PROP_TAB_HISTORY - включает вкладку результатов предыдущего поиска в панель навигации окна с тремя панелями. Это свойство не поддерживается в версии 1.
      HHWIN_PROP_TAB_FAVORITES - включает вкладку наиболее часто встречающихся тем в панель навигации окна с тремя панелями. Это свойство не поддерживается в версии 1.
      HHWIN_PROP_CHANGE_TITLE - выводит в заголовке окна справочной системы заголовок отображаемого файла HTML.
      HHWIN_PROP_TAB_ADVANCED - включает вкладку расширенного поиска в панель навигации окна с тремя панелями.
    • pszCaption - указатель на заканчивающуюся нулем строку, содержащую заголовок окна.
    • dwStyles - определяет стили создаваемого окна. Стили могут игнорироваться, комбинироваться со стилями, используемыми по умолчанию или использоваться отдельно, в зависимости от значений переменных fsValidMembers и fsWinProperties.
    • dwExStyles - определяет дополнительные стили создаваемого окна. Стили могут игнорироваться, комбинироваться со стилями, используемыми по умолчанию или использоваться отдельно, в зависимости от значений переменных fsValidMembers и fsWinProperties.
    • rcWindowPos - содержит координаты окна. При задании координат все отрицательные значения игнорируются. Например, для перемещения окна с сохранением его размеров необходимо задать позицию левого верхнего угла прямоугольника, а координатам его правого нижнего угла присвоить значения -1.
    • nShowState - определяет исходный режим отображения окна.
    • hwndHelp - содержит дескриптор создаваемого окна справочной системы.
    • hwndCaller - содержит дескриптор окна, которому будут посылаться сообщения.
    • paInfoTypes - определяет типы выводимой информации. Каждый тип выводимой информации представляет собой флаг. Если не установлен нулевой флаг, то все команды HTML Help, использующие различные типы выводимой информации, будут использовать эти флаги для определения того, какой UI необходимо отображать и когда следует произвести переход по гиперссылке.
    • hwndToolBar - дескриптор окна Панель инструментов окна справочной системы, содержащей три панели.
    • hwndNavigation - дескриптор окна, содержащего текущий UI навигации в окне, имеющем три панели.
    • hwndHTML - дескриптор окна, в которое выводятся файлы HTML в окне, имеющем три панели. Это окно является родительским для SHDOCVW.
    • iNavWidth - определяет ширину панели навигации в окне, имеющем три панели, при его развертывании.
    • rcHTML - определяет координаты панели HTML в окне, имеющем три панели.
    • pszToc - определяет файл или URL, используемый в оглавлении окна, имеющего три панели.
    • pszIndex - определяет файл или URL, используемый в индексаторе окна, имеющего три панели.
    • pszFile - определяет файл или URL, используемый в правой панели окна, имеющего три панели. Этот файл будет отображаться при нажатии пользователем кнопки Home (Домой) на панели инструментов.
    • pszHome - определяет файл или URL, используемый в правой панели окна, имеющего три панели, отображаемый при нажатии пользователем кнопки Home (Домой) на панели инструментов.
    • fsToolBarFlags - определяет набор кнопок панели инструментов, отображаемой в окне, имеющем три панели. В данной переменной могут быть установлены следующие флаги:
      HHWIN_BUTTON_EXPAND - кнопка Expand/contract (Расширить) в панели навигации;
      HHWIN_BUTTON_BACK - кнопка Back (Назад);
      HHWIN_BUTTON_FORWARD - кнопка Forward (Вперед);
      HHWIN_BUTTON_STOP - кнопка Stop (Остановить);
      HHWIN_BUTTON_REFRESH - кнопка Refresh (Обновить);
      HHWIN_BUTTON_HOME - кнопка Home (Домой) (для файла HTML, заданного для окна);
      HHWIN_BUTTON_HISTORY - кнопка History (Журнал);
      HHWIN_BUTTON_FAVORITES - кнопка Favorites (Избранное);
      HHWIN_BUTTON_TOC - кнопка Table of Contents (Содержание);
      HHWIN_BUTTON_INDEX - кнопка Index (Предметный указатель);
      HHWIN_BUTTON_SEARCH - кнопка Simple search (Поиск);
      HHWIN_BUTTON_JUMP1 - кнопка Jump1 (Переход1);
      HHWIN_BUTTON_JUMP2 - кнопка Jump2 (Переход2).
    • fExpanded - определяет необходимость вывода панели навигации в окне, имеющем три панели.
    • curNavType - определяет навигационный UI, выводимый в панели навигации окна, имеющего три панели. Эта переменная может принимать одно из следующих значений:
      HHWIN_NAVTYPE_TOC - выводится вкладка Contents (Содержание);
      HHWIN_NAVTYPE_INDEX - выводится вкладка Index (Предметный указатель).
    • tabpos - определяет положение вкладок в навигационной панели окна, имеющего три панели. Эта переменная может принимать одно из следующих значений:
      HHWIN_NAVTAB_TOP - вкладки выводятся сверху;
      HHWIN_NAVTAB_LEFT - вкладки выводятся слева;
      HHWIN_NAVTAB_BOTTOM - вкладки выводятся снизу.
    • idNotify - определяет идентификатор, указываемый в аргументе WPARAM сообщения WM_NOTIFY.
    • tabOrder - определяет порядок вкладок в навигационной панели окна, имеющего три панели. Для использования этой переменной следует установить флаг HHWIN_PARAM_TABORDER. Первые десять позиций зарезервированы для стандартных вкладок HTML Help: Contents (Содержание), Index (Предметный указатель), Search (Поиск), History (Журнал), Favorites (Избранное) и Reserved 1-5 (зарезервированы для последующего использования). Каждый байт содержит численное значение, соответствующее позиции, начиная с нулевой. Например, для вывода вкладки Index (Предметный указатель) первой, а вкладки Contents (Содержание) - второй, необходимо произвести следующие присваивания: tabOrder[HH_TAB_CONTENTS] = 1 и tabOrder[HH_TAB_INDEX] = 0.
    • cHistory - определяет число хранимых результатов последних поисков. В настоящее время значение этой переменной игнорируется. pszJump1 - содержит URL, по которому будет произведен переход при нажатии кнопки Jump1 (Переход1).
      pszJump2 - содержит URL, по которому будет произведен переход при нажатии кнопки Jump2 (Переход2).

    Описание

    Объекты структуры HH_WINTYPE используются при создании, изменении или получении свойств окон справочной системы HTML. Типы окна могут определяться разработчиком и храниться в скомпилированном файле HTML, или же определяться в программе с использованием функции HtmlHelp. Каждый тип окна должен иметь уникальное имя. Если при обращении к функции HtmlHelp указано имя несуществующего типа окна, то для этого имени будет создан новый тип окна, свойства которого будут установлены по умолчанию. 


    HH_POPUP

    typedef struct tagHH_POPUP
    {
      int cbStruct;
      HINSTANCE hinst;
      UINT idString;
      LPCTSTR pszText;
      POINT pt;
      COLORREF clrForeground;
      COLORREF clrBackground;
      RECT rcMargins;
      LPCTSTR pszFont;
    } HH_POPUP;

    Переменные

    • cbStruct - размер объекта структуры. Значение этой переменной должно быть определено до того, как данный объект структуры будет передан функции HtmlHelp.
    • hinst - дескриптор экземпляра программы или библиотеки динамической компоновки (DLL), в которой содержится строковый ресурс. Значение данной переменной игнорируется, если переменная idString имеет нулевое значение или в функции HtmlHelp передается имя файла.
    • idString - содержит идентификатор строкового ресурса или номер темы в текстовом файле.
    • pszText - содержит выводимый текст, если переменная idString имеет нулевое значение.
    • pt - определяет координаты центральной точки верхней границы всплывающего окна.
    • clrForeground - содержит цвет выводимого текста. Если эта переменная имеет значение -1, используется цвет текста, выбранный по умолчанию.
    • clrBackground - содержит цвет фона. Если эта переменная имеет значение -1, используется цвет фона, выбранный по умолчанию.
    • rcMargins - определяет отступ от границ рабочей области окна. По умолчанию все члены данного объекта структуры имеют единичные значения.
    • pszFont - содержит необязательную текстовую строку, определяющую используемый шрифт. Эта строка имеет следующий формат: facename[,point size[,charset[,color[, BOLD ITALIC UNDERLINE]]]]. При пропуске какого-либо элемента шрифта сохраняются выделяющие его запятые. Например, для задания курсивного шрифта Times New Roman следует использовать следующую строку Times New Roman, , , , ITALIC.

    Описание

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


    LOGFONT

    typedef struct tagLOGFONT { // lf
      LONG lfHeight;
      LONG lfWidth;
      LONG lfEscapement;
      LONG lfOrientation;
      LONG lfWeight;
      BYTE lfItalic;
      BYTE lfUnderline;
      BYTE lfStrikeOut;
      BYTE lfCharSet;
      BYTE lfOutPrecision;
      BYTE lfClipPrecision;
      BYTE lfQuality;
      BYTE lfPitchAndFamily;
      TCHAR lfFaceName[LF_FACESIZE];
    } LOGFONT;

    Переменные

    • lfHeight - определяет высоту ячейки шрифта или символа в логических единицах. Высота символа представляет собой высоту ячейки символа минус межстрочный интервал. Программа масштабирования шрифтов воспринимает возможные значения данной переменной следующим образом:
      > 0 - программа масштабирования шрифтов преобразует эту величину в единицы устройства и сопоставляет ее с высотой ячеек имеющихся шрифтов;
      0 - программа масштабирования шрифтов использует при поиске значение, установленное по умолчанию;
      < 0 - программа масштабирования шрифтов преобразует эту величину в единицы устройства и использует ее абсолютное значение для задания высоты символов. При проведении всех сравнений высоты программа масштабирования шрифтов ищет максимальный шрифт, размеры которого не превышают заданных величин. Преобразование производится при первом использовании шрифта. В режиме отображения MM_TEXT для определения высоты шрифта по его размеру в элементах изображения может быть использована следующая формула:
      lfHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);
    • lfWidth - определяет среднюю ширину символов в логических единицах. Если данная переменная имеет нулевое значение, то коэффициент сжатия устройства сопоставляется с отношением ширины знака к его высоте для имеющихся шрифтов с целью нахождения ближайшего соответствия, определяемого по абсолютной величине разности.
    • lfEscapement - определяет угол наклона, выраженный в десятках градусов, между базовой линией строки текста и горизонтальной осью устройства. В Windows NT в графическом режиме GM_ADVANCED имеется возможность определять угол наклона базовой линии строки текста независимо от угла ориентации символов в строке. В Windows 95 и в графическом режиме GM_COMPATIBLE Windows NT переменная lfEscapement определяет одновременно угол наклона базовой линии строки текста и ориентацию символов. Поэтому переменные lfEscapement и lfOrientation должны иметь одно и то же значение.
    • lfOrientation - определяет угол наклона, выраженный в десятках градусов, между базовой линией каждого символа в строке текста и горизонтальной осью устройства.
    • lfWeight - определяет вес шрифта, значение которого находится в диапазоне от 0 до 1000. Например значение 400 соответствует обычному шрифту, а значение 700 - полужирному шрифту. Если данная переменная имеет нулевое значение, то используется значение веса шрифта, установленное по умолчанию. В таблице П2.7. приведены предопределенные значения веса шрифта:
      Таблица П2.7. Предопределенные значения веса шрифта Идентификатор Значение FW_DONTCARE 0
      FW_THIN 100
      FW_EXTRALIGHT 200
      FW_ULTRALIGHT 200
      FW_LIGHT 300
      FW_NORMAL 400
      FW_REGULAR 400
      FW_MEDIUM 500
      FW_SEMIBOLD 600
      FW_DEMIBOLD 600
      FW_BOLD 700
      FW_EXTRABOLD 800
      FW_ULTRABOLD 800
      FW_HEAVY 900
      FW_BLACK 900
      lfItalic - если эта величина имеет значение TRUE, то текст выводится курсивом.
    • lfUnderline - если эта величина имеет значение TRUE, то текст выводится с подчеркиванием.
    • lfStrikeOut - если эта величина имеет значение TRUE, то текст выводится с зачеркиванием.
    • lfCharSet - определяет используемый набор символов. Может иметь следующие значения: ANSI_CHARSET, BALTIC_CHARSET, CHINESEBIG5_CHARSET, DEFAULT_CHARSET, EASTEUROPE_CHARSET, GB2312_CHARSET, GREEK_CHARSET, HANGUL_CHARSET, MAC_CHARSET, OEM_CHARSET, RUSSIAN_CHARSET, SHIFTJIS_CHARSET, SYMBOL_CHARSET и TURKISH_CHARSET. В корейской версии Windows определено значение JOHAB_CHARSET. В ближневосточной версии Windows определены значения HEBREW_CHARSET и ARABIC_CHARSET. В таиландской версии Windows определено значение THAI_CHARSET. Набор символов OEM_CHARSET зависит от используемой версии Windows. Набор символов DEFAULT_CHARSET при задании имени и размера шрифта полностью определяет логический шрифт. Если задаваемое имя шрифта не существует, то вместо заданного может использоваться шрифт с любым набором символов. Поэтому необходимо осторожно подходить к использованию набора символов DEFAULT_CHARSET.
      В операционной системе могут существовать шрифты с другими наборами символов. Если приложение использует шрифт с неизвестным набором символов, оно не пытается преобразовать или интерпретировать строку, выведенную с использованием данного шрифта.
      Эта переменная используется при масштабировании символов. Для получения надежных результатов необходимо использовать стандартные наборы символов. При определении начертания шрифта в переменной lfFaceName убедитесь, что значение переменной lfCharSet соответствует набору символов, определенному для начертания, определяемого переменной lfFaceName.
    • lfOutPrecision - определяет точность представления символов. Под точностью представления символов понимается то, насколько точно высота, ширина, ориентация символа, тип шрифта, наклон и наклон базовой линии выводимого символа должны соответствовать заданным. Данная переменная может принимать одно из следующих значений:
      OUT_CHARACTER_PRECIS - не используется;
      OUT_DEFAULT_PRECIS - задает параметры масштабирования, используемые по умолчанию;
      OUT_DEVICE_PRECIS - сообщает процедуре масштабирования шрифтов о необходимости использования шрифта устройства, если в системе определены несколько шрифтов с одним и тем же именем;
      OUT_OUTLINE_PRECIS - сообщает процедуре масштабирования шрифтов о необходимости использования шрифтов TrueType и подобных им шрифтов. Это значение используется только в Windows NT;
      OUT_RASTER_PRECIS - сообщает процедуре масштабирования о необходимости использования растровых шрифтов, если в системе определены несколько шрифтов с одним и тем же именем;
      OUT_STRING_PRECIS - данная величина не используется процедурой масштабирования шрифтов, но она возвращается при нумерации растровых шрифтов;
      OUT_STROKE_PRECIS - в Windows NT данная величина не используется процедурой масштабирования шрифтов, но она возвращается при нумерации шрифтов TrueType и подобных им шрифтов, а также векторных шрифтов. В Windows 95 данная величина используется процедурой масштабирования шрифтов, и возвращается при нумерации шрифтов TrueType и векторных шрифтов;
      OUT_TT_ONLY_PRECIS - сообщает процедуре масштабирования шрифтов о необходимости использования только шрифтов TrueType. Если в системе не определены шрифты TrueType, процедура масштабирования шрифтов использует параметры, используемые по умолчанию;
      OUT_TT_PRECIS - сообщает процедуре масштабирования шрифтов о необходимости использования шрифтов TrueType, если в системе определены несколько шрифтов с одним и тем же именем. Приложение использует значения OUT_DEVICE_PRECIS, OUT_RASTER_PRECIS и OUT_TT_PRECIS для задания режима, в котором процедура масштабирования шрифтов выбирает шрифт при наличии в операционной системе нескольких шрифтов с одним и тем же именем. Например, если в операционной системе определены растровый и TrueType шрифты с именем Symbol, присваивание данной переменной значения OUT_TT_PRECIS заставляет процедуру масштабирования шрифтов выбрать версию TrueType. Присваивание значения OUT_TT_ONLY_PRECIS заставляет процедуру масштабирования шрифтов выбрать версию TrueType даже в том случае, когда ей придется для этого выбрать шрифт TrueType с другим именем.
    • lfClipPrecision - определяет точность процедуры отсечки. Под точностью процедуры отсечки понимают то, как поступать с символами, частично выходящими за область отсечки. Данная переменная может принимать одно из следующих значений:
      CLIP_DEFAULT_PRECIS - требует использовать процедуру отсечки, определенную по умолчанию;
      CLIP_CHARACTER_PRECIS - не используется;
      CLIP_STROKE_PRECIS - не используется процедурой масштабирования шрифтов, но возвращается при нумерации растровых, векторных или TrueType шрифтов. В Windows NT для совместимости эта величина всегда возвращается при нумерации шрифтов;
      CLIP_MASK - не используется;
      CLIP_EMBEDDED - этот флаг используется при работе с внедренными шрифтами, имеющими атрибут "только для чтения". CLIP_LH_ANGLES - определяет вращение всех шрифтов, происходящее по часовой или против часовой стрелки, в зависимости от направления осей системы координат. Если данная переменная не используется, то все шрифты устройств вращаются против часовой стрелки, но вращение всех других шрифтов будет зависеть от направления осей системы координат. Дополнительную информацию о направлении осей системы координат можно получить из описания переменной nOrientation;
      CLIP_TT_ALWAYS - не используется.
    • lfQuality - определяет качество выводимых символов. Качество выводимых символов определяет, с какой точностью интерфейс графических устройств (GDI) должен добиваться соответствия параметров логического шрифта параметрам используемого физического шрифта. Данная переменная может принимать одно из следующих значений:
      DEFAULT_QUALITY - качество выводимого шрифта не имеет значения;
      DRAFT_QUALITY - качество шрифта может быть хуже, чем при использовании значения PROOF_QUALITY. При использовании растровых шрифтов возможно использование масштабирования, что расширяет диапазон размеров шрифтов за счет снижения их качества. При необходимости синтезируются жирные, курсивные, подчеркнутые и зачеркнутые шрифты;
      PROOF_QUALITY - при выводе символов шрифта требуется обеспечить совпадение дополнительных параметров, кроме указанных в атрибутах логического шрифта. Для растровых шрифтов нельзя использовать операцию масштабирования и необходимо выбрать ближайший по размерам шрифт. Хотя при выборе размера шрифта может быть использован шрифт другого размера, значение PROOF_QUALITY обеспечивает более высокое качество отображения символов и отсутствие искажений при их выводе. При необходимости синтезируются жирные, курсивные, подчеркнутые и зачеркнутые шрифты.
    • lfPitchAndFamily - определяет, будет ли шрифт иметь фиксированную или переменную ширину литер, а также семейство, к которому принадлежит данный шрифт. Два наименее значимых бита определяют, будет ли шрифт иметь фиксированную или переменную ширину литер, и могут принимать одно из следующих значений: DEFAULT_PITCH, FIXED_PITCH и VARIABLE_PITCH. Биты с 4 по 7 данной переменной определяют семейство, к которому принадлежит данный шрифт, и могут принимать одно из следующих значений: FF_DECORATIVE, FF_DONTCARE, FF_MODERN, FF_ROMAN, FF_SCRIPT и FF_SWISS. Полное значение данной переменной получается с использованием операции логического ИЛИ между константой, определяющей ширину литер, и константой, определяющей семейство.
      Семейство шрифтов определяет их общее начертание. Оно используется для определения шрифтов при отсутствии более точного определения их начертания. Используемые в данном случае семейства шрифтов имеют следующие отличительные особенности:
      FF_DECORATIVE - нестандартный шрифт. Например Old English;
      FF_DONTCARE - начертание шрифта не имеет значение или неизвестно;
      FF_MODERN - шрифт с постоянной шириной штриха, имеющий или не имеющий засечек. К этим шрифтам относятся современные шрифты, такие как Pica, Elite и CourierNew;
      FF_ROMAN - шрифт с переменной шириной штриха (пропорциональный) имеющий засечки. Примером данного шрифта является Serif;
      FF_SCRIPT - шрифт подобный рукописному. Примером данного шрифта являются Script и Cursive;
      FF_SWISS - шрифт с переменной шириной штриха (пропорциональный) не имеющий засечек. Примером данного шрифта является Sans Serif.
    • lfFaceName - текстовая строка, завершающаяся нулем, содержащая имя шрифта. Длина данной строки не должна превышать 32 символа, включая завершающий ее нулевой символ. Для нумерации всех имен доступных шрифтов может использоваться функция EnumFontFamilies. Если строка lfFaceName пуста, GDI использует первый шрифт, соответствующий всем другим заданным атрибутам.

    Описание

    Объект структуры LOGFONT используется для задания атрибутов шрифта. 


    NMHDR

    typedef struct tagNMHDR
    {
       HWND hwndFrom;
       UINT idFrom;
       UINT code;
    } NMHDR;

    Переменные

    • hwndFrom - дескриптор окна элемента управления, пославшего извещение. Для преобразования дескриптора в указатель на объект класса CWnd используется функция CWnd::FromHandle.
    • idFrom - идентификатор элемента управления, пославшего извещение.
    • code - код извещения. Эта переменная может иметь значение, определяемое типом элемента управления, например, TBN_BEGINADJUST или TTN_NEEDTEXT, или может принимать одно из значений стандартных извещений, перечисленных ниже: NM_CLICK - пользователь щелкнул левой кнопкой мыши по элементу управления;
      NM_DBLCLK - пользователь дважды щелкнул левой кнопкой мыши по элементу управления;
      NM_KILLFOCUS - элемент управления потерял фокус ввода;
      NM_OUTOFMEMORY - элемент управления не может завершить операцию вследствие недостатка оперативной памяти;
      NM_RCLICK - пользователь щелкнул правой кнопкой мыши по элементу управления;
      NM_RDBLCLK - пользователь дважды щелкнул правой кнопкой мыши по элементу управления;
      NM_RETURN - данному элементу управления принадлежит в настоящее время фокус ввода и пользователь нажал клавишу ;
      NM_SETFOCUS - элемент управления получил фокус ввода.

    Описание

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


    OUTLINETEXTMETRIC

    typedef struct _OUTLINETEXTMETRIC
    {
       UINT otmSize;
       TEXTMETRIC otmTextMetrics;
       BYTE otmFiller;
       PANOSE otmPanoseNumber;
       UINT otmfsSelection;
       UINT otmfsType;
       int otmsCharSlopeRise;
       int otmsCharSlopeRun;
       int otmItalicAngle;
       UINT otmEMSquare;
       int otmAscent;
       int otmDescent;
       UINT otmLineGap;
       UINT otmsCapEmHeight;
       UINT otmsXHeight;
       RECT otmrcFontBox;
       int otmMacAscent;
       int otmMacDescent;
       UINT otmMacLineGap;
       UINT otmusMinimumPPEM;
       POINT otmptSubscriptSize;
       POINT otmptSubscriptOffset;
       POINT otmptSuperscriptSize;
       POINT otmptSuperscriptOffset;
       UINT otmsStrikeoutSize;
       int otmsStrikeoutPosition;
       int otmsUnderscoreSize;
       int otmsUnderscorePosition;
       PSTR otmpFamilyName;
       PSTR otmpFaceName;
       PSTR otmpStyleName;
       PSTR otmpFullName;
    } OUTLINETEXTMETRIC;

    Переменные

    • otmSize - содержит размер структуры OUTLINETEXTMETRIC в байтах.
    • otmTextMetrics - объект структуры TEXTMETRIC, содержащий дополнительную информацию о шрифте.
    • otmFiller - задает выравнивание структуры по границе байта.
    • otmPanoseNumber - определяет число PANOSE для данного шрифта.
    • otmfsSelection - содержит флаги шрифта. Разрядам данной переменной соответствуют следующие флаги:
      0 - наклонный;
      1 - подчеркнутый;
      2 - инвертированный;
      3 - контурный;
      4 - зачеркнутый;
      5 - полужирный.
    • otmfsType - определяет лицензионность шрифта. Лицензионный шрифт не должен изменяться или обмениваться. Если в данной переменной установлен бит 1, данный шрифт не может быть внедрен в документ. В противном случае шрифт может внедряться в документ. Если установлен бит 2, то разрешается внедрение данного шрифта в режиме "только для чтения".
    • otmsCharSlopeRise - определяет ориентацию текстового курсора. Если эта переменная равна 1, то текстовый курсор имеет вертикальную ориентацию. Приложение может использовать данную переменную и значение переменной otmsCharSlopeRun для создания текстовых курсоров для курсивных шрифтов, в которых курсор имеет тот же угол наклона, что и символы шрифта (угол определяется переменной otmItalicAngle).
    • otmsCharSlopeRun - определяет ориентацию текстового курсора. Если эта переменная равна 0, то текстовый курсор имеет вертикальную ориентацию. Приложение может использовать данную переменную и значение переменной otmsCharSlopeRise для создания текстовых курсоров для курсивных шрифтов, в которых курсор имеет тот же угол наклона, что и символы шрифта (угол определяется переменной otmItalicAngle).
    • otmItalicAngle - определяет угол наклона шрифта в десятых долях градуса против часовой стрелки от вертикального положения. Для регулярных шрифтов (roman) эта переменная имеет нулевое значение.
    • otmEMSquare - определяет горизонтальные и вертикальные размеры квадрата em данного шрифта в логических единицах (горизонтальные и вертикальные размеры квадрата em равны).
    • otmAscent - определяет максимальное расстояние от базовой линии до верхней точки любого символа шрифта.
    • otmDescent - определяет максимальное расстояние от базовой линии до нижней точки любого символа шрифта.
    • otmLineGap - определяет типографский межстрочный интервал.
    • otmsCapEmHeight - не используется.
    • otmsXHeight - не используется.
    • otmrcFontBox - определяет прямоугольник, описывающий символы шрифта.
    • otmMacAscent - определяет максимальное расстояние от базовой линии до верхней точки любого символа шрифта для компьютеров Macintosh.
    • otmMacDescent - определяет максимальное расстояние от базовой линии до нижней точки любого символа шрифта для компьютеров Macintosh.
    • otmMacLineGap - определяет типографский межстрочный интервал для компьютеров Macintosh.
    • otmusMinimumPPEM - определяет минимальный рекомендуемый размер данного шрифта в элементах изображения на квадрат em.
    • otmptSubscriptSize - определяет рекомендуемые горизонтальный и вертикальный размеры подстрочных символов данного шрифта.
    • otmptSubscriptOffset - определяет рекомендуемое горизонтальное и вертикальное смещение подстрочных символов данного шрифта. Смещение подстрочных символов шрифта измеряется от начала координат символа до начала координат подстрочного символа.
    • otmptSuperscriptSize - определяет рекомендуемые горизонтальный и вертикальный размеры верхних индексов символов данного шрифта.
    • otmptSuperscriptOffset - определяет рекомендуемое горизонтальное и вертикальное смещение верхних индексов данного шрифта. Смещение верхнего индекса шрифта измеряется от начала координат символа до начала координат верхнего индекса.
    • otmsStrikeoutSize - определяет ширину символа зачеркивания для данного шрифта. Обычно эта величина равна ширине em - подчеркивания в шрифте.
    • otmsStrikeoutPosition - определяет положение символа зачеркивания относительно базовой линии шрифта. Положительные значения означают расположение выше базовой линии, а отрицательные - ниже.
    • otmsUnderscoreSize - определяет ширину символа подчеркивания для данного шрифта.
    • otmsUnderscorePosition - определяет положение символа зачеркивания данного шрифта.
    • otmpFamilyName - определяет смещение строки, содержащей имя семейства шрифта, от начала структуры.
    • otmpFaceName - определяет смещение строки, содержащей имя начертания шрифта, от начала структуры (это имя должно соответствовать имени, определенному в объекте структуры LOGFONT).
    • otmpStyleName - определяет смещение строки, содержащей имя стиля шрифта, от начала структуры.
    • otmpFullName - определяет смещение строки, содержащей полное имя шрифта, от начала структуры. Данное имя является уникальным для данного шрифта и часто содержит имя версии или другую идентификационную информацию.

    Описание

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


    RGBQUAD

    typedef struct tagRGBQUAD
    { // rgbq
       BYTE rgbBlue;
       BYTE rgbGreen;
       BYTE rgbRed;
       BYTE rgbReserved;
    } RGBQUAD;

    Переменные

    • rgbBlue - определяет интенсивность синего цвета.
    • rgbGreen - определяет интенсивность зеленого цвета.
    • rgbRed - определяет интенсивность красного цвета.
    • rgbReserved - зарезервирована, должна иметь нулевое значение.

    Описание

    Объект структуры RGBQUAD содержит описание цвета интенсивностями его красной, зеленой и синей составляющих. Переменная bmiColors объекта структуры BITMAPINFO представляет собой массив объектов структуры RGBQUAD. Описание данной структуры содержится в файле заголовка wingdi.h.