Когда следует рисовать в окне
Приложение выполняет рисование в окне в разное время: при первом создании окна, при изменении размера окна, при перемещении окна из-за другого окна, при минимизации или максимальном увеличении окна, при отображении данных из открытого файла, при прокрутке, изменении или выборе части отображаемых данных.
Система управляет такими действиями, как перемещение и изменение размера окна. Если действие влияет на содержимое окна, система помечает затронутую часть окна как готовую к обновлению и при следующей возможности отправляет WM_PAINT сообщение в процедуру окна. Сообщение является сигналом для приложения, чтобы определить, что необходимо обновить, и выполнить необходимый рисунок.
Некоторые действия управляются приложением, например отображение открытых файлов и выбор отображаемых данных. Для этих действий приложение может пометить для обновления части окна, затронутой действием, что приводит к отправке WM_PAINT сообщения при следующей возможности. Если действие требует немедленной обратной связи, приложение может рисовать во время выполнения действия, не дожидаясь WM_PAINT. Например, типичное приложение выделяет область, выбранную пользователем, а не ожидает следующего сообщения WM_PAINT для обновления области.
Во всех случаях приложение может рисовать в окне сразу после его создания. Для рисования в окне приложение сначала должно получить дескриптор контекста устройства отображения для окна. В идеале приложение выполняет большую часть операций рисования во время обработки WM_PAINT сообщений. В этом случае приложение получает контекст устройства отображения, вызывая функцию BeginPaint . Если приложение выполняет рисование в любое другое время, например из WinMain или во время обработки сообщений клавиатуры или мыши, оно вызывает функцию GetDC или GetDCEx для получения контроллера домена дисплея.