Разница между GetDC() и BeginPaint()

Я работаю над Win32 UI. Я хочу знать разницу между GetDC и BeginPaint. Когда использовать какой API, а когда не использовать какой API.

3 ответа

Решение

GetDC просто возвращает дескриптор в контекст устройства, который можно использовать в любое время и в любом месте, чтобы сделать свой собственный рисунок. BeginPaint, с другой стороны, подготавливает окно для рисования, а также предоставляет информацию о том, что следует рисовать (например, нужно ли перекрашивать фон и рисовать прямоугольник).

Примеры того, когда использовать каждый? BeginPaint чаще всего встречается в обработчиках WM_PAINT (MSDN: приложение не должно вызывать BeginPaint, кроме как в ответ на сообщение WM_PAINT. Каждый вызов BeginPaint должен иметь соответствующий вызов функции EndPaint.). GetDC можно использовать где угодно, так что если вы хотите рисовать во внешнем окне. В принципе, в любое время это не в обработчике WM_PAINT. BeginPaint и EndPaint также оказывают некоторое влияние на каретку. Читайте MSDN для более подробной информации.

GetDC() не является заменой для Begin+EndPaint(). Если вы попытаетесь, вы обнаружите, что ваш поток пользовательского интерфейса начинает сжигать 100% процессорного ядра, а ваш обработчик WM_PAINT вызывается снова и снова.

Большой - BeginPaint(), он очищает область обновления окна. Значение PAINTSTRUCT.rcPaint. WM_PAINT генерируется, пока у окна есть грязный прямоугольник, созданный с помощью вызова InvalidateRect() оконным менеджером или вашей программой, явно вызывающей его. BeginPaint() очищает его.

BeginPaint предназначен для вызова только в ответ на WM_PAINT сообщение. Полученный им контекст устройства указывает на недействительную (перерисовываемую) область окна. Это должно быть тогда выпущено, используя EndPaint,

GetDC можно вызвать в любое время. Полученный им контекст устройства указывает на всю клиентскую область окна. Чтобы освободить его, вы должны позвонить ReleaseDC,

Другие вопросы по тегам