FreeBASIC в России

   

 Главная   Исходники   Русскоязычный форум   Полезные файлы   Пользователи   Поиск

 

 FB Wiki   Уроки   Скачать FreeBASIC   Проекты   Ссылки   Загрузить   Каталог ссылок

 
 

 Замечания и предложения по работе сайта оставляйте здесь.

Сейчас на сайте:

Вы вошли как: Guest   Регистрация   

Логин:     Пароль:     

Создай бесплатно WebMoney кошелёк на своём мобильном всего за 5 минут

 

Делаем dll своими руками

Хэндл окна

Графические средства языка

Точка пересечения отрезков

Окна без рамки

Физика поведения ядра

Win32 API Введение

►Урок 1 Win32 API

►Урок 2 Win32 API

►Урок 3 Win32 API

►Урок 4 Win32 API

►Урок 5 Win32 API

►Урок 6 Win32 API

►Урок 7 Win32 API

►Урок 8 Win32 API

►Урок 9 Win32 API

►Урок 10 Win32 API

►Урок 11 Win32 API

►Урок 12 Win32 API

►Урок 13 Win32 API

►Урок 14 Win32 API

►Урок 15 Win32 API

►Урок 16 Win32 API

►Урок 17 Win32 API

►Урок 18 Win32 API

►Урок 19 Win32 API

►Урок 20 Win32 API

►Урок 21 Win32 API

►Урок 22 Win32 API

►Урок 23 Win32 API

►Урок 24 Win32 API

Ассоциация файлов

Определить OS

Выводит имя компьютера

 

 

 

Win32 API. Урок 5. Больше о тексте.

Опытом поделился и оптимизировал под FreeBASIC:   15.01.2011

 

Реклама:

сеть между ноутбуками:1010

 

Мы еще немного поэкспериментируем, то есть фонт и цвет.


Теория:

Цветовая система Windows базируется на RGB значениях, R=красный, G=зеленый, B=синий. Если вы хотите указать Windows цвет, вы должны определить желаемый цвет в системе этих трех основных цветов. Каждое цветовое значение имеет область определения от 0 до 255. Например, если вы хотите чистый красный цвет,
вам следует использовать 255, 0, 0. Или если вы хотите чистый белый цвет, вы должны использовать 255, 255, 255. Вы можете видеть из примеров, что получение нужного цвета очень сложно, используя эту систему, так что вам нужно иметь хорошее "чувство на цвета", как мешать и составлять их. Для установки цвета текста или фона, вы можете использовать SetTextColor и SetBkColor, оба из которых требуют хэндл контекста устройства и 32-битное RGB значение.
Вы можете "создать" фонт, вызвав CreateFont или CreateFontIndirect. Разница
между ними заключается в том, что CreateFontIndirect получает только один параметр: указатель на структуру логического фонта, LOGFONT.

CreateFontIndirect более гибкая функция из этих двух, особенно если вашей программе необходимо часто менять фонты. Тем не менее, в нашем примере мы "создадим" только один фонт для демонстрации, поэтому будем делать это через CreateFont. После вызова этой функции, она вернет хэндл фонта, который вы должны выбрать в определенном контексте устройства. После этого, каждая текстовая API функция будет использовать фонт, который мы выбрали.

Содержимое:

Скопировать данный код в буфер обмена

Анализ:

hFont = SelectObject(hdc, CreateFont _
(24, _
16, _
0, _
0, _
400, _
0, _
0, _
0, _
OEM_CHARSET, _
OUT_DEFAULT_PRECIS, _
CLIP_DEFAULT_PRECIS, _
DEFAULT_QUALITY, _
DEFAULT_PITCH or FF_SCRIPT, _
"script"))

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

function CreateFont _
(byval nHeight as integer, _
byval nWidth as integer, _
byval nEscapement as integer, _
byval nOrientation as integer, _
byval nWeight as integer, _
byval cItalic as DWORD, _
byval cUnderline as DWORD, _
byval cStrikeOut as DWORD, _
byval cCharSet as DWORD, _
byval cOutputPrecision as DWORD, _
byval cClipPrecision as DWORD, _
byval cQuality as DWORD, _
byval cPitchAndFamily as DWORD, _
byval lpFacename as LPCSTR) as HFONT


• nHeight - желаемая высота символов. Ноль значит использовать размер по умолчанию.
• nWidth - желаемая ширина символов. Обычно этот параметр равен нулю, что позволяет Windows подобрать ширину соответственно высоте. Однако, в нашем примере,
дефаултная ширина делает символы нечитабельными, поэтому я установил ширину равную 16.
• nEscapement - указывает ориентацию вывода следующего символа, относительно предыдущего в десятых градусов. Как правило его устанавливают в 0. Установка
в 900 вынуждает идти все символы снизу вверх, 1800 - справа налево, 2700 - сверху вниз.
• nOrientation - указывает насколько символ должен быть повернут в десятых градусов. 900 - все символы будут "лежать" на спине, и далее по аналогии с предыдущим
параметром.
• nWeight - устанавливает толщину линии. Windows определяет следующие размеры:

• FW_DONTCARE equ 0
• FW_THIN equ 100
• FW_EXTRALIGHT equ 200
• FW_ULTRALIGHT equ 200
• FW_LIGHT equ 300
• FW_NORMAL equ 400
• FW_REGULAR equ 400
• FW_MEDIUM equ 500
• FW_SEMIBOLD equ 600
• FW_DEMIBOLD equ 600
• FW_BOLD equ 700
• FW_EXTRABOLD equ 800
• FW_ULTRABOLD equ 800
• FW_HEAVY equ 900
• FW_BLACK equ 900

• cItalic - 0 для обычных символов, любое другое значение для романских.
• cUnderline - 0 для обычных символов, любое другое значение для подчеркнутых.
• cStrikeOut - 0 для обычных символов, любое другое значение для перечеркнутых.
• cCharSet - символьный набор фонта. Обычно должен быть установлен в OEM_CHARSET, который позволяет Windows выбрать системно-зависимый фонт.
• cOutрutPrecision - указывает насколько близко должен приближаться фонт к характеристикам, которые мы указали. Обычно этот параметр устанавливается в OUT_DEFAULT_PRECIS.
• cClipPrecision определяет, что делать с символами, которые вылезают за пределы отрисовочного региона.
• cQuality - указывает качество вывода, то есть насколько внимательно GDI пытаться подогнать атрибуты логического фонта к атрибутам фонта физического. Есть выбор из трех значений: DEFAULT_QUALITY, PROOF_QUALITY и DRAFT_QUALITY.
• cPitchAndFamily - указывает питч и семейство фонта. Вы должны комбинировать значение питча и семьи с помощью оператора "or".
• lрFacename - указатель на заканчивающуюся NULL'ом строку, определяющую гарнитуру фонта.

Вышеприведенное описание, ни в коем случае, не является исчерпывающим. Вам следует обратиться к вашему Win32 API Справочнику за деталями.

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

SetTextColor(hdc, bgr(50, 200, 200))
SetBkColor(hdc, bgr(255, 0, 0))

мы используем макрос BGR, чтобы создать 32-битное RGB значение, которое будет использоваться функциями SetColorText и SetBkColor.

TextOut(hdc,0, 0, @TestString,SIZEOF(TestString))

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

описание функции TextOut

function TextOut _
(byval hDc as HDC, _
byval nXStart as integer, _
byval nYStart as integer, _
byval lpString, as LPCSTR, _
byval cbString as integer) as BOOL

hDc- Дескриптор контекста устройства.
nXStart- Устанавливает x-координату, в логических координатах, контрольной точки, которую система использует для выравнивания строки.
nYStart- Устанавливает y-координату, в логических координатах, контрольной точки, которую система использует для выравнивания строки.
lpString- Указатель на строку, которую нужно написать. Строка не должна завершаться нуль-терминатором, так как параметр cbString задает длину строки.
cbString- устанавливает длину строки. Для функции ANSI, это количество BYTE (байтов), а для функции Unicode, это является количеством WORD (слов).

Обратите внимание!, что для функции ANSI, символы в кодовых страницах SBCS (Набора однобайтовых символов) занимают один байт каждый, в то время как большинство символов в кодовых страницах DBCS (Набора двухбайтовых символов) занимают два байта; для функций Unicode большинство текущих заданных символов Unicode (которые в формате Basic Multilingual Plane (BMP) занимают одно слово (WORD), в то время как заменители символа Unicode - два слова (WORD).

SelectObject(hdc, hfont)

После этого мы должны восстановить старый фонт обратно в данном контексте устройства. Вам всегда следует восстанавливать объект, который вы заменили.

[C] Iczelion, пер. Aquila.

 

 

Прокомментировать

Ваше имя:  

Ваш e-mail:  

Сообщение:



Введите код: 

 

 

   Спасибо можно сказать, посетив любую ссылку:

 

 

© 2010-2012

DEPOzit (Попов Денис Владимирович)

WebMoney кошелёк: WMID#302963000004

ICQ:279786014 или R549103331586   Z116647355686