Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Янг Майкл Дж. -> "Visual С++ 6. Полное руководство: В 2 т.(том2)" -> 37

Visual С++ 6. Полное руководство: В 2 т.(том2) - Янг Майкл Дж.

Янг Майкл Дж. Visual С++ 6. Полное руководство: В 2 т.(том2) — Бином, 2006. — 530 c.
Скачать (прямая ссылка): vicualcc2006t2.djvu
Предыдущая << 1 .. 31 32 33 34 35 36 < 37 > 38 39 40 41 42 43 .. 173 >> Следующая

1. Отображение обычного диалогового окна Font.
2. Передача описания шрифта (на основании информации, введенной в диалоговое окно Font) в функцию CFont: :CriateFontlndirect для инициализации объекта шрифта mFont.
3. Запись описания шрифта в последовательность строк, сохраняемую в массиве
m_lineTable.
4. Создание объекта контекста устройства и выбор в нем объекта шрифта.
5. Вызов функции GetTextMetrics объекта контекста устройства для получения свойств активного шрифта устройства. Функция GetTextMetrics копирует эту информацию в структуру TEXTMETRIC.
6. Запись информации о свойствах активного шрифта в последовательность строк, сохраняемых в массиве m__LineTable.
7. Вызов функции UpDateAllviews для принудительного отображения функцией OnDraw класса представления строк текста, содержащихся в массиве m_LineTable, с использованием нового шрифта.
Диалоговое окно Font — это одно из обычных диалоговых окон, предоставляемых Windows (см. гл. 15). Диалоговое окно Font отображается при создании локального объекта MFC-класса CFontDialog и последующем вызове функции DoModal. Если отменить диалоговое окно, то функция DoModal возвратит значение IDCANCEL и сразу же выйдет из функции OnOptionsFont:
// отображение диалогового окна Font: CFontDialog FontDialog if (FontDialog.DoModal () != IDOK) return;
Примечание
Диалоговое окно Font, отображаемое программой TextDemo, позволяет выбрать любые шрифты, доступные для экрана Windows. Альтернативное диалоговое окно Font используется
для отображения шрифтов, доступных определенному принтеру. Шрифт в диалоговом окне Font можно настроить различными способами. Подробную информацию можно найти в следующих разделах справочной системы: Visual С++ Documentation, Reference, Microsoft Foundation Class Library and Templates, Microsoft Foundation C/ass Library, Class Library Reference, CFontDialog.
Если закрыть диалоговое окно Font щелчком на кнопке ОК, то функция DoModal возвратит значение IDOK. После этого функция OnOptionsFont вызывает функцию CFontDialog и обращается к переменным класса CFontDialog для получения информации о выбранном шрифте. Функция CFontDialog: :GetColor обычно вызывается для получения значения выбранного цвета шрифта. При этом указанное значение сохраняется в элементе CTextDemoDoc: :m_Color, используемом функцией OnDraw для установки цвета шрифта.
m_Color = FontDialog.GetColor (); // получение цвета,
// выбранного пользователем
Примечание
Несмотря на то, что цвет шрифта выбирается в диалоговом окне Font, все же он не является свойством окна. Скорее - это атрибут текста, присваиваемый объекту контекста устройства
при вызове функции CDC : : SetTextColor.
Функция OnOptionsFont вызывает функцию CFontDialog: -.GetFaceName для получения названия шрифта, выбранного в списке Font одноименного диалогового окна, а также функцию CFongDialog: :GetSize для получения размера шрифта, выбранного в списке Size. Оба значения записываются в массив mLineTable для отображения в окне представления.
m_LineTable [Num++] = "Font Name: " + FontDialog.GetFaceName ();
m_LineTable [Num] = "Font Size: ";
char NumBuf [18];
sprintf
(NumBuf, "%d.%d points",
FontDialog.GetSize () / 10,
FontDialog.GetSize () % 10) ; m_LineTable [Num++] += NumBuf;
Функция OnOptionsFont получает полное описание выбранного шрифта из переменной CFontDialog: :m_lf, являющейся структурой LOG FONT (стандартная структура Windows). Структура logfont используется для инициализации объекта шрифта mFont с помощью таких операторов.
m_Font.DeleteObject () ;
m_Font.CreateFontlndirect (SFontDialog.m_lf);
Обращение к функции CFont: : DeleteOb j ect удаляет существующую информацию о шрифте из объекта шрифта в том случае, если данный объект был предварительно инициализирован предшествующим запросом OnOptionsFont. Если объект шрифта не был предварительно инициализирован, то вызов DeleteOb j ect бесполезен, но безопасен. Передача структуры LOGFONT в функцию
CFont::CreateFontlndirect инициализирует (возможно, повторно) объект шрифта описанием вновь выбранного шрифта. После вызова функции CreateFontlndirect информация о шрифте хранится внутри объекта шрифта, который можно выбрать в объекте контекста устройства и, как следствие, отобразить текст с использованием соответствующего шрифта.
Совет
Каждый раз после инициализации объекта шрифта вызовом функции CFont: :CreateFontlndirect (или CFont: :CreateFont) можно получить текущую информацию о шрифте, записанную в соответствующем объекте шрифта. Для этого следует вызвать функцию
CGdiObj ect: : GetObj ect, копирующую Эту информацию В Структуру LOGFONT.
Затем функция OnOptionsFont записывает значение каждого поля структуры LOGFONT в строку m_LineTable, и они становятся доступными для отображения в окне представления.
m_LineTable [Num++] = "LOGFONT fields:";
m_LineTable [Num] = "lfHeight: ";
sprintf (NumBuf, "%d", FontDialog.m_lf. lfHeight) ;
m_LineTable [Num++] += NumBuf;
m_LineTable [Num] = "lfWidth: ";
sprintf (NumBuf ,"%d",FontDialog.m_lf.lfWidth) ;
Предыдущая << 1 .. 31 32 33 34 35 36 < 37 > 38 39 40 41 42 43 .. 173 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100