|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
Redrawing in the Update Region
You can limit the amount of drawing your application carries out when processing the WM_PAINT message by determining the size and location of the update region. Because Windows uses the update region when creating the clipping region for the window's display DC, you can indirectly determine the update region by examining the clipping region.
In the following example, the window procedure draws a triangle, a rectangle, a pentagon, and a hexagon, but only if all or a portion of each figure lies within the update region. The window procedure uses the RectVisible function and a 100-by-100 rectangle to determine whether a figure is within the clipping region (and therefore the update region) for the common DC retrieved by BeginPaint.
POINT aptTriangle[4] = {50,2, 98,86, 2,86, 50,2}, aptRectangle[5] = { 2,2, 98,2, 98,98, 2,98, 2,2}, aptPentagon[6] = {50,2, 98,35, 79,90, 21,90, 2,35, 50,2}, aptHexagon[7] = {50,2, 93,25, 93,75, 50,98, 7,75, 7,25, 50,2}; . . . case WM_PAINT: hdc = BeginPaint(hwnd, &ps); SetRect(&rc, 0, 0, 100, 100); if (RectVisible(hdc, &rc)) Polyline(hdc, aptTriangle, 4);
SetViewportOrgEx(hdc, 100, 0, NULL); if (RectVisible(hdc, &rc)) Polyline(hdc, aptRectangle, 5); SetViewportOrgEx(hdc, 0, 100, NULL); if (RectVisible(hdc, &rc)) Polyline(hdc, aptPentagon, 6); SetViewportOrgEx(hdc, 100, 100, NULL); if (RectVisible(hdc, &rc)) Polyline(hdc, aptHexagon, 7); EndPaint(hwnd, &ps); return 0L;
. . .
The coordinates of each figure in this example lie within the same 100-by-100 rectangle. Before drawing a figure, the window procedure sets the viewport origin to a different part of the client area by using the SetViewportOrgEx function. This prevents figures from being drawn one on top of the other. Changing the viewport origin does not affect the clipping region, but does affect how the coordinates of the rectangle passed to RectVisible are interpreted. Changing the origin also allows you to use a single rectangle to check the update region rather than individual rectangles for each figure.
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Перерисовывавшее в Регионе Коррекции
Вы можете ограничить сумму чертежа вашего приложения выполняет при обработке сообщения WM_PAINT определяя размер и позицию региона коррекции. Поскольку Окно использует регион коррекции при создании отсечения региона для показа окна DC, Вы можете косвенно определить регион коррекции изучая отсечение региона.
В следующем примере, процедура окна делает треугольником, прямоугольник, пентагон, и шестиугольником, но только если все или часть каждого фигуры лежит (лгать) в пределах региона коррекции. Процедура окна использует функцию RectVisible и 100-by-100 прямоугольник, чтобы определять независимо фигуру - в пределах вырезать региона (и следовательно регион коррекции) для общего DC извлеченное BeginPaint.
ТОЧКА aptTriangle[4] = {50,2, 98,86, 2,86, 50,2}, aptRectangle[5] = { 2,2, 98,2, 98,98, 2,98, 2,2}, aptPentagon[6] = {50,2, 98,35, 79,90, 21,90, 2,35, 50,2}, aptHexagon[7] = {50,2, 93,25, 93,75, 50,98, 7,75, 7,25, 50,2}; . . . случай WM_PAINT: hdc = BeginPaint(hwnd, &ps); SetRect(&rc, 0, 0, 100, 100); если Ломаная линия (RectVisible(hdc, &rc))(hdc, aptTriangle, 4);
SetViewportOrgEx(hdc, 100, 0, НЕДЕЙСТВИТЕЛЬНОЕ); если Ломаная линия (RectVisible(hdc, &rc))(hdc, aptRectangle, 5); SetViewportOrgEx(hdc, 0, 100, НЕДЕЙСТВИТЕЛЬНОЕ); если Ломаная линия (RectVisible(hdc, &rc))(hdc, aptPentagon, 6); SetViewportOrgEx(hdc, 100, 100, НЕДЕЙСТВИТЕЛЬНОЕ); если Ломаная линия (RectVisible(hdc, &rc))(hdc, aptHexagon, 7); EndPaint(hwnd, &ps); возвращайте 0L;
. . .
Координаты каждого фигуры в этом примере лежат в пределах того же 100-by-100 прямоугольника. Перед чертежом фигуры, процедура окна устанавливает начало viewport в другую часть области клиента используя функцию SetViewportOrgEx. Это предохраняет фигуры от сделанным один на верхе другого. Изменение начала viewport не влияет на вырезать регион но влияет на как координаты прямоугольника пройденного на RectVisible интерпретированы. Изменение начала также позволяет Вам, чтобы использовать единственный прямоугольник, чтобы проверять регион коррекции а не индивидуальных прямоугольников для каждого фигуры.
|
|
|
|
| |