Читайте также:
|
|
Функция UpdateWindow имеет следующий прототип:
void UpdateWindow(HWND hwnd);
Эта функция посылает сообщение WM_PAINT функции окна, идентификатор которого задан в качестве параметра hwnd. Сообщение посылается в обход очереди сообщений приложения, и только в том случае, если для окна существует непустая область обновления. Если в окне обновлять нечего, сообщение WM_PAINT не посылается.
При помощи функции InvalidateRect вы можете объявить любую область окна как требующую обновления. Прототип функции:
void InvalidateRect(HWND hwnd, LPRECT lprc, BOOL fErase);
Первый параметр (hwnd) функции является идентификатором окна, для которого выполняется операция. Второй параметр (lprc) - дальний указатель на структуру типа RECT, определяющую прямоугольную область, подлежащую обновлению. Третий параметр (fErase) определяет необходимость стирания фона окна. Если этот параметр задан как TRUE, фон окна подлежит стиранию.
Функция ValidateRect удаляет прямоугольную область из списка областей, подлежащих обновлению. Она имеет следующий прототип:
void ValidateRect(HWND hwnd, LPRECT lprc);
Первый параметр определяет идентификатор окна, второй является дальним указателем на структуру типа RECT, определяющую прямоугольную область, которая должна быть исключена из области обновления. Если в результате вызова функции ValidateRect в окне не остается областей, подлежащих обновлению, сообщение WM_PAINT удаляется из очереди сообщений приложения.
При обработке сообщения WM_PAINT перед выводом текста вызывается функция BeginPaint, возвращающая идентификатор так называемого контекста отображения (display context):
hdc = BeginPaint(hwnd, &ps);Контекст отображения используется функцией вывода текста - TextOut:
TextOut(hdc, 10, 10, "Сообщение WM_PAINT", 18);Перед завершением обработки сообщения WM_PAINT приложение должно обязательно вызвать функцию EndPaint, освобождающую полученный ранее контекст отображения устройства:
// Конструктор класса Window
// -------------------------------------
Window::Window (HINSTANCE hInstance, LPSTR szClassName,
LPSTR szWindowTitle)
{
// Сбрасываем флаг ошибки
errno = 0;
// Создаем окно
hwnd = CreateWindow(
szClassName, // имя класса окна
szWindowTitle, // заголовок окна
WS_OVERLAPPEDWINDOW, // стиль окна
CW_USEDEFAULT, // задаем размеры и расположение
CW_USEDEFAULT, // окна, принятые по умолчанию
CW_USEDEFAULT,
CW_USEDEFAULT,
0, // идентификатор родительского окна
0, // идентификатор меню
hInstance, // идентификатор приложения
NULL); // указатель на дополнительные параметры
// Если при создании окна были ошибки,
// устанавливаем флаг ошибки
if(!hwnd)
{
errno = 1;
return;
}
}
Конструктор класса Window сбрасывает флаг ошибок и создает окно, вызывая для этого функцию CreateWindow. Если при создании окна были ошибки, устанавливается флаг ошибок.
Контекст отображения представляет собой структуру в памяти, описывающую окно. В этой структуре находятся характеристики окна, используемые для вывода в него текста и графических изображений, такие, как цвет фона и цвет кисти, используемой для рисования текста или графики, шрифт для вывода текста, толщина и вид рисуемых линий и т. д. Весь вывод в окно должен выполняться с использованием функций интерфейса графических устройств GDI, составляющих подмножество программного интерфейса Windows.
Функция TextOut, которая используется для вывода текста, также относится к интерфейсу GDI. Она имеет пять параметров:
BOOL TextOut(HDC hdc, int nXStart, int nYStart,LPCSTR lpszString, int cbString);Первый параметр (hdc) определяет используемый контекст отображения. При обработке сообщения WM_PAINT контекст отображения создается функцией BeginPaint для того окна, идентификатор которого указывается этой функции в качестве первого параметра.
Второй (nXStart) и третий (nYStart) параметры задают координаты (x, y) начальной позиции, начиная с которой будет выполняться вывод текста.
Четвертый параметр (lpszString) является дальним указателем на выводимую строку, длина которой определяется последним, пятым параметром (cbString).
Функция TextOut не имеет параметров, определяющих шрифт, размер букв, цвет фона, цвет букв и т. п. Все эти характеристики текста хранятся в структуре контекста отображения. Идентификатор контекста отображения передается функции TextOut в качестве первого параметра.
Когда вы создаете контекст отображения, Windows заполняет соответствующую структуру значениями по умолчанию.
Используемая система координат также определяется в контексте отображения.
Существует и другой способ получения контекста отображения, который должен использоваться при обработке других, отличных от WM_PAINT, сообщений:
hdc = GetDC(hwnd);TextOut(hdc, 10, 40, "Сообщение WM_LBUTTONDOWN", 24);ReleaseDC(hwnd, hdc);Для получения контекста отображения в этом случае следует воспользоваться функцией GetDC. После использования необходимо освободить контекст, вызвав функцию ReleaseDC.
Дата добавления: 2015-09-03; просмотров: 95 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Доступ к оболочке Windows. Поля вывода. Изменение пределов поля вывода и окна. Координаты, определяемые пользователем. Выбор начальных атрибутов окна. | | | Вывод окна. Изменение вида окна. Часто используемые элементы управления и диалоговые окна. Статические элементы управления. Элементы управления - кнопки. |