Шрифт. Классификация, параметры шрифта, установка в контексте устройства.
Существует 2 категории шрифтов: встроенные шрифты устройства и шрифты GDI, которые можно создать самостоятельно при помощи функции CreateFont. Шрифты устройства соответствуют конкретному устройству вывода.
Контекст устройства определяет шрифт, который используется при выводе текста в рабочую область. По умолчанию задается системный шрифт (system font) или SYSTEM_FONT. В данном приложении для создания логического шрифта используется функция CreateFontIndirect:
CreateFontIndirect ( &MyFont );
где &MyFont – указатель на структуру LOGFONT, с помощью которой задается логический шрифт.
Структура LOGFONT
Поле | Описание |
lfHeight | Высота шрифта, логических единиц |
lfWidth | Ширина шрифта, логических единиц |
lfEscapement | Угол нанесения текста - угол между базовой линией текста и горизонталью (десятые доли градуса) |
lfOrientation | Наклон символов (десятые доли градуса) |
lfWeight | Толщина линий начертания шрифта ("жирность") |
lfItalic | Ненулевое значение означает курсив |
lfUnderline | Ненулевое значение означает подчеркивание |
lfStrikeOut | Ненулевое значение означает перечеркнутый шрифт |
lfCharSet | Номер набора символов шрифта - таблицы кодировки |
lfOutPrecision | Параметр, определяющий соответствие запрашиваемого шрифта и имеющегося в наличии |
lfClipPrecision | Параметр, определяющий способ "обрезания" изображения литер при их выходе за пределы области ограничения вывода |
lfQuality | Качество воспроизведения шрифта |
lfPitchAndFamily | Это поле определяет, будет ли шрифт иметь фиксированную или переменную ширину литер, а также семейство, к которому принадлежит шрифт |
lfName | Имя шрифта |
Параметры шрифта задаются в данной структуре следующим образом:
|
|
LOGFONT MyFont;
sprintf(MyFont.lfFaceName,"Courier New"); //имя шрифта
MyFont.lfEscapement=-10*A-900;// угол наклона
MyFont.lfHeight=75;// высота
MyFont.lfCharSet=ANSI_CHARSET;//кодировка
MyFont.lfOutPrecision=OUT_DEFAULT_PRECIS;//точность вывода
MyFont.lfсредняя ширина
MyFont.lfWeight=600; // толщина
MyFont.lfItalic = false;// курсив
MyFont.lfUnderline = false;//подчеркивание
MyFont.lfStrikeOut = false;//зачеркивание
Атрибуты контекста устройств, влияющие на вывод текста
При рисовании на экране приложение получает дескриптор контекста устройства с помощью функции BeginPaint при обработке сообщения WM_PAINT и освобождает его перед завершением обработки сообщения, вызвав функцию EndPaint. При обработке других сообщений контекст должен быть получен с помощью функции GetDC, а после завершения процедуры рисования перед выходом из обработчика сообщений следует освободить полученный контекст, вызвав функцию ReleaseDC.
В нашем приложении это выглядит так:
HDC hdc;// описатель контекста устройства
PAINTSTRUCT ps;
case WM_CHAR:{
hdc = GetDC(hWnd);
. . .
|
|
ReleaseDC(hWnd, hdc);
}; break;
case WM_PAINT:{
hdc = BeginPaint(hWnd, &ps);
. . .
EndPaint(hWnd, &ps);};
break;
Методы GDI вывода текста
GDI (интерфейс графического устройства) – набор функций, данных и структур, которые позволяют программе нормально работать на любых графических устройствах отображения, т.е. отделить программу от конкретных характеристик устройства.
Для вывода текста можно использовать функцию BOOL TextOut. В нашем приложении это выглядит так:
TextOut(hdc,xc, yc, &ch, 1); где xc и yc – координаты начальной позиции строки, &ch – указатель на симовол, полученный по нажатию клавиши из wParam, 1 – длина строки.
Управление направлением, размером и расстоянием между символами
определить параметры самого шрифта с помощью функции CreateFont().
CreateFont(высота,ширина,угол наклона (в 1/10 градуса),поворот базы относительно 0Х,жирность (FW_NORMAL=400; FW_HEAVY=900),
Курсив,подчёркнутый,зачёркнутый,character set identifier,
Точность(меткость вывода), точность сжатия. Соединения,как выравнивать и придерживаться лог. атр. Текста,pitch and family
,typeface name);
Основы построения и использования вычислительных процессов в Windows
Создание процесса
Процесс создается при вызове приложением функции CreateProcess.[1]
|
|
BOOL CreateProcess(
LPCTSTR lpApplicationName, // указатель на имя исполняемого модуля
LPTSTR lpCommandLine, // указатель на командную строку
LPSECURITY_ATTRIBUTES lpProcessAttributes, // атрибуты безопасности процесса
LPSECURITY_ATTRIBUTES lpThreadAttributes, // атрибуты безопасности потока
BOOL bInheritHandles, // флаг наследования дескрипторов
DWORD dwCreationFlags, // дополнительные параметры создания процесса
LPVOID lpEnvironment, // указатель на блок переменных окружения
LPCTSTR lpCurrentDirectory, // указатель на текущий каталог
LPSTARTUPINFO lpStartupInfo, // указатель на структуру STARTUPINFO
LPPROCESS_INFORMATION lpProcessInformation // указатель на PROCESS_INFORMATION
);
Когда приложением вызывается функция CreateProcess, система создает объект ядра “процесс” (process kernel object) с начальным значением счетчика числа пользователей, равным единице. Этот объект – компактная структура данных, через которую операционная система управляет процессом. Затем система создает для нового процесса виртуальное адресное пространство размером 4 Гб и загружает в него код и данные как исполняемого файла, так и любых динамически подключаемых библиотек.
После этого система создает объект ядра “поток” (со счетчиком числа пользователей, равным единице) для управления первичным потоком нового процесса.
|
|
Описатель процесса
При инициализации процесса система создает в нем таблицу описателей, используемую только для объектов ядра. Сведения о структуре этой таблицы и управлении ею незадокументированы. Значение описателя представляет собой индекс в таблице описателей, принадлежащей процессу, и таким образом идентифицирует место, где хранится информация, связанная с объектом ядра.
Командная строка процесса
При создании новому процессу передается командная строка, которая почти никогда не бывает пустой — как минимум, она содержит имя исполняемого файла, использованного при создании этого процесса. Однако, возможны случаи, когда процесс получает командную строку, состоящую из единственного символа — нуля, завершающего строку. В момент запуска приложения стартовый код из библиотеки С++ считывает командную строку процесса, пропускает имя исполняемого файла и заносит в параметр pszCmdLine функции (w)WinMain указатель на оставшуюся часть командной строки.
Параметр pszCmdLine всегда указывает на ANSI-строку. Но, заменив WinMain на wWinMain, Вы получите доступ к Unicode-версии командной строки для своего процесса.
Программа может анализировать и интерпретировать командную строку как угодно. Указатель на полную командную строку процесса можно получить и вызовом функции GetCommandLine.
PTSTR GetCommandLine();
Она возвращает указатель на буфер, содержащий полную командную строку, включая полное имя (вместе с путем) исполняемого файла.
Во многих приложениях безусловно удобнее использовать командную строку, предварительно разбитую на отдельные компоненты, доступ к которым приложение может получить через глобальные переменные __argc и __argv (или __wargv). Функция CommandLineToArgvW расщепляет Unicode-строку на отдельные компоненты:
PWSTR CommandLineToArgvW( PWSTR pszCmdLine, int* pNumArgs );
Буква W в конце имени этой функции намекает на "широкие" (wide) символы и подсказывает, что функция существует только в Unicode-версии. Параметр pszCmdLine указывает на командную строку. Его обычно получают предварительным вызовом GetCommandLineW. Параметр pNumArgs — это адрес целочисленной переменной, в которой задается количество аргументов в командной строке. Функция CommandLineToArgvW возвращает адрес массива указателей на Unicode-строки.
Среда процесса.
С любым процессом связан блок переменных окружения — область памяти, выделенная в адресном пространстве процесса. Каждый блок содержит группу строк такого вида
VarName1=VarValue1\0
VarName2=VarValue2\0
...
VarNameX=VarValueX\0
\0
Первая часть каждой строки — имя переменной окружения. За ним следует знак равенства и значение, присваиваемое переменной. Строки в блоке переменных окружения должны быть отсортированы в алфавитном порядке по именам переменных.
Конец блока переменных окружения помечается дополнительным нулевым символом.
Переменные окружения обычно применяются для тонкой настройки приложения. Пользователь создает и инициализирует переменную окружения, затем запускает приложение, и оно, обнаружив эту переменную, проверяет ее значение и соответствующим образом настраивается.
GetEnvironmentVariable позволяет выявлять присутствие той или иной переменной окружения и определять ее значение:
DWORD GetEnvironmentVariable( PCTSTR pszName, PTSTR pszValue, DWORD cchValue);
При вызове GetEnvironmentVariable параметр pszName должен указывать на имя интересующей Вас переменной, pszValue — на буфер, в который будет помещено значение переменной, а в cchValue следует сообщить размер буфера в символах. Функция возвращает либо количество символов, скопированных в буфер, либо 0, если ей не удалось обнаружить переменную окружения с таким именем.
функция SetEnvironmentVariable позволяет добавлять, удалять и модифицировать значение переменной.
DWORD SetEnvironmentVariable(
PCTSTR pszName,
PCTSTR pszValue);
Она устанавливает ту переменную, на чье имя указывает параметр pszName, и присваивает ей значение, заданное параметром pszValue. Если такая переменная уже существует, функция модифицирует ее значение. Если же в pszValue содержится NULL, переменная удаляется из блока.
Дата добавления: 2019-02-13; просмотров: 277; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!