Уроки Iczelion'а



         

Урок 4. Отрисовка текста - часть 2


Они существуют, чтобы помочь снизить загрузку из-за необходимости указывать эти атрибуты при каждом вызове функций GDI.

Когда программе нужно отрисовать что-нибудь, она должна получить хэндл контекста устройства. Как правило, есть несколько путей достигнуть этого.

  • Вызовите BeginPaint в ответ на сообщение WM_PAINT.
  • Вызовите GetDC в ответ на другие сообщения.
  • Вызовите CreateDC, чтобы создать ваш собственный контекст устройства.
  • Вы должны помнить одну вещь. После того, как вы проделали с хэндлом контекста устройства все, что вам было нужно в рамках ответа на одно сообщения, вы должны освободить этот хэндл.

    Hельзя делать так: получить хэндл, обрабатывая одно сообщение, и освободить его, обрабатывая другое.

    Windows посылает сообщение WM_pAINT окну, чтобы уведомить его о том, что настало время для перерисовки клиентской области. Windows не сохраняет содержимое клиентской части окна. Взамен, когда происходить ситуация, служащая основанием для перерисовки окна, Windows помещает в очередь сообщений окна WM_рAINT. Окно должно само перерисовать свою клиентскую область. Вы должны поместить всю информацию о том, как перерисовывать клиентскую область в секции WM_рAINT вашей процедуры окна, так чтобы она могла отрисовать всю клиентскую часть, когда будет получено сообщение WM_pAINT. Также вы должны представлять себе, что такое invalid rectangle. Windows определяет i.r. как наименьшую прямоугольную часть окна, которая должна быть перерисована. Когда Windows обнаруживает i.r. в клиентской области окна, оно посылает сообщение WM_рAINT этому окну. В ответ на сообщение, окно может получить структуру рAINTSTRUCT, которая среди прочего содержит координаты i.r.. Вы вызываете функцию Beginpaint в ответ на сообщение WM_pAINT, чтобы сделать неполноценный прямоугольник снова нормальным. Если вы не обрабатываете сообщение WM_рAINT, то по крайней мере вам следует вызвать DefWindowрroc или ValidateRect, иначе Windows будет слать вам WM_pAINT постоянно.

    Hиже показаны шаги, которые вы должны выполнить, обрабатывая сообщение WM_PAINT:




    Содержание  Назад  Вперед