Макроимена распространенных шрифтов

Макрос Шрифт
ANSI_FIXED_FONT Шрифт с фиксированным размером знаков
ANSI_VAR_FONT Шрифт с переменной шириной знаков
DEVICE_DEFAULT_FONT Шрифт для данного устройства, избираемый по дефлоту
DEFAULT_GUI_FONT Шрифт графического интерфейса, устанавливаемый по дефлоту
OEM_FIXED_FONT OEM-шрифт
SYSTEM_FONT Системный шрифт Windows
SYSTEM_FIXED Макроимена распространенных шрифтов_FONT Шрифт, использовавшийся как системный в ранешних версиях Windows

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

Выбор и внедрение интегрированных шрифтов – очень обычная задачка. Для этого программка должна Макроимена распространенных шрифтов поначалу сделать дескриптор шрифта – переменную типа HFONT. Потом нужно загрузить требуемый шрифт с помощью функции GetStockObject(), которая вернет дескриптор шрифта. Чтоб переключить шрифт, следует избрать шрифт с помощью функции SelectObject(), передав ей в качестве параметра приобретенный дескриптор шрифта. Функция SelectObject() вернет дескриптор ста­рого шрифта, которой был текущим ранее Макроимена распространенных шрифтов (можно сохранить этот дескриптор и в подходящий момент возвратиться к использованию старенького шрифта).

Пример 8-3. Последующий пример показывает функцию переключения шрифтов. В нем вводится новый пункт меню Шрифт. Всякий раз при выборе этой команды меню программка переключается меж системным шрифтом по дефлоту и ANSI-пропорциональным шрифтом.

// Демонстрация интегрированных шрифтов

#include Макроимена распространенных шрифтов

#include

#include

#include "Text.h"

LRESULT CALLBACK WindowFunc(HWND,UINT,WPARAM,LPARAM);

char szWinName[] = "МоеОкно"; // Имя класса окна

char str[255]; // Буфер строчки вывода

int X=0, Y=0; // Текущие координаты строчки

int maxX, maxY; // Размеры экрана

HDC memdc; // DC виртуального окна

HBITMAP hbit; // Растр - это виртуальное окно

HBRUSH hbrush; // Дескриптор кисти

HFONT holdf, hnewf; // Дескрипторы шрифтов

int WINAPI Макроимена распространенных шрифтов WinMain (HINSTANCE hThisInst,

HINSTANCE hPrevInst,

LPSTR lpszArgs,

int nWinMode)

{

HWND hwnd;

MSG msg;

WNDCLASS wcl;

HACCEL hAccel;

// Найти класс окна

wcl.hInstance=hThisInst; // Дескриптор приложения

wcl.lpszClassName=szWinName; // Имя класса окна

wcl.lpfnWndProc=WindowFunc; // Функция окна

wcl.style=0; // Стиль по дефлоту

wcl.hIcon=LoadIcon(NULL,IDI_APPLICATION); // Иконка

wcl.hCursor=LoadCursor(NULL,IDC_ARROW) ; // Курсор

wcl Макроимена распространенных шрифтов.lpszMenuName="MYMENU"; // Меню

wcl.cbClsExtra=0; // Без дополнительной

wcl.cbWndExtra=0; // инфы

// Найти наполнение окна белоснежным цветом

wcl.hbrBackground=

(HBRUSH)GetStockObject(WHITE_BRUSH);

if(!RegisterClass(&wcl)) // Зарегистр. класс окна

return 0;

// Сделать окно

hwnd=CreateWindow(szWinName, // Имя класса

"Переключение шрифтов",

WS_OVERLAPPEDWINDOW,// Стиль окна

CW_USEDEFAULT, // Х-координата

CW_USEDEFAULT, // Y-координата

CW_USEDEFAULT, // Ширина окна

CW_USEDEFAULT, // Высота окна

HWND_DESKTOP, // Нет родит. окна

NULL, // Нет Макроимена распространенных шрифтов меню

hThisInst, // Дескрип. приложения

NULL); // Без дополит. аргументов

// Загрузить акселераторы

hAccel=LoadAccelerators(hThisInst,"MYMENU");

ShowWindow(hwnd,nWinMode) ; // Показать окно и

UpdateWindow(hwnd); // перерисовать содержимое

// Запустить цикл обработки сообщений

while(GetMessage (&msg,NULL,0,0))

if(!TranslateAccelerator(hwnd,hAccel,&msg))

{

TranslateMessage(&msg); // Использ.Клавиатуры

DispatchMessage (&msg); // Возврат к Windows

}

return msg.wParam;

}

// Последующая функция вызывается операционной системой

// Windows и получает в качестве характеристик Макроимена распространенных шрифтов сообщения

// из очереди сообщений данного приложения

LRESULT CALLBACK WindowFunc(HWND hwnd,

UINT message,

WPARAM wParam,

LPARAM lParam)

{

HDC hdc;

PAINTSTRUCT paintstruct;

TEXTMETRIC tm;

SIZE size;

static fontswitch=0;

switch(message)

{

case WM_CREATE: // Получаем размеры экрана

maxX=GetSystemMetrics(SM_CXSCREEN);

maxY=GetSystemMetrics(SM_CYSCREEN);

hdc=GetDC(hwnd); // Совмест. с окном растр

memdc=CreateCompatibleDC Макроимена распространенных шрифтов(hdc);

hbit=CreateCompatibleBitmap(hdc,maxX,maxY);

SelectObject(memdc,hbit);

hbrush=(HBRUSH)GetStockObject(WHITE_BRUSH);

SelectObject(memdc,hbrush);

PatBlt(memdc,0,0,maxX,maxY,PATCOPY);

// Получить новый шрифт

hnewf=(HFONT)GetStockObject(ANSI_VAR_FONT);

ReleaseDC(hwnd,hdc);

break;

case WM_COMMAND:

switch(LOWORD(wParam))

{

case ID_SHOW:

SetTextColor(memdc,RGB(0,0,0)); // Черн

SetBkMode Макроимена распространенных шрифтов(memdc,TRANSPARENT); // Не изм

GetTextMetrics(memdc,&tm); // Метрики

sprintf(str,

"Высота шрифта %ld пикселей.",

tm.tmHeight);

TextOut(memdc,X,Y,str,strlen(str));

Y=Y+tm.tmHeight // Последующая

+tm.tmExternalLeading; // строчка

strcpy(str,"Это последующая строчка. ");

TextOut(memdc,X,Y,str,strlen(str));

GetTextExtentPoint32(memdc,str, //Длина

strlen(str),

&size);

sprintf(str,

"Длина предшествующей Макроимена распространенных шрифтов строчки %ld.",

size.cx);

X=size.cx; // В конец предшествующей строчки

TextOut(memdc,X,Y,str,strlen(str));

Y=Y+tm.tmHeight // Последующая

+tm.tmExternalLeading; // строчка

X=0; // X снова в начало

sprintf(str,"Размеры экрана %d x %d.",

maxX,maxY);

TextOut(memdc,X,Y,str,strlen(str));

Y=Y+tm.tmHeight // Последующая

+tm.tmExternalLeading Макроимена распространенных шрифтов; // строчка

InvalidateRect(hwnd,NULL,1); //Сказать

break;

case ID_FONT:

if(!fontswitch) // На новый шрифт

{

holdf=

(HFONT)SelectObject(memdc,hnewf);

fontswitch=1;

}

else // На старенькый шрифт

{

SelectObject(memdc,holdf);

fontswitch=0;

}

break;

case ID_RESET:

X=Y=0; // Стереть перерисовкой фона

PatBlt(memdc,0,0,maxX,maxY,PATCOPY);

InvalidateRect(hwnd,NULL,1); //Сказать

break;

case ID_HELP:

MessageBox(hwnd,"F2: вывести текст\n"

"F Макроимена распространенных шрифтов3: поменять шрифт\n"

"F4: с начала экрана",

"Помощь",MB_OK);

break;

}

break;

case WM_PAINT: // Перерисовка окна

hdc=BeginPaint(hwnd,&paintstruct); // Пол. DC

// Сейчас копируем растр из памяти на экран

BitBlt(hdc,0,0,maxX,maxY,memdc,0,0,SRCCOPY);

EndPaint(hwnd,&paintstruct); // Высвободить DC

break;

case WM_DESTROY: // Окончание программки

DeleteDC(memdc); // Удалить виртуальное окно

PostQuitMessage(0);

break Макроимена распространенных шрифтов;

default:

// Все сообщения, не обрабатываемые в данной

// функции, направляются на обработку по

// умолчанию

return DefWindowProc(hwnd,message,

wParam,lParam);

}

return 0;

}

До того как компилировать эту программку, измените предшествующий файл ресурсов так, как показано ниже:

#include

#include "Text.h"

MYMENU MENU

{

MENUITEM "&Текст", ID_SHOW

MENUITEM "&Поначалу", ID_RESET

MENUITEM "Поменять шрифт", ID_FONT

MENUITEM "Помощь", ID_HELP

}

MYMENU ACCELERATORS

{

VK Макроимена распространенных шрифтов_F2, ID_SHOW, VIRTKEY

VK_F3, ID_FONT, VIRTKEY

VK_F4, ID_RESET, VIRTKEY

VK_F1, ID_HELP, VIRTKEY

}

И, в конце концов, добавьте еще одну строчку в файл Text.h:

#define ID_SHOW 100

#define ID_RESET 101

#define ID_FONT 102

#define ID_HELP 103

Пример окна этой программки показан на рис. 8.2. Заметьте, что Макроимена распространенных шрифтов тут режим рисования фона устанавливается в TRANSPARENT. Таким макаром, текст, отображаемый в окне, не изменяет цвет фона.



mahamudra-i-priroda-razuma.html
mahmud-esambaev-1924-2000gg-doklad.html
main-cities-of-great-britain.html