Графический интерфейс GDI в Microsoft Windows (2)


Формат bmp файлов Presentation Manager


Таблица 5
Таблица 5Значение biBitCount Размер таблицы цветов 12416825624не используетсяЕсли содержимое поля biClrUsed отлично от нуля, используется таблица цветов уменьшенного размера. В ней описаны только...
Формат bmpфайлов Presentation Manager
Формат bmp-файлов Presentation ManagerОболочка Presentation Manager операционной системы OS/2 использует другой формат bmp-файла (Рисунок 4.5)....
Рис 4 5 Формат bmpфайла для Presentaton Manager операционной системы OS/2 версии 1 х
Рис 4.5. Формат bmp-файла для Presentaton Manager операционной системы OS/2 версии 1.хВ самом начале файла расположена структура BITMAPFILEHEADER. Ее формат полностью соответствует формату аналоги...
Таблица 6
Таблица 6ПолеОписаниеbcSizeРазмер структуры BITMAPCOREHEADER в байтах bcWidthШирина битового изображения в пикселах bcHeightВысота битового изображения в пикселах bcPlanesКоличество плоскостей в б...
Биты изображения
Биты изображенияФормат области битов изображения одинаковый для некомпрессованых bmp-файлов Windows и bmp-файлов Presentation Manager (оболочка Presentation Manager операционной системы OS/2 верси...
Рис 4 6 Изображение в окне Windows
Рис 4.6. Изображение в окне WindowsВ отличие от изображений DDB, при работе с изображениями DIB используется система координат, начало которой расположено в левом нижнем углу, а координатные оси н...
4 4 Рисование изображений DIB
4.4. Рисование изображений DIB Процесс рисования изображений DIB включает в себя несколько этапов. Сначала необходимо загрузить bmp-файл в оперативную память и убедиться в том, что этот файл дейст...
Загрузка bmpфайла и проверка заголовков
Загрузка bmp-файла и проверка заголовковВы можете загрузить в оперативную память весь bmp-файл сразу или вначале только заголовки, а затем таблицу цветов и биты изображений. В приложении BMPINFO,...
Таблица 7
Таблица 7ПолеКритерии проверкиbiPlanesДолжно содержать значение 1 biBitCount Может быть равно 1, 4, 8 или 24.Вы можете столкнуться с новыми 16- и 32-битовыми форматами файлов DIB, используемых в W...
Создание цветовой палитры
Создание цветовой палитры Процесс создания цветовой палитры несложен. Вначале надо убедиться в том, что bmp-файл содержит таблицу цветов. Если размер таблицы цветов не равен нулю, следует заказать...
Рисование DIB
Рисование DIBЕсли отображаемый bmp-файл содержит таблицу цветов, и на предыдущем этапе была создана палитра, ее следует выбрать в контекст отображения и реализовать: hOldPal = SelectPalette(hdc, h...
Преобразование DDB в DIB
Преобразование DDB в DIBЕсли перед вами встанет задача преобразования DDB в DIB (например, для последующей записи изображения в bmp-файл), вам не обойтись без функции GetDIBits : int WINAPI GetDIB...
4 5 Приложение BMPINFO
4.5. Приложение BMPINFOПосле всего сказанного выше у вас могло сложиться впечатление, что процедура рисования изображений DIB значительно труднее, чем процедура рисования файлов DDB. В самом деле,...
Рис 4 7 Главное окно приложения BMPINFO
Рис 4.7. Главное окно приложения BMPINFOВыбрав из меню "File" строку "Info...", вы можете просмотреть информацию о файле, такую, как размер файла и заголовка, формат файла, раз...
Рис 4 8 Информация о bmpфайле
Рис 4.8. Информация о bmp-файлеЕсли выбранный bmp-файл имеет формат Presentation Manager, на экране появится диалоговая панель, аналогичная изображенной на Рисунок 4.8. Основной файл исходных текс...
DIBSelectFile
DIBSelectFileЭта функция выводит на экран стандартную диалоговую панель "Open", с помощью которой можно выбрать bmp-файл. Функция возвращает идентификатор открытого файла или NULL, если...
DIBReadFile
DIBReadFileС помощью этой функции открытый файл читается в глобальный блок памяти. Этот блок заказывается непосредственно перед чтением, причем его размер соответствует размеру файла. В случае усп...
DIBInfo
DIBInfoФункция выводит информацию о загруженном изображении DIB. Идентификатор блока памяти, содержащего файл изображения, передается этой функции в качестве первого параметра. Через второй параме...
DIBType
DIBTypeФункция получает в качестве параметра идентификатор блока памяти, содержащего загруженный файл изображения DIB. Она определяет его формат и выполняет проверку полей структур заголовка. Если...
DIBNumColors
DIBNumColorsЭта функция определяет размер таблицы цветов. Если изображение DIB содержит таблицу цветов уменьшенного размера, возвращается размер таблицы из поля biClrUsed структуры BITMAPINFOHEADE...
DIBHeight
DIBHeightФункция возвращает высоту изображения DIB в пикселах как значение поля biHeight структуры BITMAPINFOHEADER....
DIBWidth
DIBWidthФункция возвращает ширину изображения DIB в пикселах как значение поля biWidth структуры BITMAPINFOHEADER....
DIBFindBits
DIBFindBitsЭта функция возвращает адрес массива бит изображения. В качестве параметра ей необходимо передать адрес зафиксированного блока памяти, содержащего загруженный файл изображения....
DIBPaint
DIBPaintЭта функция рисует изображение DIB. Первый параметр определяет контекст отображения. Второй и третий - координаты верхнего левого угла прямоугольной области, в которой будет нарисовано изо...
DIBPaintBlt
DIBPaintBltФункция аналогична предыдущей, однако перед рисованием выполняется преобразование DIB в DDB. Далее преобразованное изображение выводится через контекст памяти в контекст отображения при...
DIBCreatePalette
DIBCreatePaletteФункция создает логическую палитру на базе таблицы цветов изображения DIB, возвращая идентификатор созданной палитры или NULL при ошибке. Если DIB не содержит таблицу цветов, палит...
5 Шрифты
5. Шрифты5.1. Классификация шрифтов5.2. Выбор шрифта в контекст отображения5.3. Приложение FONTVIEW5.4. Получение информации о шрифтеНе секрет, что своей популярностью операционная система Windows...
5 1 Классификация шрифтов
5.1. Классификация шрифтовПеред тем, как двигаться дальше, нам необходимо уточнить некоторые понятия и термины, связанные со шрифтами. Можно сказать, что шрифт состоит из изображений (рисунков) от...
Рис 5 1 Рисунки символов
Рис 5.1. Рисунки символовГлифы могут иметь различный внешний вид (typeface). Операционная система Windows классифицирует шрифты на несколько типов, или семейств (font family). Эти типы называются...
Таблица 1
Таблица 1СемействоНазвание шрифта Пример текстаModern CourierШрифт в стиле Modern Roman TimesШрифт в стиле Roman Swiss HelveticaШрифт в стиле Swiss Script Script CyrillicШрифт в стиле ScriptDecora...
Таблица 2
Таблица 2НачертаниеОбразец шрифта NormalAaBbCcDdEeFfGgHhIiJjKkLl АаБбВвГгДдЕеЖжЗзИиКкЛлМмНн BoldAaBbCcDdEeFfGgHhIiJjKkLl АаБбВвГгДдЕеЖжЗзИиКкЛлМмНн ItalicAaBbCcDdEeFfGgHhIiJjKkLl АаБбВвГгДдЕеЖжЗзИ...
5 2 Выбор шрифта в контекст отображения
5.2. Выбор шрифта в контекст отображения Для того чтобы написать строку текста заданным шрифтом, этот шрифт следует, подобно остальным объектам GDI, выбрать в контекст отображения. После этого фун...
Выбор встроенного шрифта
Выбор встроенного шрифта По умолчанию в контекст отображения при его создании выбирается системный шрифт, основным (и почти единственным) преимуществом которого является то, что он всегда доступен...
Таблица 3
Таблица 3ИдентификаторОписаниеSYSTEM_FONT Системный шрифт в кодировке ANSI с переменной шириной букв, используется операционной системой Windows для отображения текста в меню, заголовках окон и ди...
Определение логического шрифта
Определение логического шрифтаЕсли приложение ограничивает себя только встроенными шрифтами, оно не сможет воспользоваться всем многообразием созданных масштабируемых шрифтов и даже просто не смож...
LfHeight
lfHeightВысота шрифта в логических единицах (зависят от установленного режима отображения). Можно указывать положительные и отрицательные значения, а также нуль. Если указано нулевое значение, выб...
LfWidth
lfWidthШирина символов в логических единицах. Если указано нулевое значение, используется значение по умолчанию, которое зависит от высоты шрифта и отношения масштабов по осям координат (aspect ra...
LfEscapement
lfEscapementУгол между базовой линией шрифта и координатной осью X в десятых долях градуса (угол отсчитывается в направлении против часовой стрелки). Если в процессе отображения логического шрифта...
LfOrientation
lfOrientationЭто поле определяет ориентацию символов шрифта. К сожалению, операционная система Windows версии 3.1 игнорирует поле lfOrientation....
LfWeight
lfWeightВес шрифта. Определяет жирность символов шрифта и может находиться в пределах от 0 до 1000. Файл windows.h содержит определение символических констант для этого поля:...
Таблица 4
Таблица 4КонстантаЗначение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_EXTRA...
LfItalic
lfItalicЕсли содержимое этого поля не равно нулю, запрашивается шрифт с наклонными буквами....
LfUnderline
lfUnderlineЕсли содержимое этого поля не равно нулю, запрашивается шрифт с подчеркиванием букв....
LfStrikeOut
lfStrikeOutЕсли содержимое этого поля не равно нулю, запрашивается шрифт с перечеркнутыми буквами....
LfCharSet
lfCharSetНабор символов. Можно использовать одну из следующих констант, определенных в файле windows.h:...
Таблица 5
Таблица 5КонстантаЗначениеОписание ANSI_CHARSET 0 Набор символов в кодировке ANSI DEFAULT_CHARSET 1 Не используется при отображении шрифтов. Определяется при необходимости запросить шрифт с заданн...
LfOutPrecision
lfOutPrecisionТребуемая степень соответствия параметров шрифта. Это поле используется для того, чтобы указать GDI способ выбора между двумя шрифтами, имеющими одинаковое название, но разный тип. Н...
Таблица 6
Таблица 6КонстантаЗначениеОписание OUT_DEFAULT_PRECIS 0Используется точность, заданная по умолчаниюOUT_STRING_PRECIS 1Выбирается шрифт, для которого соблюдается наибольшее соответствие в размерах...
LfClipPrecision
lfClipPrecisionПоле используется для определения способа, при помощи которого обрезается изображение символа, частично попавшего за пределы области ограничения вывода (clipping region), выбранную...
LfQuality
lfQualityКачество шрифта, полученного при отображении. Можно указывать одну из следующих констант:...
Таблица 7
Таблица 7КонстантаОписаниеDEFAULT_QUALITY Качество не имеет значения DRAFT_QUALITY Низкое качество. Допустимо масштабирование шрифтов, синтезирование наклонных, жирных, перечеркнутых и подчеркнуты...
LfPitchAndFamily
lfPitchAndFamilyС помощью этого поля можно определить, нужна ли фиксированная или переменна ширина символов. Кроме этого, можно определить семейство, к которому должен принадлежать полученный шриф...
Таблица 8
Таблица 8КонстантаОписаниеDEFAULT_PITCH Не имеет значения, будет ли шрифт иметь фиксированную или переменную ширину символов FIXED_PITCH Нужен шрифт с фиксированной шириной символов VARIABLE_PITCH...
Таблица 9
Таблица 9КонстантаОписаниеFF_DECORATIVE Шрифт, содержащий маленькие рисунки (пиктограммы). Примером такого шрифта может послужить шрифт Wingdings, поставляемый в составе Windows FF_DONTCARE Семейс...
LfFaceName
lfFaceNameСтрока, закрытая двоичным нулем, которая служит названием внешнего вида шрифта. Размер строки (включая закрывающий строку нуль) не должен превышать LF_FACESIZE байт. Вы можете указать, ч...
Выбор созданного шрифта в контекст отображения
Выбор созданного шрифта в контекст отображения Если вы заполнили все нужные поля в структуре LOGFONT и затем передали адрес структуры функции CreateFontIndirect, эта функция вернет идентификатор ш...
Функция ChooseFont
Функция ChooseFontТолько что мы приближенно описали алгоритм, который используется GDI для отображения логического шрифта на физический. Нетрудно заметить, что приложение может получить от GDI сов...
Рис 5 2 Диалоговая панель "Font"
Рис 5.2. Диалоговая панель "Font"Из списка "Font", который расположен в левой верхней части этой диалоговой панели, пользователь может выбрать название шрифта. Список "Fon...
Таблица 10
Таблица 10ПолеОписаниеlStructSizeРазмер структуры в байтах. Это поле необходимо заполнить перед вызовом функции ChooseFont hwndOwnerИдентификатор окна, которому будет принадлежать диалоговая панел...
5 3 Приложение FONTVIEW
5.3. Приложение FONTVIEWДля того чтобы вы могли быстро попробовать основные функции, предназначенные для выбора шрифта, мы подготовили приложение FONTVIEW. Меню "Font" приложения FONTVIE...
Рис 5 3 Вывод текста с наклоном
Рис 5.3. Вывод текста с наклономС помощью этого приложения вы можете убедиться в том, что повернуть можно только масштабируемые шрифты True Type....
Рис 5 4 Вывод перевернутого текста
Рис 5.4. Вывод перевернутого текстаИсходный текст приложения приведен в листинге 5.1. Листинг 5.1. Файл fontview/fontview.cpp // ---------------------------------------- // Приложение FONTVIEW //...
5 4 Получение информации о шрифте
5.4. Получение информации о шрифтеВ программном интерфейсе GDI имеется несколько функций, с помощью которых приложение может получить различную информацию о шрифте, выбранном в контекст отображени...
Определение метрик шрифта
Определение метрик шрифтаДля удобства мы напомним вам методику определения метрик шрифта. Метрику шрифта , выбранного в контекст отображения, можно определить с помощью функции GetTextMetrics : BO...
Рис 5 5 Метрики шрифта
Рис 5.5. Метрики шрифтаОтсчет всех размеров выполняется от так называемой базовой линии шрифта. Для размеров используются логические единицы, которые зависят от режима отображения, установленного...
Таблица 11
Таблица 11КонстантаЗначениеFW_DONTCARE0 FW_THIN100 FW_EXTRALIGHT200 FW_ULTRALIGHT200 FW_LIGHT300 FW_NORMAL400 FW_REGULAR400 FW_MEDIUM500 FW_SEMIBOLD600 FW_DEMIBOLD600 FW_BOLD700 FW_EXTRABOLD800 FW...
Таблица 12
Таблица 12ЗначениеОписаниеTMPF_FIXED_PITCH Шрифт с фиксированной шириной букв TMPF_VECTOR Векторный шрифт или масштабируемый шрифт True Type TMPF_TRUETYPE Шрифт True Type TMPF_DEVICE Шрифт устройс...
Таблица 13
Таблица 13КонстантаОписаниеFF_DECORATIVEШрифт, содержащий маленькие рисунки (пиктограммы). Примером такого шрифта может послужить шрифт Wingdings, поставляемый в составе Windows FF_DONTCAREСемейст...
Таблица 14
Таблица 14КонстантаЗначениеОписание ANSI_CHARSET0 Набор символов в кодировке ANSI DEFAULT_CHARSET1 Не используется при отображении шрифтов. Определяется при необходимости запросить шрифт с заданны...
Функция EnumFontFamilies
Функция EnumFontFamiliesВ тех случаях, когда вас не устраивают возможности диалоговой панели "Font", создаваемой функцией ChooseFont, придется использовать для выбора шрифтов список, соз...
Таблица 15
Таблица 15ЗначениеОписаниеDEVICE_FONTTYPE Шрифт устройства вывода RASTER_FONTTYPE Растровый шрифт TRUETYPE_FONTTYPE Шрифт True Type Через последний параметр функции EnumFontFamProc передаются 32-р...
6 Работа с принтером
6. Работа с принтером6.1. Контекст отображения для принтера6.2. Функция PrintDlg6.3. Функции для печати6.4. Приложение PRNFILEПриложения Windows работают с принтером совсем не так, как программы M...
6 1 Контекст отображения для принтера
6.1. Контекст отображения для принтера На первый взгляд, контекст отображения для принтера получить нетрудно - достаточно вызвать функцию CreateDC , указав имя драйвера, имя устройства и имя порта...
6 2 Функция PrintDlg
6.2. Функция PrintDlgС помощью функции PrintDlg приложение может вывести на экран одну из двух диалоговых панелей, представленных на Рисунок 6.1 и 6.2, с помощью которых пользователь может напечат...
Рис 6 1 Диалоговая панель "Print"
Рис 6.1. Диалоговая панель "Print"В верхней части диалоговой панели "Print" в поле "Printer" указано название принтера, который будет использован для печати. Вы может...
Рис 6 2 Диалоговая панель "Print Setup"
Рис 6.2. Диалоговая панель "Print Setup"В группе органов управления "Printer" вы можете выбрать для печати либо принтер, принятый по умолчанию ("Default Printer"), ли...
Рис 6 3 Диалоговая панель "Options" для лазерного принтера HP LaserJet III
Рис 6.3. Диалоговая панель "Options" для лазерного принтера HP LaserJet III Внешний вид диалоговой панели "Options" зависит от драйвера принтера, так как эта панель формируется...
Рис 6 4 Диалоговая панель "Options" для матричного принтера Epson FX850
Рис 6.4. Диалоговая панель "Options" для матричного принтера Epson FX-850Если вас не устраивает внешний вид диалоговых панелей "Print" и "Print Options", вы можете ис...
Структура PRINTDLG
Структура PRINTDLGВ качестве параметра функции PrintDlg необходимо передать адрес предварительно подготовленной структуры типа PRINTDLG , описанной в файле commdlg.h: typedef struct tagPD { DWORD...
LStructSize
lStructSizeРазмер структуры PRINTDLG в байтах. Это поле следует заполнить перед вызовом функции PrintDlg....
HwndOwner
hwndOwnerИдентификатор окна, создавшего диалоговую панель. Если в поле Flags не указано значение PD_SHOWHELP, в поле hwndOwner можно указать NULL....
HDevMode
hDevModeИдентификатор глобального блока памяти, содержащего структуру типа DEVMODE, которая используется для инициализации параметров принтера. Если содержимое этого поля указать как NULL, после в...
HDevNames
hDevNamesИдентификатор глобального блока памяти, содержащего структуру типа DEVNAMES, содержащей три текстовые строки. Первая строка определяет имя драйвера принтера, вторая - имя принтера, и трет...
HDC
hDCКонтекст устройства или информационный контекст. Это поле заполняется после возвращения из функции PrintDlg, если в поле Flags указано одно из значений: PD_RETURNDC или PD_RETURNIC. В первом сл...
Flags
FlagsЭто поле должно содержать флаги инициализации: PD_ALLPAGES Переключатель "All" в диалоговой панели "Print" должен находиться во включенном состоянии, при этом предполагает...
NFromPage
nFromPageНачальное значение для инициализации органа управления "From" диалоговой панели "Print". Используется только в том случае, если в поле Flags указан флаг PD_PAGENUMS. М...
NToPage
nToPageНачальное значение для инициализации органа управления "To" диалоговой панели "Print". Используется только в том случае, если в поле Flags указан флаг PD_PAGENUMS. Макси...
NMinPage
nMinPageМинимальное количество страниц, которое можно задать при помощи органов управления "From" и "To"....
NMaxPage
nMaxPageМаксимальное количество страниц, которое можно задать при помощи органов управления "From" и "To"....
NCopies
nCopiesЗначение для инициализации органа управления "Copies", если поле hDevMode содержит значение NULL....
HInstance
hInstanceИдентификатор модуля, который содержит шаблоны диалоговых панелей. Используется только в том случае, если указаны флаги PD_ENABLEPRINTTEMPLATE или PD_ENABLESETUPTEMPLATE....
LCustData
lCustDataПроизвольные данные, которые приложение может передать функции фильтра....
LpfnPrintHook
lpfnPrintHookАдрес функции фильтра для диалоговой панели "Print"....
LpfnSetupHook
lpfnSetupHookАдрес функции фильтра для диалоговой панели "Print Setup"....
LpPrintTemplateName
lpPrintTemplateNameАдрес текстовой строки, закрытой нулем, содержащей имя ресурса для шаблона диалоговой панели "Print". Для использования этого поля необходимо указать флаг PD_ENABLEPRI...
LpSetupTemplateName
lpSetupTemplateNameАдрес текстовой строки, закрытой нулем, содержащей имя ресурса для шаблона диалоговой панели "Print Setup". Для использования этого поля необходимо указать флаг PD_ENA...
HPrintTemplate
hPrintTemplateИдентификатор блока памяти, содержащего предварительно загруженный шаблон диалоговой панели "Print". Для использования этого поля необходимо указать флаг PD_ENABLEPRINTTEMP...
HSetupTemplate
hSetupTemplateИдентификатор блока памяти, содержащего предварительно загруженный шаблон диалоговой панели "Print Setup". Для использования этого поля необходимо указать флаг PD_ENABLESET...
Работа с функцией PrintDlg
Работа с функцией PrintDlgПеред вызовом функции PrintDlg следует проинициализировать нужные поля, записав в остальные поля нулевые значения: memset(&pd, 0, sizeof(PRINTDLG)); pd.lStructSize =...
Таблица 1
Таблица 1ПолеОписаниеdmDeviceNameИмя драйвера принтера dmSpecVersionНомер версии структуры DEVMODE. Для Windows версии 3.1 это поле содержит значение 0x30a dmDriverVersionВерсия драйвера dmSizeРаз...
6 3 Функции для печати
6.3. Функции для печатиВ операционной системе Windows версии 3.0 и более ранних версий для печати использовалась одна функция Escape, которая имела множество подфункций (63 подфункции). Начиная с...
6 4 Приложение PRNFILE
6.4. Приложение PRNFILEДля иллюстрации всего сказанного выше мы немного изменили приложение TEDIT, описанное в 12 томе "Библиотеки системного программиста", добавив в него возможность пе...
Рис 6 5 Главное окно приложения PRNFILE
Рис 6.5. Главное окно приложения PRNFILEИсходный основного файла приложения приведен в листинге 6.1. Листинг 6.1. Файл prnfile/prnfile.cpp // ---------------------------------------- // Редактор...
Литература
ЛитератураФролов, Г. В. Фролов. Библиотека системного программиста. Тома 11-13. Операционная система Microsoft Windows 3.1 для программиста. Часть 1-3. Москва, "Диалог-МИФИ", 1994 Charle...


Начало


Книжный магазин