Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Паппас К., Мюррей У. - Visual C++ 6. Руководство разработчика - 2000

.pdf
Скачиваний:
290
Добавлен:
13.08.2013
Размер:
4.96 Mб
Скачать

Под гарнитурой шрифта понимают совокупность элементов, определяющих внешний вид его символов. Отличительными особенностями любой гарнитуры являются толщина линий и наличие засечек (маленьких линий по нижнему и верхнему краям символа, с помощью которых оформляется его основной контур, как, например, в букве 'М'). Выше уже отмечалось, что шрифт включает весь набор печатных символов определенной гарнитуры, размера и начертания (курсивное, полужирное и т.п.). Как правило, система содержит широкий набор стандартных шрифтов, которые могут использоваться всеми приложениями. Поэтому шрифты редко компилируют в качестве ресурсов в исполняемый файл.

Функция CreateFont( )

Функция CreateFontOобъявлена в файле WINDOWS.H. Она выбирает из набора физических GDI-шрифтов тот шрифт, который наиболее точно соответствует характеристикам, указанным при ее вызове. Созданный логический шрифт может использоваться любыми устройствами. Функция CreateFontOимеет следующий синтаксис:

CreateFont(высота, ширина, ориентация, наклон, толщина, курсив, подчеркивание, зачеркивание, набор_символов, точность_вывода, точность_отсечения, качество, интервал_и_семейство, название)

Краткое описание параметров функции CreateFont() дано в табл. 19.1.

Таблица 19.1. Параметры функции CreateFont()

Параметр

Описание

 

 

 

(int)

высота

Высота символов в логических единицах

 

 

 

(int)

ширина

Средняя ширина символов в логических единицах

 

 

 

(int)

ориентация

Угол наклона строки (в десятых долях градуса) относительно горизонтальной оси; 0 —

слева направо, 900 (90°) — по вертикали снизу вверх, 1800 (180°) — справа налево, 2700

 

 

(270°) — по вертикали сверху вниз

 

 

 

(int) наклон

Угол наклона символов (в десятых долях градуса) относительно горизонтальной оси; 0 —

нормальное отображение, 900 — поворот на 90° против часовой стрелки, 1800 —

 

 

перевернутое отображение, 2700 — поворот на 90° по часовой стрелке

(int) толщина

Толщина шрифта (от 0 до 1000); значение 400 (fw_normal) соответствует нормальному начертанию, 700 (fw_bold) — полужирному

(DWORD) курсив

Курсивное начертание, если параметр не равен нулю

(DWORD) подчеркивание Подчеркивание символов, если параметр не равен нулю (DWORD) зачеркивание Зачеркивание символов, если параметр не равен нулю

(DWORD)

набор_символов

(DWORD)

точность_вывода

(DWORD)

точность_отсечения

(DWORD) качество

(DWORD)

интервал_и_семейство

Набор символов; возможные константы: ANSI_CHARSET— стандартные ANSI-символы, oem_charset — системно-зависимый набор, russian_charset— русские символы, hebrew_charset— иврит и т.д.

Допустимая степень соответствия подобранного системой физического шрифта заданным установкам; некоторые из возможных констант: out_default_precis — стандартный режим подстановки, out_tt_precis— при наличии нескольких шрифтов с одинаковым названием выбирается контурный (TrueType), out_device_precis— при наличии нескольких шрифтов с одинаковым названием выбирается аппаратный

Способ отсечения символов, частично выходящих за границы области отсечения;

возможные константы: clip_default_precis— стандартный режим, clip_character_precis—

отсекается весь символ, clip_stroke_precis— отсекается часть символа (с точностью до штриха) и т.д.

Требуемое качество выводимого шрифта; возможные константы: default_quality— вид шрифта не имеет значения, draft_quality— качество вывода играет минимальную роль, допускается масштабирование растровых шрифтов, PROOF_QUALITY— качество вывода важнее, чем соответствие логическим атрибутам шрифта, а масштабирование растровых шрифтов недопустимо — выбирается наиболее близкий по размеру шрифт

В двух младших битах задается межсимвольный интервал шрифта; возможные константы: default_pitch — интервал не известен или не имеет значения, fixed_pitch— фиксированный интервал, fixed_pitch— переменный интервал (пропорциональный шрифт). В четырех старших битах определяется семейство, к которому относится шрифт; возможные константы: ff_dontcare— семейство не известно или не имеет значения, ff_roman— шрифт с засечками, с переменной шириной символов, FF_SWISS— шрифт без засечек, с переменной шириной символов, ff_modern— шрифт с постоянной шириной символов, с

засечками или без таковых FF SCRIPT— шрифт напоминающий рукописный

351

 

 

 

ff_decorative— декоративный шрифт

 

 

(LPCTSTR) название

Строка, содержащая название гарнитуры шрифта

 

 

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

Во второй раз функция CreateFont() вызывается следующим образом:

newfont.CreateFont(12,12,900,900,FW_BOLD, FALSE, FALSE, FALSE,

OEM_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAOLT_PRECIS, DEFAULT_QDALITY,

VARIABLE_PITCH | FF_ROMAN, "Roman");

Как видите, изменены только параметры ориентации строки и наклона символов. Оба параметра измеряются в десятых долях градуса, поэтому наклону в 90 градусов соответствует значение 900. Этот шрифт используется для вывода подписи к вертикальной оси гистограммы. А вот как осуществляется вывод строки:

oldfont = dc.SelectObject(Snewfont);

dc.TextOut(50, 200+(strlen(szXString)*10/2), szYString, strlen(szYString));

Рисование осей координат и столбцов

Координатные оси х и у выводятся на экран с помощью функций MoveTo() и LineTo():

// Рисование осей координат dc.MoveTo(99,49); dc.LineTo(99,350); dc.LineTo(500,350); dc.MoveTo(99,350);

Затем выполняются действия по подготовке к выводу столбцов гистограммы. Как видно из следующего фрагмента программы, первый столбец всегда начинается с точки 100,350, на что указывают значения переменных x1 и y1. Горизонтальная координата всех последующих столбцов вычисляется на основании координаты предыдущего столбца и ширины столбцов.

// Начальные значения xl= 100;

yl = 350;

х2 = xl + iBarWidth;

Информация о высоте столбцов хранится в массиве iBarSizeScaled. Поскольку функция Rectangle() создает замкнутые фигуры, то полученный столбец можно заполнить цветом, воспользовавшись текущей кистью. Цвет кисти выбирается из массива dwColor, причем номер столбца соответствует номеру цвета в массиве.

//Рисование столбцов for(i= 0; i < iNBars; i++)

{

newbrush.CreateSolidBrush(dwColor[ i ]) ; oldbrush = dc.SelectObject(Snewbrush); y2 = 350 - iBarSizeScaledfi]; dc.Rectangle(xl,yl,x2,y2);

xl = x2;

x2 +- iBarWidth;

//удаление кисти dc.SelectObject(oldbrush);

352

newbrush.DeleteObject() ; }

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

Запуск программы

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

Рис. 19.11. Гистограмма, выводимая аналогичной программой по умолчанию

353

Рис. 19.12. Гистограмма, созданная на основании пользовательских данных

354

Глава 20. Мастера AppWizard и ClassWizard

Программа Graph

o Мастер приложений

o Мастер классов

o Построение приложения

oВывод данных в окно

Текстовый редактор

oПостроение приложения

Впредьщущих четырех главах вы узнали, как создаются приложения для 32-разрядных версий Windows95, 98 и NT с использованием методов как процедурного, так и объектноориентированного программирования с применением библиотеки MFC . Указанные главы были посвящены, главным образом, работе с программными шаблонами, благодаря которым программист может задействовать однотипные, часто повторяющиеся блоки в разных приложениях, не набирая их каждый раз по-новому. Но речь шла лишь об одном типе шаблонов — статических шаблонах, переносимых из одного приложения в другое вручную.

Однако часто этого бывает недостаточно. Конечно, если в новую программу необходимо внедрить лишь средства ввода/вывода, скажем создания, открытия и сохранения файлов, можно воспользоваться статическими шаблонами. Они же помогут вам и в тех случаях, когда в приложение нужно добавить стандартное меню с обычными командами — Cut, Copy, Paste и прочими. Но давайте расширим наши требования к программе. Предположим, нам необходимо создать MDI-приложение (MultipleDocumentInterface— многодокументный интерфейс), поддерживающее работу с несколькими документами, или добавить в программу поддержку технологии OLE. В этом случае одного статического шаблона будет недостаточно.

Специалисты Microsoft решили создать универсальный генератор динамических шаблонов, так называемый мастер AppWizard. Он тесно связан с библиотекой MFC и генерирует объектноориентированный код. Чтобы запустить мастер, необходимо в меню File активизировать команду New, а затем в раскрывшемся диалоговом окне выбрать из списка опцию MFC AppWizard. Мастер позволит вам самостоятельно определить функциональные возможности, которыми должна обладать программа. При этом у вас останется возможность модифицировать программу по своему усмотрению.

Близким "родственником" мастера AppWizardявляется другой мастер, ClassWizard. С его помощью можно добавить в приложение новый класс или отредактировать существующий. Часто мастер ClassWizardиспользуют для редактирования программного кода, созданного перед этим с применением мастера AppWizard. Мастер классов запускается командой

ClassWizard из меню View.

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

Программа Graph

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

Мастер приложений

355

В окне компилятора MicrosoftVisualC++ в меню Fileвыберите команду New. Перед вами откроется диалоговое окно (рис. 20.1), с помощью которого можно начать новый проект, выбрав в списке элемент MFC AppWizard ,(exe). Присвойте новому проекту имя Graph, задайте каталог проекта и щелкните на кнопке ОК.

Рис. 20.1. Выбор типа проекта

Первое, что нужно будет сделать дальше, — это указать мастеру, должно ли приложение поддерживать работу с одним документом, с несколькими документами или же это будет диалоговое окно (рис. 20.2).

356

Рис.20.2. Шаг 1: выбор опции Single Document

SDI-приложение, поддерживающее работу с одним документом, создать проще всего, поскольку в этом случае не нужно учитывать взаимодействия между разными документами, одновременно открытыми одним приложением. Убедитесь, что установлена опция Document/View architecture support?. При этом можно принять язык ресурсов, предлагаемый по умолчанию. Чтобы перейти к следующему окну мастера, показанному на рис. 20.3, щелкните на кнопке Next.

357

Рис. 20.3. Шаг 2: выбор опции None для отключения поддержки баз данных

Установки во втором окне мастера делаются только в том случае, если в приложении будет осуществляться работа с базами данных. В нашем примере следует оставить опцию None. Щелкните на кнопке Next, и вы перейдете к третьему окну (рис. 20.4).

358

Рис. 20.4. Шаг 3: составные документы не поддерживаются

Теперь можно выбрать тип OLE-приложения (контейнер или сервер) а также задать другие опции, относящиеся к технологии OLE или ActiveX. Оставьте активной опцию None и щелкните на кнопке Next, чтобы перейти к следующему окну (рис. 20.5).

Рис. 20.5. Шаг 4: выбор дополнительных функциональных возможностей

Четвертое окно мастера позволяет добавлять в программу различные средства, определяющие интерфейс приложения (например, панель инструментов или строку состояния). Задавать какие-либо дополнительные возможности мы пока не будем, поэтому щелкните на кнопке Next, чтобы перейти к пятому окну мастера (рис. 20.6).

359

Рис. 20.6. Шаг 5: выбор стиля окна приложения, добавление комментариев и выбор способа компоновки библиотеки MFC

Установите опции так, как показано на рис. 20.6, а затем щелкните на кнопке Next, и вы перейдете к шестому окну мастера (рис. 20.7).

360

Соседние файлы в предмете Программирование на C++