Мы еще немного поэкспериментируем, то есть фонт и цвет.
Вы можете скачать пример здесь.
Теория:
Цветовая система Windows базируется на RGB значениях, R=красный, G=зеленый, B=синий. Если вы хотите указать Windows цвет, вы должны определить желаемый цвет в системе этих трех основных цветов. Каждое цветовое значение имеет область определения от 0 до 255. Hапример, если вы хотите чистый красный цвет, вам следует использовать 255, 0, 0. Или если вы хотите чистый белый цвет, вы должны использовать 255, 255, 255. Вы можете видеть из примеров, что получение нужного цвета очень сложно, используя эту систему, так что вам нужно иметь хорошее "чувство на цвета", как мешать и составлять их. Для установки цвета текста или фона, вы можете использовать SetTextColor и SetBkColor, оба из которых требуют хэндл контекста устройства и 32-битное RGB значение. Структура 32-битного RGB значения определена как:
RGB_value struct
unused db 0 blue db ? green db ? red db ?
RGB_value ends
Заметьте, что первый байт не используется и должен быть нулем. Порядок оставшихся байтов перевернут, то есть blue, green, red. Тем не менее, мы не будем использовать эту структуру, так как ее тяжело инициализовать и использовать. Вместо этого мы создадим макрос. Он будет получать три параметра: значения красного, зеленого и синего. Он будет выдавать желаемое 32-битное RGB значение и сохранять его в eax. Макрос определен следующим образом:
RGB macro red,green,blue
xor eax,eax mov ah,blue shl eax,8 mov ah,green mov al,red
endm
Вы можете поместить этот макрос в include файл для использования в будущем. Вы можете "создать" фонт, вызвав CreateFont или CreateFontIndirect. pазница между ними заключается в том, что CreateFontIndirect получает только один параметр: указатель на структуру логического фонта, LOGFONT.
СreateFontIndirect более гибкая функция из этих двух, особенно если вашей программе необходимо часто менять фонты. Тем не менее, в нашем примере мы "создадим" только один фонт для демонстрации, поэтому будем делать это через CreateFont. После вызова этой функции, она вернет хэндл фонта, который вы должны выбрать в определенном контексте устройства. После этого, каждая текстовая API функция будет использовать фонт, который мы выбрали.