Вывести отрезок можно при помощи кода, который приведен в листинге 3.2.
Листинг 3.2
case WM_RBUTT0ND0WN: {HDC de - GetDC(hWnd):
MoveToEx(dc.lO.lO.NULL);
LineTo(dc.90.400);
ReleaseDC(hWnd.dc);.
break;
}
Функция MoveToEx(dc.lO,10,NULL) задает координаты графического указателя. Графический указатель играет ту же роль, что и текстовый курсор при работе с текстом. Он невидим на экране, но многие функции неявно используют его координаты в качестве параметров. Так, функция LineToCdc .90.400) проводит отрезок от положения графического указателя до точки, указанной параметрами функции.
Если мы хотим по нажатию любой клавиши клавиатуры вывести на экран строку текста, это можно сделать вызовом функции TextOutO, пример которого показан в листинге 3.3.
Листинг 3.3
case WM_KEY:
{HDC dc - GetDC(hWnd);
TextOut(hdc.10.20.s.st r1 en(s));
ReleaseDC(hWnd.dc);.
break;
}
При выводе текста можно задавать цвет букв и цвет фона, на котором они нарисованы. По умолчанию в тексте используется белый цвет фона. Чтобы фон под буквами был прозрачным, то есть не отличался от цвета той области, в которой рисуются буквы, необходимо перед выводом текста настроить контекст вызовом функции SetBkMode( hdc. TRANSPARENT). Если в качестве второго параметра использовать константу OPAQUE, то фон букв будет непрозрачным.
Теперь нужно добавить в проект mnim файл RotateLine.cpp, содержащий функцию рисования отрезка длиной 2x1, проходящего через центр окна (хС, уС) под углом Alfa (этот проект находится в папке MinGr). Соответствующий функционал показан в листинге 3.4.
Листинг 3.4
finclude <windows.h>
#include <math.h>
void RotateLine(HDC hdc)
Вывод простейших графических примитивов
{RECT г:
static double Alfa;
//Переменная Alfa объявлена как статическая, поэтому при
//Al fa+-5.0/360.0*6.28;каждом вызове функции она увеличивается
//на 5 градусов.
GetClientRect(WindowFromDC(hdc).&г); int хС - г.right/2; int уС - г.bottom/2; int 1 - г.bottom/2;
MoveToEx(hdc. xC-l*cos(Alfa). yC-l*sin(Alfa). NULL);
LineTo(hdc. xC+l*cos(Alfa). yC+l*sin(Alfa));