Разница между GetDC () и BeginPaint () - PullRequest
9 голосов
/ 30 апреля 2011

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

Ответы [ 3 ]

15 голосов
/ 30 апреля 2011

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

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

10 голосов
/ 30 апреля 2011

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

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

8 голосов
/ 30 апреля 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...