Вывод текста в окно.

1) Сообщение WM_PAINT

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

void UpdateWindow(HWND hwnd);

void InvalidateRect(HWND hwnd, LPRECT rect, BOOL erase);

Последняя функция позволяет объявить прямоугольную область окна, как требующую обновления. Второй параметр функции — указатель на структуру, определяющую прямоугольную область. Если третий параметр задан как TRUE, то фон окна подлежит стиранию.

2) Контекст отображения.

Приложение должно хранить информацию о своем текущем состоянии, пользуясь которой функция окна в любой момент может перерисовать своё окно. Структура данных, описывающая состояние окна называется контекстом отображения. В этой структуре находятся характеристики окна, которые используются для вывода текста и изображений, такие как цвет фона, цвет кисти, шрифт, толщина и вид линий и т. д. Контекст отображений используется функциями интерфейса графических устройств GDI, которые являются подмножеством функций WINAPI32.Перед выводом в окно приложение должно создать контекст отображения. Windowsзаполнит структуру значениями по-умолчанию. Приложение может переопределить отдельные характеристики. После окончания вывода приложение должно обязательно вызвать функцию, которая освобождает полученный ранее контекст. При обработке сообщения WM_PAINT для создания и освобождения контекста используются следующие функции

Для получения контекста

HDC BeginPaint(HWND hwnd, PAINTSTRUCT* P);

Для освобождения контекста

void EndPaint(HWND hwnd, PAINTSTRUCT* P);

При обработке всех остальных сообщений.

HDC GetDC(HWND hwnd); //Получает контекст.

Обратная функция

void ReleaseDC(HWND hwnd, HDC hdc);

3) Функция вывода текста в окно.

BOOL TextOut(HDC hdc,

int startx , // Начало строки

int starty,

LPCSTR string, // Указатель на отображемую строку

int len); // Длина строки

Функция форматированного вывода текста в прямоугольную область.

Int WINAPI DrawText( HDC hdc,

LPCSTR string,

int len,

RECT FAR* r, // Дальний указатель на структуру RECT

UINT format);

Предпоследний параметр определяет прямоугольник, в который выводится текст. Последний аргумент определяет флаги форматирования.

 

Функция изменения цвета текста

COLORREF WINAPI SetTextColor(HDC, COLORREF)

Существует для изменения цвета макрокомманда

RGB(r, g, b)