|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
Invalidating the Client Area
Windows is not the only source of WM_PAINT messages. The InvalidateRect or InvalidateRgn function can indirectly generate WM_PAINT messages for your windows. These functions mark all or part of a client area as invalid (that must be redrawn).
In the following example, the window procedure invalidates the entire client area when processing WM_CHAR messages. This allows the user to change the figure by typing a number and view the results; these results are drawn as soon as there are no other messages in the application's message queue.
POINT 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}; POINT *ppt = aptPentagon; int cpt = 6; . . . case WM_CHAR: switch (wParam) { case '5': ppt = aptPentagon; cpt = 6; break; case '6': ppt = aptHexagon; cpt = 7; break; } InvalidateRect(hwnd, NULL, TRUE); return 0L;
case WM_PAINT: hdc = BeginPaint(hwnd, &ps); GetClientRect(hwnd, &rc); SetMapMode(hdc, MM_ANISOTROPIC); SetWindowExtEx(hdc, 100, 100, NULL); SetViewportExtEx(hdc, rc.right, rc.bottom, NULL); Polyline(hdc, ppt, cpt); EndPaint(hwnd, &ps); return 0L;
In this example, the NULL argument used by InvalidateRect specifies the entire client area; the TRUE argument causes the background to be erased. If you do not want the application to wait until the application's message queue has no other messages, use the UpdateWindow function to force the WM_PAINT message to be sent immediately. If there is any invalid part of the client area, UpdateWindow sends the WM_PAINT message for the given window directly to the window procedure.
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Аннулирующая Область Клиента
Окно не является единственным источником сообщений WM_PAINT. InvalidateRect Или функция InvalidateRgn может косвенно сгенерировать сообщения WM_PAINT для вашего окна. Эти функции выделяют все или часть области клиента как инвалид (что должно быть redrawn).
В следующем примере, процедура окна аннулирует целая область клиента при обработке сообщений WM_CHAR. Это позволяет потребителя, чтобы изменять фигуру печатая число и рассматривать результаты; эти результаты сделаны как только нет других сообщений в прикладной очереди сообщения.
ТОЧКА 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}; ТОЧКА *ppt = aptPentagon; int cpt = 6; . . . случай WM_CHAR: ключ (wParam) { случай '5': ppt = aptPentagon; cpt = 6; прерывание; случай '6': ppt = aptHexagon; cpt = 7; прерывание; } InvalidateRect(hwnd, НЕДЕЙСТВИТЕЛЬНАЯ, ИСТИНА); возвращайте 0L;
случай WM_PAINT: hdc = BeginPaint(hwnd, &ps); GetClientRect(hwnd, &rc); SetMapMode(hdc, MM_ANISOTROPIC); SetWindowExtEx(hdc, 100, 100, НЕДЕЙСТВИТЕЛЬНОЕ); SetViewportExtEx(hdc, rc.right, rc.bottom, НЕДЕЙСТВИТЕЛЬНЫЙ); Ломаная линия(hdc, ppt, cpt); EndPaint(hwnd, &ps); возвращайте 0L;
В этом примере, НЕДЕЙСТВИТЕЛЬНЫЙ аргумент использованный InvalidateRect определяет целую область клиента; аргумент ИСТИНЫ вызывает фон, который нужно стираться. Если Вы не хотите, чтобы приложение ожидало пока прикладная очередь сообщения не не имеет другие сообщения, используйте функцию UpdateWindow, чтобы заставлять сообщение WM_PAINT, которое нужно посылать немедленно. Если есть любая неправильная часть области клиента, UpdateWindow посылает сообщение WM_PAINT для данного окна непосредственно в процедуру окна.
|
|
|
|
| |