Операционные системы. Программирование в операционной среде Windows

54 Например, вызов InvalidateRect (hWnd, NULL, 1); означает полностью перерисовать окно. 4.6.3.1. Проблема обновления окна Механизм перерисовки окна может быть нескольких видов. В простых случаях можно каждый раз при необходимости перерисовки окна заново выводить всю графическую информацию в окно, т.е. весь вывод в окно выполнять при обработке сообщения WM PAINT. Однако этот метод неэффективен при больших объемах меняющейся графики. Наиболее общий метод перерисовки окна - это поддерживать виртуальное окно в памяти и копировать его содержимое в окно на экране при получении сообщения WM PAINT. Для копирования информации с одного устройства на другое используется функция BitBltQ: BOOL BitBlt(HDC hdc, int X, int Y, int Width, int Height, HDC hSourse, int SourseX, int SourseY, DWORD dwRaster); Параметр hdc означает дескриптор контекстаустройства вывода (окна), параметр hSourse - дескриптор исходного контекстаустройства (памяти), X, Y - координаты вывода растра в окне. Width, Height - ширина и высота растра, параметры SourseX и SourseY обычно равны О, параметр dwRaster задает способ вывода растра (SRCCOPY означает перерисовку окна с затиранием предыдущего изображения). Например, тахХ = GetSystemMetries (SM_CXSCREEN); maxY = GetSystemMetries (SM_CYSCREEN); hdc = GetDC (hWnd); // создание совместимого контекста устройства памяти memdc = CreateCompatibleDC (hdc); hbit = GreateCompatibleBitmap (hdc, maxX, maxY); PAINTSTRUGT paintstruct; case WM_PAINT: hdc=BeginPaint(hWnd, &paintStruct); BitBlt(hdc, 0, 0, maxX, maxY, memdc, 0, 0, SRGGOPY); EndPaint (hWnd, &paintstruct); break; Для использования виртуального окна необходимо создать контекст устройства памяти, совместимый с контекстом реального окна и совместимый растр изображения. Растровое изображение содержит побитовое представление рисунка, который должен быть изображен в окне. Устройство памяти используется для создания изображения перед выводом в окно. Нри создании окна оконная функция получает сообщение WM CREATE, при обработке этого сообщения и необходимо создать виртуальное окно, выполнив следующую последовательность действий:

RkJQdWJsaXNoZXIy MTY0OTYy