|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
The WM_PAINT Message
Typically, an application draws in a window in response to a WM_PAINT message. Windows sends this message to a window procedure when changes to the window have altered the content of the client area. Windows sends the message only if there are no other messages in the application message queue.
Upon receiving a WM_PAINT message, an application can call BeginPaint to retrieve the display DC for the client area and use it in calls to GDI functions to carry out whatever drawing operations are necessary to update the client area. After completing the drawing operations, the application calls the EndPaint function to release the display DC. Before BeginPaint returns the display DC, Windows prepares the DC for the given window. It first sets the clipping region for the DC to be equal to the intersection of the portion of the window that needs updating and the portion that is visible to the user. Only those portions of the window that have changed are redrawn. Attempts to draw outside this region are clipped and do not appear on the screen.
Windows can also send WM_NCPAINT and WM_ERASEBKGND messages to the window procedure before BeginPaint returns. These messages direct the application to draw the nonclient area and window background. The nonclient area is the part of a window that is outside of the client area. The area includes features such as the title bar, window menu (also known as the System menu), and scroll bars. Most applications rely on the default window function, DefWindowProc, to draw this area and therefore pass the WM_NCPAINT message to this function. The window background is the color or pattern a window is filled with before other drawing operations begin. The background covers any images previously in the window or on the screen under the window. If a window belongs to a window class having a class background brush, the DefWindowProc function draws the window background automatically.
BeginPaint fills a PAINTSTRUCT structure with information such as the dimensions of the portion of the window to be updated and a flag indicating whether the window background has been drawn. The application can use this information to optimize drawing. For example, it can use the dimensions of the update region, specified by the rcPaint member, to limit drawing to only those portions of the window that need updating. If an application has very simple output, it can ignore the update region and draw in the entire window, relying on Windows to discard (clip) any unneeded output. Because the system clips drawing that extends outside the clipping region, only drawing that is in the update region is visible.
BeginPaint sets the update region of a window to NULL. This clears the region, preventing it from generating subsequent WM_PAINT messages. If an application processes a WM_PAINT message but does not call BeginPaint or otherwise clear the update region, the application continues to receive WM_PAINT messages as long as the region is not empty. In all cases, an application must clear the update region before returning from the WM_PAINT message.
After the application finishes drawing, it should call EndPaint. For most windows, EndPaint releases the display DC, making it available to other windows. EndPaint also shows the caret, if it was previously hidden by BeginPaint. BeginPaint hides the caret to prevent drawing operations from corrupting it.
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Сообщение WM_PAINT
Обычно, приложение втягивает окно в ответ на сообщение WM_PAINT. Окно посылает это сообщение в процедуру окна когда изменения в окно изменил содержимое области клиента. Окно посылает сообщение только если нет других сообщений в прикладной очереди сообщения.
На получающем сообщение WM_PAINT, приложение может вызвать BeginPaint, чтобы извлекать показ DC для области клиента и использовать это на вызовах в функции GDI, чтобы выполнять независимо от того какой чертеж, действия необходимы корректировать область клиента. После завершать действий чертежа, приложение вызывает функцию EndPaint, чтобы выпускать показ DC. Прежде, чем BeginPaint возвращает показ DC, Окно подготавливает DC к данному окну. Это сначала устанавливает вырезать регион для DC, чтобы равняться пересечению части окна, что нужно обновление и часть, которые видимые потребителю. Только те части окна, которое изменило, - redrawn. Попытки, чтобы делать за пределами этого региона вырезаны и не появился на экране.
Окно может также послать WM_NCPAINT и сообщения WM_ERASEBKGND в процедуру окна перед возврат BeginPaint. Эти сообщения направляют приложение, чтобы делать областью nonclient и фона окна. Область nonclient является частью окна, которое - вне области клиента. Область включает характеристики как например, зона названия, меню окна (также узнанное как меню Системы) и перемещает зоны. Большинство приложений доверяются в по умолчанию функцию окна, DefWindowProc, чтобы делать этой областью и следовательно передавать сообщение WM_NCPAINT в эту функцию. Фон окна является цветом или образец окно заполнено прежде, чем другие операции чертежа начнутся. Фон покрывает любые изображения прежде в окне или на экране под окном. Если окно принадлежит классу окна, имеющему щетку фона класса, функция DefWindowProc делает фоном окна автоматически.
BeginPaint ЗАПОЛНЯЕТ структуру PAINTSTRUCT информацией как например, измерения части окна, которое нужно корректироваться и флаг, указывающий сделан фон окна. Приложение может использовать эту информацию, чтобы оптимизировать чертеж. Например, это может использовать измерения области коррекции, определенной элементом rcPaint, чтобы ограничивать чертеж в только те части окна, что нужно обновление. Если приложение имеет очень простой выход, оно может проигнорировать область коррекции и втягивать целое окно, доверяясь на Windows, чтобы отвергать (клип) любой ненужный выход. Поскольку система вырезает рисуя, что расширяется за пределами вырезать области, только рисующей, что - в области коррекции видимое.
BeginPaint УСТАНАВЛИВАЕТ область коррекции окна на НЕДЕЙСТВИТЕЛЬНЫЙ. Это очищает область, предохраняющую это от генерации последующих сообщений WM_PAINT. Если приложение обрабатывает сообщение WM_PAINT но не вызывает BeginPaint или иным способом очищает область коррекции, приложение остается получать сообщения WM_PAINT так же долго (длиной) как, которые область не пустая. Во всех случаях, приложение должно очистить область коррекции перед возвратом из сообщения WM_PAINT.
После того, как приложение завершит чертеж, оно должно вызывать EndPaint. Для большинства окна, EndPaint выпускает дисплей DC, делающий это пригодное для другого окна. EndPaint ТАКЖЕ показывает символ ^, если прежде было спрятано BeginPaint. BeginPaint ПРЯЧУТ символ ^, чтобы предотвращать рисовать операции чтобы искажать это.
|
|
|
|
| |