Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЗвЫт_ЛР_C++.doc
Скачиваний:
1
Добавлен:
05.05.2019
Размер:
513.02 Кб
Скачать

Теоретичні відомості:

Все, що повязано з малюванням та виведенням тексту вікна, по можливості обробляється в блоці повідомлення WM_PAINT.

В роботі слід вивести текст у вікно. Для того, щоб програма зрозуміла, що малювати слід саме у даному конкретному вікні (одна програма може мати десятки вікон), слід виділлити контекст графічного пристрою HDC. В усіх графічних функціях перший аргумент - контекст.

API дає можливість вивести текст де завгодно, будь-якого кольору, розміру, шрифту.

Відома функція TextOut(), виводить текстовий рядок в заданих координатах. Саме вона виводила текст в лабораторній №2: "Hello, Win32 API!!!". Синтаксис цієї функції:

BOOL TextOut(HDC hdc, int x, int y, LPCTSTR lpString, int cbString);

Аргументы:

1. hdc - контекст графічного пристрою;

2. x ,y - координаты тексту, відлік яких ведеться від лівого верхнього кута вікна донизу і праворуч.

3. lpString - сам текст

4. cbString – довжина рядка. Якщо треба вивести весь рядок, можна вказати strlen(lpString).

Один з способів встановлення шрифту у WinAPI: заповнення структури LOGFONT, яка має велику кількість полів. Деякі з них:

lfCharSet - задає набір потрібних символів (кодування). Може приймати одне з значень: OEM_CHARSET, ANSI_CHARSET тощо. Це необхідно якщо, наприклад, буде виводитись текст не лише англійською мовою. При написанні програм з повідомленнями кирилицею слід встановити кодування DEFAULT_CHARSET, таким чином якщо у користувача встановлена українська мова в операційній системі, текст буде відображатися коректно.

lfPitchAndFamily - задає ширину символів і визначає родину шрифтів. З значенням параметру:

DEFAULT_PITCH - не має значення, чи має шрифт змінну чи фіксовану ширину,

FIXED_PITCH - ширина символів чітко фіксована;

VARIABLE_PITCH - ширина змінна;

lfHeight - висота шрифта;

lfWidth - ширина символів, якщо жирний шрифт, то слід вказати, наскільки жирний;

lfItalic – якщо це поле не 0, шрифт буде курсивний;

lfUnderline - якщо це поле не 0, шрифт буде підкреслений;

lfFaceName - імя шрифту

Після заповнення полів LOGFONT посилання на структуру передається функції CreateFontIndirect, яка повертає дескриптор створеного шрифту hfont:

static LOGFONT lf; //створення екземпляру структури LOGFONT

lf.lfCharSet=DEFAULT_CHARSET; //заповнення полів

lf.lfPitchAndFamily = DEFAULT_PICH;

...

HFONT hFont;

hFont=CreateFontIndirect(&lf); //передача посилання на структуру

SelectObject(hdc, hFont); //шрифт слід зробити поточним

TextOut(hdc, 10,10, str, strlen(str)); //виведення тексту вибраним шрифтом

Лістинг програми:

#include<windows.h>

LRESULT CALLBACK WndProc(HWND hWnd, UINT messg,

WPARAM wParam, LPARAM lParam)

{

HDC hdc;

PAINTSTRUCT ps;

LOGFONT lf;

HFONT hFont;

switch(messg)

{

case WM_PAINT :

hdc=BeginPaint(hWnd, &ps);

//Создаём свой шрифт

strcpy(lf.lfFaceName,"Times New Roman");

lf.lfHeight=20;

lf.lfItalic=1;

lf.lfStrikeOut=0;

lf.lfUnderline=0;

lf.lfWidth=10;

lf.lfWeight=20;

lf.lfCharSet=DEFAULT_CHARSET;

lf.lfPitchAndFamily=DEFAULT_PITCH;

lf.lfEscapement=900;

hFont = CreateFontIndirect(&lf);

SelectObject(hdc, hFont);

SetTextColor(hdc, RGB(0,0,100));

TextOut(hdc,80,280, "Коренюк Марк!!!", 15);

EndPaint(hWnd, &ps);

break;

case WM_DESTROY:

PostQuitMessage(0);

break;

default:

return(DefWindowProc(hWnd, messg, wParam, lParam)); //освобождаем очередь приложения от нераспознаных

}

return 0;

}

char szProgName[]="Ім’я программы";

char szIconName[]="IDI_MYICON"; //тут додана іконка

char szCursorName[]="IDC_MYCURSOR"; // тут доданий курсор

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)

{

HWND hWnd;

MSG lpMsg;

WNDCLASS w; //створення екземпляру структури WNDCLASS

//її заповнення

w.hbrBackground = CreateSolidBrush(RGB(50,50,100));

w.lpszClassName=szProgName; //ім’я програми - оголошено вище

w.hInstance=hInstance; //ідентифікатор поточного додатку

w.lpfnWndProc=WndProc; //вказівник на функцію вікна

w.hCursor=LoadCursor(hInstance, szCursorName); //завантаження курсору

w.hIcon=LoadIcon(hInstance, szIconName); // завантаження іконки

w.lpszMenuName=0; // меню поки немає

//w.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); //колір фону вікна

w.style=CS_HREDRAW|CS_VREDRAW; //стиль - перемалювання по х і по у

w.cbClsExtra=0;

w.cbWndExtra=0;

if(!RegisterClass(&w))

return 0;

hWnd=CreateWindow(szProgName, //імя програми

"Міняємо іконку і курсор!", //Заголовок окна

WS_OVERLAPPEDWINDOW, //Стиль вікна - перекриває

100, //положення вікна на екрані по х

100, // положення по у

500, //ширина

400, //висота

(HWND)NULL, //ідентифікатор батьківського вікна

(HMENU)NULL, // ідентифікатор меню

(HINSTANCE)hInstance, // ідентифікатор екземпляру програми

(HINSTANCE)NULL); //відсутність додаткових параметрів

ShowWindow(hWnd, nCmdShow);

UpdateWindow(hWnd);

while(GetMessage(&lpMsg, NULL, 0, 0)) { //отримання повідомлення з черги

TranslateMessage(&lpMsg); //перетворення повідомлень клавіш у символиы

DispatchMessage(&lpMsg); //Передає повідомлення відповідній функції вікна

}

return(lpMsg.wParam);

}

Вікно результату:

Висновок:

Під час даної лабораторної роботи були змінені параметри шрифту засобами API.

Лабораторна робота №4

Тема: Створення меню вікна. Створення ресурсу меню.

Мета: Навчитись створювати меню вікна засобами API.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]